1

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

検索と置換の自動化は私の得意分野ではありませんが、何が間違っているのでしょうか。

必須ではないと思われるパラメータのいくつかについては、すでにコメントアウトしています。

4

2 に答える 2

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
于 2012-09-07T21:26:57.423 に答える
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'!"  

これはハッキングされました:

数式リンクを削除するマクロ

于 2009-02-10T23:41:55.710 に答える