我正在尝试动态更新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
但是,当我尝试执行它时,它根本不起作用。
答案 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