Exce表格网

vb向excel写入宏代码(excel中用vba调用宏)

来源:www.0djx.com  时间:2022-12-23 11:55   点击:217  编辑:表格网  手机版

1. excel中用vba调用宏

原因可能有两种情况: 

该OFFICE是精简版,没有宏功能。

解决办法是重新安装完整版OFFICE; 

二、宏设置过高。解决办法如下: 

1、打开excel; 

2、工具-选项-安全性-宏安全性-中-确定;

 3、关闭excel;

 4、打开带有宏的excel文件,在弹出对话框中选择启用宏。

2. 可以在vba程序中调用宏吗

操作步骤

如果大家对vba程序语言比较熟悉,可以直接在excel中编辑宏会更方便,宏代码也更简单。

执行“工具→宏→visualbasic编辑器”命令,进入“visualbasic编辑器”窗口。

在左侧“工程资源管理器”窗口中,选中保存宏的工作簿,然后执行“插入→模块”命令,插入一个新模块(模块1)。

将相关宏代码输入或复制、粘贴到右侧的编辑窗口中。

注意:宏的结构是:

sub宏名称()

相关代码

endsub

输入完成后,关闭“visualbasic编辑器”窗口返回即可。

本例我们直接编辑的宏,可以删除当前行前4列的单元格,而系统并不给出相关的提示。我们运行一下看看效果。

3. excel 调用宏

打开要设置宏快捷键的电子表格。

选择“开发工具”功能菜单。

单击工具栏中的“录制宏”按钮。

此时会弹出“录制新宏”的对话框,在此对话框中有一个快捷键设置。用户可以设置的快捷键有两种方式:一种是Ctrl+字母;另一种是Ctrl+Shift+字母。

如果用户要将宏的快捷键设置为“Ctrl+字母”的格式。操作方法是直接在键盘上按下所需要的字母,单击“确定”按钮后开始录制宏。这样就为宏设置好了快捷键

4. vba如何调用加载宏中的宏

那要看你需要在什么时候触发了,比如在excel中想在选择发生改变时触发,就在SelectionChange事件中调用该宏 Private Sub Worksheet_SelectionChange(ByVal Target As Range) call *** End Sub 工作表被激活时 Private Sub Worksheet_Activate() call *** End Sub 工作表的事件只有几个

5. excel需要vba宏语言支持来完成此操作

1、在excel中可以添加VBA代码,通过打开“开发工具”,点击打开VB编辑器,进入VBA编写代码。1开发工具2VB编辑器3选择工作,双击4在代码窗中输入代码2、VBA,Visual Basic for Applications(VBA)是Visual Basic的一种宏语言,是微软开发出来在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。主要能用来扩展Windows的应用程式功能,特别是Microsoft Office软件。也可说是一种应用程式视觉化的Basic 脚本。该语言于1993年由微软公司开发的的应用程序共享一种通用的自动化语言--------Visual Basic For Application(VBA),实际上VBA是寄生于VB应用程序的版本。微软在1994年发行的Excel5.0版本中,即具备了VBA的宏功能。

6. excel中使用宏

材料/工具:电脑、Excel20071、首先,打开Excel表格,点击表格最左上边office按钮---excel选项 。

2、弹出来一个对话框,点击”常用“栏目,右侧出现常用对话框,我们找到一个叫做“在功能区显示开发者选项卡”,点击勾选它。点击确定。

4、然后点击 ”文件“,选择”导入文件“。

5、导入后文件后,窗口上方有一排”宏“的指令,点那个绿色的三角运行"宏" 三角按钮就是经常用到的”开始/播放“那个按钮点,然后跳出一个对话框,点击”运行“。

6、我们要导入图片的位置,就是把图片存在我们电脑上的哪个位置复制下来填进方框里边去,复制 粘贴就可以了。也可以手动输入进去,但是完成后,一定记得再加一个“\”点确定。

7、点击确定,对话框关闭。我们就回到开始页面了,这时发现我们已经将图片导入表中对应的款式去了。

7. vba宏命令

wps宏就是把一些命令组织在一起,作为一个单独命令完成某种功能。

宏可以简化步骤,提高工作效率。

1.录制宏

如果不停地重复几个相同的操作,则利用宏的功能就可以实现。

首先,我们要录制新的宏,简单而言就是把我们要重复操作的步骤录制起来,方法是:点击工具——宏——录制新的宏。点击后,你就开始进入宏的录制了,把你步骤一步步录起来。

2.管理宏

宏录制完后,可用 Visual Basic 编辑器 ,来查看宏代码,以达到改错或更改宏的目的。

例如,如果想要用于文本换行的宏,还可以将文本变为粗体格式,则可以再录制另一个将单元格文本变为粗体的宏,然后再把其中的指令复制到用于文本换行的宏中就可以简单实现。

3.宏安全性

在 Excel 中对可通过宏传播的病毒提供安全保护。

8. vba窗体调用宏

一、增加模块

1.增加一个模块,命名为“我的模块”

ThisWorkbook.VBProject.VBComponents.Add(vbext_ct_StdModule).Name = "我的模块"

系统常量vbext_ct_StdModule=1

2.增加一个类模块,命名为“我的类”

ThisWorkbook.VBProject.VBComponents.Add(vbext_ct_ClassModule).Name = "我的类"

vbext_ct_ClassModule=2

3.增加一个窗体,命名为“我的窗体”

ThisWorkbook.VBProject.VBComponents.Add(vbext_ct_MSForm).Name = "我的窗体"

vbext_ct_MSForm=3

二、删除模块

1.删除“模块1”

ThisWorkbook.VBProject.VBComponents.Remove ThisWorkbook.VBProject.VBComponents("模块1")

2.删除窗体“UserForm1”

ThisWorkbook.VBProject.VBComponents.Remove ThisWorkbook.VBProject.VBComponents("UserForm1")

3.删除类模块“类1”

ThisWorkbook.VBProject.VBComponents.Remove ThisWorkbook.VBProject.VBComponents("类1")

4.删除所有的窗体

Sub RmvForms()

Dim vbCmp As VBComponent

For Each vbCmp In ThisWorkbook.VBProject.VBComponents

If vbCmp.Type = vbext_ct_MSForm Then ThisWorkbook.VBProject.VBComponents.Remove vbCmp

Next vbCmp

End Sub

相关:

工作表和ThisWorkbook的模块类型为vbext_ct_Document=100

三、增加代码

1.在“模块1”中插入代码

如果需要在“Sheet1”、“Thisworkbook”、或“Userform1”中操作,用只需将下面的“模块1”换成相应的名称即可。

方法1:

在模块的开始增加代码,增加的代码放在公共声明option,全局变量等后面。

Sub AddCode1()

ThisWorkbook.VBProject.VBComponents("模块1").CodeModule.AddFromString _

"sub aTest()" & Chr(10) & _

"msgbox ""Hello""" & Chr(10) & _

"end sub"

End Sub

方法2:

在模块指定行处增加代码,原代码后移。增加代码不理会和判断插入处代码的内容。当指定行大于最后一行行号时,在最后一行的后面插入。

Sub AddCode2()

With ThisWorkbook.VBProject.VBComponents("模块1").CodeModule

.InsertLines 1, "sub aTest()"

.InsertLines 2, "msgbox ""Hello"""

.InsertLines 3, "end sub"

End With

End Sub

相关语句:

(1)“模块1”中代码总行数:

ThisWorkbook.VBProject.VBComponents("模块1").CodeModule.CountOfLines

(2)“模块1”中代码公共声明部分的行数:

ThisWorkbook.VBProject.VBComponents("模块1").CodeModule.CountOfDeclarationLines

(3)显示“模块1”中第1行起的3行代码内容:

Sub ShowCodes()

Dim s$

s = ThisWorkbook.VBProject.VBComponents("模块1").CodeModule.Lines(1, 3)

Debug.Print s

End Sub

(4)过程aTest的起始行数:

ThisWorkbook.VBProject.VBComponents("模块1").CodeModule.ProcBodyLine("aTest", vbext_pk_Proc)

ThisWorkbook.VBProject.VBComponents("模块1").CodeModule.ProcStartLine("aTest", 0)

系统常量vbext_pk_Proc=0

二者的区别是ProcBodyLine返回sub aTest或Function aTest所在的行号,如果sub前面有空行,ProcStartLine返回空行的行号。

(5)过程aTest的总行数:

ThisWorkbook.VBProject.VBComponents("模块1").CodeModule.ProcCountLines("aTest", vbext_pk_Proc)

2.建立事件过程

建立事件过程除了使用上面的代码如下面的AddEventsCode1外,还可以使用CreateEventProc方法,如AddEventsCode2所示。

一般方法:

Sub AddEventsCode1()

ThisWorkbook.VBProject.VBComponents("ThisWorkbook").CodeModule.AddFromString _

"Private Sub Workbook_Open()" & Chr(13) & _

"MsgBox ""Hello""" & Chr(13) & _

"End Sub"

End Sub

'CreateEventProc方法:

Sub AddEventsCode2()

Dim i%

With ThisWorkbook.VBProject.VBComponents("Sheet1").CodeModule

i = .CreateEventProc("SelectionChange", "Worksheet") + 1

.InsertLines i, "Msgbox ""Hello"""

End With

End Sub

上面CreateEventProc的两个参数建立的事件过程为Worksheet_SelectionChange,分别是下划线两边的内容。

相关:

测试是否存在SelectionChange事件

下面函数测试模块modulname是否存在过程subname,如果存在,则返回起始行号,否则返回0。

debug.print HasSub("Worksheet_SelectionChange","Sheet1")

Function HasSub(ByVal subname As String, ByVal modulname As String) As Long

On Error Resume Next

Dim i&

i = ThisWorkbook.VBProject.VBComponents(modulname).CodeModule.ProcBodyLine(subname, 0)

If Err.Number = 35 Then

Err.Clear

HasSub = 0

Else

HasSub = i

End If

End Function

如果存在,则返回起始行号,否则返回0。

四、删除代码

1.删除Sheet1中第2行起的三行代码:

如果只删除1行代码,第二个参数可省略。

Sub DelCodes()

ThisWorkbook.VBProject.VBComponents("Sheet1").CodeModule.DeleteLines 2, 3

End Sub

2.删除“模块1”的所有代码:

Sub DelCodes()

With ThisWorkbook.VBProject.VBComponents("模块1").CodeModule

.DeleteLines 1, .CountOfLines

End With

End Sub

3.删除过程aTest:

Sub DelCodes()

With ThisWorkbook.VBProject.VBComponents("模块1").CodeModule

.DeleteLines .ProcStartLine("aTest", 0), .ProcCountLines("aTest", 0)

End With

End Sub

4.将“模块1”的第5行代码替换为“x=3”

ThisWorkbook.VBProject.VBComponents("模块1").CodeModule.ReplaceLine 5, "x=3"

五、引用项目

1.增加引用

ThisWorkbook.VBProject.References.AddFromFile "C:\Windows\System32\asctrls.ocx"

2.取消引用

ThisWorkbook.VBProject.References.Remove ThisWorkbook.VBProject.References("ASControls")

这里ASControls是引用的名字,即后面的rf.Name。

3.显示当前所有引用

Sub ShowRefs()

Dim rf As VBIDE.Reference

For Each rf In ThisWorkbook.VBProject.References

Debug.Print rf.Name, rf.FullPath

Next

End Sub

六、信任及密码

上面所有操作都基于这样的前题:

(1)EXCEL已设置:

工具(T)-宏(M)-安全性(M)-可靠发行商(T)-勾选了“信任对于VB项目的访问(V)”

(2)工程没有设置密码

如果不能满足它们中的任何一个,代码运行就会出错。因为微软不希望我们对VBProject进行操作,我们无从知道这种操作的直接方法被藏到了什么地方。幸运的是,微软在关起正门的同时,还是为我们留了一道门:SendKeys。借助于这道后门和“错误陷阱”,我们仍可以完成我们所要做的事。

下面给出绕开这两道门的示意代码,如果你要运行它们,请记得切回EXCEL主界面,而不是在VBE中直接运行。

1.信任对于VB项目的访问

Sub SetAllowableVbe()

On Error Resume Next

Dim Chgset As Boolean

'陷阱测试,VBProject.Protection在这儿并无实际的意义

Debug.Print ThisWorkbook.VBProject.Protection

If Err.Number = 1004 Then

Err.Clear

Application.SendKeys "%TMS%T%V{ENTER}"

Chgset = True

DoEvents

End If

'要执行的操作....

'.....

'操作完成后还原操作前的状态

If Chgset Then Application.SendKeys "%TMS%T%V{ENTER}"

End Sub

2.操作密码工程

Sub AllowPass()

Dim pw$

pw = "Password"

If ThisWorkbook.VBProject.Protection = vbext_pp_locked Then

Application.VBE.CommandBars(1).Controls("工具(T)").Controls("VBAProject 属性(&E)...").Execute

Application.SendKeys pw & "{ENTER}{ENTER}"

DoEvents

End If

'要执行的操作….

'.....

End Sub

Protection属性返回工程的受保护状态,vbext_pp_locked(1)为受保护,vbext_pp_none(0)表示没有保护。

9. vba 调用宏

四个宏顺序执行是吧? 那你就单独建立一个宏,专门负责给这四个宏排队 比如说你四个宏分别是A,B,C,D 那就就建一个E宏如下 Sub E() call A call B call C call D End sub call就是负责调用程序的

顶一下
(0)
0%
踩一下
(0)
0%
相关评论
我要评论
用户名: 验证码:点击我更换图片