您的位置:首页 > 编程语言 > VB

VBA学习笔记(一):自动添加代码&VBA修改注册表

2013-11-20 21:21 746 查看
一、以下代码是通过Auto_Open事件,自动向ThisWorkbook里添加VBA代码:
Private Sub Auto_Open()
Call AddCodeToThisWorkbook
MsgBox ("This is Auto_Open Sub !")
End Sub
Private Sub AddCodeToThisWorkbook()
With ThisWorkbook.VBProject.VBComponents("ThisWorkbook").CodeModule
.InsertLines 1, "Private Sub Workbook_open()"
.InsertLines 2, "   MsgBox (""This is Workbook_Open Sub !"")"
.InsertLines 3, "End Sub"
End With
End Sub
二、以下代码是通过VBA修改注册表:

Sub ChangeSettings()
Dim Fso
Dim RegKey_User_AcsVm As String
Dim RegKey_User_Level As String
Dim RegKey_Mach_AcsVm As String
Dim RegKey_Mach_Level As String
Dim RegVal_User_AcsVm As Variant
Dim RegVal_User_Level As Variant
Dim RegVal_Mach_AcsVm As Variant
Dim RegVal_Mach_Level As Variant
Dim ExcelVersion As String

On Error Resume Next

ExcelVersion = Application.Version
Set Fso = CreateObject("Scripting.FileSystemObject")

RegKey_User_AcsVm = "HKEY_CURRENT_USER\Software\Microsoft\Office\" & ExcelVersion & "\Excel\Security\AccessVBOM"
RegKey_User_Level = "HKEY_CURRENT_USER\Software\Microsoft\Office\" & ExcelVersion & "\Excel\Security\Level"
RegKey_Mach_AcsVm = "HKEY_LOCAL_MACHINE\Software\Microsoft\Office\" & ExcelVersion & "\Excel\Security\AccessVBOM"
RegKey_Mach_Level = "HKEY_LOCAL_MACHINE\Software\Microsoft\Office\" & ExcelVersion & "\Excel\Security\Level"

Value_User_AcsVm = 1
Value_User_Level = 1
Value_Mach_AcsVm = 1
Value_Mach_Level = 1
Call ModReg(RegKey_User_AcsVm, Value_User_AcsVm, "REG_DWORD")
Call ModReg(RegKey_User_Level, Value_User_Level, "REG_DWORD")
Call ModReg(RegKey_Mach_AcsVm, Value_Mach_AcsVm, "REG_DWORD")
Call ModReg(RegKey_Mach_Level, Value_Mach_Level, "REG_DWORD")
End Sub
Sub ModReg(RegKey As String, Value As Variant, ValueType As String)
Dim oWshell
Set oWshell = CreateObject("WScript.Shell")
If ValueType = "" Then
oWshell.RegWrite RegKey, Value
Else
oWshell.RegWrite RegKey, Value, ValueType
End If
Set oWshell = Nothing
End Sub
三、以下函数用来判断一个工作簿中是否存在指定的Sheet名:

Function SheetIsExist(WBookName As String,WSheetName As String) As Boolean
Dim Tmp_WSheet As Worksheet
For Each Tmp_WSheet In Workbooks(WBookName).Worksheets
If UCase(Tmp_WSheet.Name) = UCase(WSheetName) Then
SheetIsExist = True
Exit Function
End If
Next Tmp_WSheet
SheetIsExist = False
End Function
以下为调用SheetIsExist函数的示例:

Sub Example01()
'开始计时
begin = Timer
'禁止刷屏
Application.ScreenUpdating = False
Application.DisplayAlerts = False
'记录当前文件名
Dim CurFileName As String
CurFileName = Sheets("Sheet1").[A1].Parent.Parent.Name
If SheetIsExist(CurFileName, "Sheet2") Then
Worksheets("Sheet2").Delete
End If
If SheetIsExist(CurFileName, "Sheet3") Then
Worksheets("Sheet3").Delete
End If

Application.ScreenUpdating = True
Application.DisplayAlerts = True
over = Timer
MsgBox ("已运行完成!共运行" & over - begin & "s")
End Sub
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: