创建自安装宏?

Dav*_*vid 5 excel vba excel-vba access-vba word-vba

您好我为我的同事创建了许多宏.我用于分发到另一台计算机的当前方法是进入vba编辑器并导入.

我真的想为宏创建一种"安装程序",允许用户安装新宏而无需进入编辑器.我不确定这是否可能,但欢迎任何想法!

谢谢!

fin*_*dow 9

您需要在引用下启用Microsoft Scripting Runtime库.(VBE - >工具 - >参考.选中复选框.)

基本上,您创建一个字符串,其中包含您要安装的宏的代码.显然,字符串可能很长,有很多代码行,所以你可能需要几个字符串变量.

Dim toF As Workbook
Dim codeMod As CodeModule
Dim code As String
Dim fso As Scripting.FileSystemObject
Dim folder As folder
Dim name As String, file As String

Application.ScreenUpdating = False

Set fso = New FileSystemObject
Set folder = fso.GetFolder("C:\folder\here")
name = nameOfFileHere
file = folder & "\" & name

Set toF = Workbooks.Open(file)
'modify ThisWorkbook  to place it elsewhere
Set codeMod = toF.VBProject.VBComponents("ThisWorkbook").CodeModule

'erase everything if code already exists
If codeMod.CountOfLines > 0 Then
    codeMod.DeleteLines 1, codeMod.CountOfLines
End If

'dump in new code
code = _
"Private Sub Workbook_Open()" & vbNewLine & _
"   Dim user as String" & vbNewLine & _
"   Dim target as String" & vbNewLine & _
"   user = Application.UserName" & vbNewLine & _
"   target = """ & findUser & """" & vbNewLine & _
"   If user = target then" & vbNewLine & _
"   MsgBox ""I just dumped in some code.""" & vbNewLine & _
"   End if" & vbNewLine & _
"End Sub" & vbNewLine

With codeMod
    .InsertLines .CountOfLines + 1, code
End With

Application.ScreenUpdating = True
Run Code Online (Sandbox Code Playgroud)

  • 有趣的代码.我可以预见到几个问题:1)用户形式怎么样?2)是否存在某种必须手动设置的"信任访问VBA项目"设置? (2认同)
  • 是的,但正如你暗示的那样,它最适合短/简单的宏.此外,通过http://blogs.msdn.com/b/cristib/archive/2012/02/29/vba-programmatically-enable-access-to-the-vba-object-model-using-更改设置的代码macros.aspx (2认同)