如何使用vba动态更新excel中的工作簿名称?

时间:2018-02-25 18:55:43

标签: excel vba excel-vba

我正在尝试动态更新excel中公式中的工作簿名称,以便从不断变化的源文件中提取数据。

到目前为止,我一直在使用间接公式,但现在我有一个庞大的工作簿,大约有216,000个单元格填充,我不认为间接是最有效的方法。

我想使用VBA,但我对此没有经验。从做一些谷歌搜索我发现了一些东西,但我不知道如何在代码中实现我的特定需求。

到目前为止,我们已经提出了这个问题:

Sub replace()

Dim cell As Range

cell.Formula = replace(cell.Formula, "OfficeSupplies.csv", 
"OfficeSupplies2.csv")


Range("a1:d8").Value


Next

End Sub

但是,当我尝试执行它时,它根本不起作用。

2 个答案:

答案 0 :(得分:0)

试一试

Cells.Replace "OfficeSupplies.csv", "OfficeSupplies2.csv", xlPart, , True

答案 1 :(得分:0)

已编辑以插入指定范围的处理而不是ActiveSheet使用的范围,并处理与“有效”不同的工作表

要回答这个问题,您可以使用以下代码替换“Active”工作表使用的范围:

Sub replace()
    ActiveSheet.UsedRange.SpecialCells(xlCellTypeFormulas).Replace(What:="OfficeSupplies.csv", Replacement:="OfficeSupplies2.csv", LookAt:=xlPart)
End Sub

或者您可以明确地引用表单:

Sub replaceInSpecifiedSheet()
    Worksheets("MySheetName").UsedRange.SpecialCells(xlCellTypeFormulas).Replace(What:="OfficeSupplies.csv", Replacement:="OfficeSupplies2.csv", LookAt:=xlPart) ' change "MySheetName" to your actual sheet name
End Sub

或者您可能想要更改给定范围内的公式:

Sub replaceInSpecifiedRangeOfSpecifiedSheet()
    Worksheets("MySheetName").Range("A5:B8").SpecialCells(xlCellTypeFormulas).Replace(What:="OfficeSupplies.csv", Replacement:="OfficeSupplies2.csv", LookAt:=xlPart) ' change "MySheetName" to your actual sheet name
End Sub

但改变216k细胞中的公式可能是非常耗时的活动

您可能会考虑相反的情况:更改“不断变化的源文件”的名称

你可以在没有VBA的情况下做到这一点

如果您被“强迫”或更喜欢使用VBA,那么您可以使用“Name ... As”声明

Sub replace2()
    Dim FullNameToChange As String
    Dim HardCodedFullName As String

    FullNameToChange = "C:\ChangingName.xls"
    HardCodedFullName = "C:\HardCodedName.xls"
    If Dir(FullNameToChange) <> "" And Dir(HardCodedFullName) = "" Then Name FullNameToChange As HardCodedFullName
End Sub