我试图在用户试图关闭像这样的工作簿时提示用户
Private Sub Workbook_BeforeClose(Cancel as Boolean)
MsgBox "Changes has been detected. Do you want to export the data ?"
End Sub
我知道此代码需要放在ThisWorkbook模块中。 有没有办法从我的自定义模块做到这一点?我需要将此功能添加到我的客户端使用的多个工作簿中作为升级的一部分,这通常通过用新模块替换旧模块来完成。
答案 0 :(得分:0)
有一种方法可以导入 ThisWorkbook模块。很久以前我为此编写了一些代码。
那它是如何运作的。
使用编辑器打开 ThisWorkbook.cls 文件(如Notepad ++) 并删除第一行。他们看起来像这样。
VERSION 1.0 CLASS
<强> BEGIN 强>
MultiUse = -1'True
<强> END 强>
执行 UpdateThisDocument Subrutine。
唯一的问题如何回答你自己是如何执行代码^^(我写了extern Updater执行代码)
Sub UpdateThisDocument()
Dim ModuleName As String
ModuleName = "DieseArbeitsmappe"
Dim aDoc As Workbook
Set aDoc = ThisWorkbook
Dim strPath As String
'Put here the Path to the Folder where the cls File of This Workbook is.
strPath = "C:\Users\z002mkvy\Desktop\"
With aDoc
If ModuleExists(ModuleName) = True Then
Call clsLoeschen
End If
'
With ThisWorkbook.VBProject
.VBComponents(ModuleName).CodeModule.AddFromFile _
strPath & "\DieseArbeitsmappe.cls"
Fehler:
End With
End With
End Sub
Private Function ModuleExists(ModuleName As String) _
As Boolean
On Error Resume Next
ModuleExists = Len(ThisWorkbook.VBProject _
.VBComponents(ModuleName).Name) <> 0
End Function
Private Sub clsLoeschen()
Dim modcls
Dim awcl As Integer
On Error Resume Next
Set modcls = ThisWorkbook.VBProject.VBComponents.Item("DieseArbeitsmappe")
awcl = modcls.CodeModule.CountOfLines
modcls.CodeModule.DeleteLines 1, awcl
Set modcls = Nothing
End Sub
我希望这可以帮到你
答案 1 :(得分:0)
您可以使用Application.VBE对象和Workbook.VBProject来修改文件的VBA。但请注意,它要求执行升级的Excel必须设置“信任访问VBA项目”设置(可以在信任中心的“宏设置”选项卡下找到)。当不再需要时,出于安全原因,这是最好的选择。