Excel 编辑多个工作簿的公式以删除外部引用/更改对本地工作簿的引用

Excel 编辑多个工作簿的公式以删除外部引用/更改对本地工作簿的引用,excel,vba,Excel,Vba,我已将一份工作表复制到一批工作簿中(大约45份) 此工作表包含公式和参考,即=Sheetname!A1和=如果(Sheetname!A2=1,“这个”,“那个”)。 但是,复制图纸后,这些公式将变为 =[Original_Book.xlsm]Sheetname!$A$1 及 我想要一种删除所有“[Original_Book.xlsm]”引用的方法,以便公式再次成为本地公式 实际示例(以上仅用于说明目的 =[Survey_Checker.xlsm]Output!D42 应该成为 =Output

我已将一份工作表复制到一批工作簿中(大约45份)

此工作表包含公式和参考,即
=Sheetname!A1
=如果(Sheetname!A2=1,“这个”,“那个”)。

但是,复制图纸后,这些公式将变为

=[Original_Book.xlsm]Sheetname!$A$1

我想要一种删除所有“[Original_Book.xlsm]”引用的方法,以便公式再次成为本地公式

实际示例(以上仅用于说明目的

=[Survey_Checker.xlsm]Output!D42
应该成为

=Output!D42
=INDEX(QR1!E3:QR1!E9,Output!$G$17,0)
同样地:

=INDEX([Survey_Checker.xlsm]QR1!E3:[Survey_Checker.xlsm]QR1!E9,[Survey_Checker.xlsm]Output!$G$17,0)
应该成为

=Output!D42
=INDEX(QR1!E3:QR1!E9,Output!$G$17,0)
等等

事实上,如果有一个VBA方法可以在每个文件的A1:PE5单元格范围内从工作表(称为“DB输出”)中删除字符串“[Survey_Checker.xlsm]”的每个实例,我相信这可能有效


编辑:A1和PE5之间的每一列都有需要删除的UMLA引用。

这是原始宏的一个版本,添加了修复公式的代码

Sub Example()
    Dim path As String
    Dim file As String
    Dim wkbk As Workbook
    Dim rCell As Range

    Application.ScreenUpdating = False
    Application.DisplayAlerts = False


    path = "C:\Test\"
    file = Dir(path)

    Do While Not file = ""
        Workbooks.Open (path & file)
        Set wkbk = ActiveWorkbook
        Sheets.Add After:=Sheets(Sheets.Count)
        On Error GoTo Sheet_Exists
        ActiveSheet.Name = "DB Output"
        On Error GoTo 0
        ThisWorkbook.Sheets("DB Output").Range("A1:PE5").Copy Destination:=wkbk.Sheets("DB Output").Range("A1")

        For Each rCell In wkbk.Sheets("DB Output").UsedRange
            If InStr(rCell.Formula, ThisWorkbook.Name) > 0 Then
                rCell.Replace What:="[*]", Replacement:=""
            End If
        Next

        wkbk.Save
        wkbk.Close
        file = Dir
    Loop

    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
    Exit Sub

Sheet_Exists:
    Sheets("DB Output").Delete
    Resume
End Sub
这是一个宏,它只会从公式中删除工作簿引用

Sub Example()
    Dim path As String
    Dim file As String
    Dim rCell As Range

    Application.ScreenUpdating = False
    Application.DisplayAlerts = False


    path = "C:\Test\"
    file = Dir(path)

    Do While Not file = ""
        Workbooks.Open (path & file)

        Sheets("DB Output").Select

        For Each rCell In ActiveWorkbook.Sheets("DB Output").UsedRange
            rCell.Replace What:="[*]", Replacement:=""
        Next

        ActiveWorkbook.Save
        ActiveWorkbook.Close
        file = Dir
    Loop

    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
End Sub

这是原始宏的一个版本,添加了修复公式的代码

Sub Example()
    Dim path As String
    Dim file As String
    Dim wkbk As Workbook
    Dim rCell As Range

    Application.ScreenUpdating = False
    Application.DisplayAlerts = False


    path = "C:\Test\"
    file = Dir(path)

    Do While Not file = ""
        Workbooks.Open (path & file)
        Set wkbk = ActiveWorkbook
        Sheets.Add After:=Sheets(Sheets.Count)
        On Error GoTo Sheet_Exists
        ActiveSheet.Name = "DB Output"
        On Error GoTo 0
        ThisWorkbook.Sheets("DB Output").Range("A1:PE5").Copy Destination:=wkbk.Sheets("DB Output").Range("A1")

        For Each rCell In wkbk.Sheets("DB Output").UsedRange
            If InStr(rCell.Formula, ThisWorkbook.Name) > 0 Then
                rCell.Replace What:="[*]", Replacement:=""
            End If
        Next

        wkbk.Save
        wkbk.Close
        file = Dir
    Loop

    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
    Exit Sub

Sheet_Exists:
    Sheets("DB Output").Delete
    Resume
End Sub
这是一个宏,它只会从公式中删除工作簿引用

Sub Example()
    Dim path As String
    Dim file As String
    Dim rCell As Range

    Application.ScreenUpdating = False
    Application.DisplayAlerts = False


    path = "C:\Test\"
    file = Dir(path)

    Do While Not file = ""
        Workbooks.Open (path & file)

        Sheets("DB Output").Select

        For Each rCell In ActiveWorkbook.Sheets("DB Output").UsedRange
            rCell.Replace What:="[*]", Replacement:=""
        Next

        ActiveWorkbook.Save
        ActiveWorkbook.Close
        file = Dir
    Loop

    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
End Sub

杰出,工作起来很有魅力。我真的很感谢你为我提供这两种解决方案所付出的努力——它们都非常有用。非常感谢,我也将用它们来提高我的VBA!杰出,工作起来很有魅力。我真的很感谢你为我提供这两种解决方案所付出的努力——它们都非常有用。非常感谢,我将使用它们这些也可以提高我的VBA!