VBProject:代码操作代码之常用语句

一、VBProject:代码操作代码之常用语句一、增加模块

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 vbCmpEnd 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)表示没有保护。

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 使用VB6.0编写代码的时候,有以下几点需要注意:1. 确保代码结构清晰,方便维护和重用;2. 避免使用不必要的变量;3. 尽量使用Option Explicit,以确保定义过的变量不会被意外改变;4. 尽量使用强类型变量,避免出现类型不匹配的问题;5. 使用调试工具,定位和修复BUG;6. 注意变量命名规范,以便阅读代码。 ### 回答2: 在使用VB6.0编写代码时,我们需要注意以下事项: 1. 版本兼容性:VB6.0是一个较旧的版本,与现代的操作系统和开发工具可能存在兼容性问题。因此,我们需要确保在使用VB6.0编写代码时,选择适合的操作系统和工具版本,以避免出现不必要的问题。 2. 设计规范:编写代码时,应遵循良好的设计规范,包括使用有意义的变量、函数和对象命名,遵循模块化设计原则,确保代码易于维护和扩展。 3. 错误处理:VB6.0中的错误处理机制较为简单,我们需要使用适当的错误处理语句,例如On Error语句,以捕获和处理可能出现的错误,避免程序崩溃或产生潜在的问题。 4. 内存管理:由于VB6.0没有自动垃圾回收机制,我们需要手动管理内存,确保及时释放不再使用的对象和资源,以避免内存泄漏和性能问题。 5. 性能优化:VB6.0是一种脚本语言,相对于其他编程语言可能存在一定的性能瓶颈。因此,在编写代码时,我们需要注意性能优化,避免复杂的嵌套循环和重复计算,以提高程序的执行效率。 6. 安全性考虑:编写代码时,我们需要考虑安全性问题,避免出现潜在的漏洞和攻击点。例如,对于用户输入的数据,需要进行适当的验证和过滤,以防止注入攻击和其他安全威胁。 总而言之,在使用VB6.0编写代码时,我们需要注意版本兼容性、设计规范、错误处理、内存管理、性能优化和安全性考虑等方面,以确保代码的质量和可靠性。 ### 回答3: 编写VB6.0代码时需要注意以下几点: 1. 确保代码的可读性和可维护性:给变量、函数和控件命名时要具有描述性;使用注释来解释代码的目的和功能;将代码块分组并使用缩进来提高可读性。 2. 数据类型的正确使用:VB6.0是弱类型语言,但应尽量使用合适的数据类型来提高代码的可靠性和效率。例如,使用整数型数据类型Integers代替变体型数据类型Variants来存储整数值。 3. 错误处理和异常处理:编写健壮的代码时,应注意处理可能发生的错误和异常情况。使用错误处理机制如On Error语句来捕获和处理错误,并及时提醒用户出现的异常情况。 4. 内存管理:VB6.0不支持自动垃圾回收,需要手动释放不再使用的对象和资源,特别是在使用COM组件、数据库连接和文件I/O等情况下。 5. 代码优化:优化代码的执行速度和内存占用可以提高应用程序的性能。使用循环结构来替代重复的代码;减少代码中的冗余操作和不必要的计算等。 6. 控件的正确使用:VB6.0提供了丰富的控件来开发应用程序。应熟悉控件的属性和方法,并正确使用它们来实现应用程序的功能和界面。 7. 跨平台兼容性:虽然VB6.0是一个Windows环境下的开发工具,但仍应考虑到可能的跨平台兼容性问题。尽量避免使用仅在Windows平台上可用的特定API和功能。 8. 使用版本控制:使用版本控制工具来管理代码的变更和版本。这样可以更好地跟踪和回滚代码的改动,确保项目的稳定和可维护性。 总而言之,编写VB6.0代码时要注重代码的质量和可维护性,遵循良好的编码规范和最佳实践,并不断优化和改进代码以提高应用程序的性能和用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

pigerr杨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值