我有一个小VBA模块,我从一个工作簿调用来更新给定文件夹中的所有Excel工作簿。通过更新我的意思是它复制一个名为GetActiveXControlValues的模块,然后在该文件夹中的每个工作簿上运行此宏。现在当我在我的机器上运行时,一切正常。当我的同事使用相同的文件运行相同的代码时,他们在复制模块后会感到意外。当您查看应该具有名为“GetActiveXControlValues”的新模块的工作簿时,相反,该名称没有模块,而是称为“Module1”。此外,当您查看新模块时,它会以红色显示“已删除附件”。我检查过,我的同事在Excel 2010中拥有与我相同的安全设置。
我启用了所有宏和信任VBA项目对象模型。我提示我启用所有ActiveX控件。我取消选中了“禁用受信任的文档”以及“受保护的视图”选项卡上的所有框。有人以前见过这个或者知道我可以尝试排除故障吗?
Sub CopyModuleAndExecuteIt()
Dim wb As Workbook
Dim sFile As String
Dim sPath As String
Dim sFullMacroName As String
SetFolder
sPath = sExcelFolder
ChDir sPath
sFile = Dir("*.xls") ' File Naming Convention
Do While sFile <> "" ' Start of LOOP
' Open each Excel File in the specified folder
Set wb = Workbooks.Open(sPath & "\" & sFile) ' SET BP HERE!
Sleep (1000)
' Unprotect the Documents using SendKeys Hack
UnprotectVBADocument
' Import the GetActiveXControlValues Module into the Workbook
wb.VBProject.VBComponents.Import ("D:\GetActiveXControlValues.bas") ' SET BP HERE!
sFullMacroName = "'" & wb.Name & "'" & "!" & wb.VBProject.VBComponents.Item("GetActiveXControlValues").Name & ".GetActiveXControlValues"
' Run the GetActiveXControlValues Macro
Application.Run (sFullMacroName)
' Close the Workbook Saving Changes
wb.Close True
sFile = Dir
Loop ' End of LOOP
End Sub
答案 0 :(得分:0)
如果您的同事在Excel 2010中具有与您相同的安全设置,那么我想到的下一件事就是“防火墙”。检查他的防火墙设置。
答案 1 :(得分:0)
我正在努力创建一个 AddIn 通过 VBA 代码,当我保存它时,我在Excel工作表中编写代码,我保存为这样的文本:
Attribute VB_Name = "Module_Name"
你必须确定 .bas 文件实际上是纯文本。
我正在使用 VBA 代码创建 AddIn ,我在保存时将代码写入Excel工作表中,我保存为如下文本:
Sub Superheroes()
Dim sBeg as string, sEnd as String, sCatwoman as String, sAntMan as String
Dim vCode As Variant
'' Here is where i put the name i want to call my module
sBeg = "Attribute VB_Name = ""VBA_BasFile""" + vbCrLf + _
"Private Function fMix(sAnimal as String)as String "
sCatwoman = "Select case sAnimal"+ vbCrLf+ vbTab+"case ""cat"""+ _
vbCrLf+ vbTab+ "fMix = ""Catwoman"""
sAntMan = vbCrLf+ vbTab+"case ""Ant"""+ vbCrLf+ vbTab+ "fMix = ""AntMan"""+ _
vbCrLf+ "End Select"
sEnd = vbCrLf+ "End Sub"
vCode = Array(sBeg, sCatwoman, sAntMan, sEnd)
Workbooks.add
Range("A1").Resize(UBound(vCode) + 1, 1) = Application.Transpose(vCode)
With ActiveWorkbook
.SaveAs path + "VBA_BasFile.bas", xlTextPrinter
.Close False
End With
End Sub
当我导入到另一个Excel工作簿时,我可以调用 VBA_BasFile 中的任何过程或函数。