我将Excel工作簿分发给多个用户,并且假定将XLSTART文件夹中预先安装了特定的宏文件。
如果他们没有正确安装宏,并且他们将工作簿发回给我,那么根据它的任何公式都包括宏的完整路径,例如:
'C:\Documents and Settings\richard.tallent\Application Data\
Microsoft\Excel\XLSTART\pcs.xls'!MyMacroFunction()
我想创建一个快速宏,我可以使用它从工作簿中的每个公式中删除不正确的路径。
我已经使用GetSpecialFolder(一个正常工作的外部函数)成功检索了特殊文件夹,但是下面显示的Replace调用本身会抛出“应用程序定义的或对象定义的错误”。
Public Sub FixBrokenMacroFormulas()
Dim badpath As String
badpath = "'" & GetSpecialFolder(AppDataFolder) & "\Microsoft\Excel\XLSTART\mymacro.xls'!"
Dim Sheet As Worksheet
For Each Sheet In ActiveWorkbook.Sheets
Call Sheet.Activate
Call Sheet.Select(True)
Call Selection.Replace(What:=badpath, Replacement:="", LookIn:=xlFormulas)
''//LookAt:=xlPart, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Next
End Sub
自动搜索和替换不是我的强项,我做错了什么?
我已经注释掉了一些看起来不太重要的参数。
答案 0 :(得分:2)
无需使用此类功能,您只需使用以下语句:
'Replace with a reference to other workbook
xlBook.ChangeLink Name:= _
"C:\LISTADOS\reporte_gestion_sucursales\modelo_vaciado\modelo_reporte.xlsx", _
NewName:=fileIn2, Type:=xlExcelLinks
答案 1 :(得分:1)
尝试以下方法:
Sub FormulaFindAndReplace(phrase As String)
For Each Sheet_Select In ActiveWorkbook.Worksheets
Sheet_Select.Activate
Set Found_Link = Cells.Find(what:=phrase, After:=ActiveCell, _
LookIn:=xlFormulas, lookat:=xlPart, searchorder:=xlByRows, _
searchdirection:=xlNext, MatchCase:=False)
While UCase(TypeName(Found_Link)) <> UCase("Nothing")
Found_Link.Activate
Found_Link.Formula = Replace(Found_Link.Formula, phrase, "")
Set Found_Link = Cells.FindNext(After:=ActiveCell)
Wend
Next Sheet_Select
End Sub
我打电话给:
FormulaFindAndReplace "'" & GetSpecialFolder(AppDataFolder) & "\Microsoft\Excel\XLSTART\mymacro.xls'!"
这是黑客攻击: