使用VBA删除对公式中文件名的引用
我正在尝试从Excel工作簿复制一系列工作表,并将它们粘贴到新工作簿中。我遇到的问题是,当我将工作表复制到新工作簿中时,公式仍然是对公式中旧工作簿的引用。我试图获取工作簿的名称并用空字符替换它,但我相信我的代码引用的是新工作簿,而不是旧工作簿。我尝试了一个函数,也尝试了“ThisWorkbook”和“ActiveWorkbook”,但似乎都不起作用 这是函数使用VBA删除对公式中文件名的引用,vba,excel,Vba,Excel,我正在尝试从Excel工作簿复制一系列工作表,并将它们粘贴到新工作簿中。我遇到的问题是,当我将工作表复制到新工作簿中时,公式仍然是对公式中旧工作簿的引用。我试图获取工作簿的名称并用空字符替换它,但我相信我的代码引用的是新工作簿,而不是旧工作簿。我尝试了一个函数,也尝试了“ThisWorkbook”和“ActiveWorkbook”,但似乎都不起作用 这是函数 Function MyName() As String MyName = ThisWorkbook.Name End Functi
Function MyName() As String
MyName = ThisWorkbook.Name
End Function
这是完整的代码
Sub CopyToNewWorkbook()
Dim ws As Worksheet
Dim i As Integer
Dim wbCurrent As Workbook
Dim wbName As Variant
Dim wbNew As Workbook
'wbName = ActiveWorkbook.Name
'wbName = ThisWorkbook.Name
Set wbCurrent = ActiveWorkbook
Set wbNew = Workbooks.Add
For Each ws In wbCurrent.Sheets
Do While wbNew.Sheets.Count <= (wbCurrent.Sheets.Count - 3)
For i = 3 To wbCurrent.Sheets.Count
wbCurrent.Sheets(i).Copy after:=wbNew.Sheets(wbNew.Sheets.Count)
Next i
Loop
Next ws
wbNew.Activate
Sheets("Sheet1").Select
ActiveWindow.SelectedSheets.Delete
Cells.Replace What:=MyName, Replacement:="", LookAt:=xlPart, SearchOrder:=xlByRows, _
MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
End Sub
Sub CopyToNewWorkbook()
将ws设置为工作表
作为整数的Dim i
将当前工作区设置为工作簿
作为变量的名称
以工作簿的形式新建
'wbName=ActiveWorkbook.Name
'wbName=ThisWorkbook.Name
设置wbCurrent=ActiveWorkbook
设置wbNew=工作簿。添加
对于wbCurrent.Sheets中的每个ws
当wbNew.Sheets.Count时,您是否可以不使用断开链接方法
'Get all links
ExternalLinks = wbNew.LinkSources(Type:=xlLinkTypeExcelLinks)
'Break each link
For x = 1 To UBound(ExternalLinks)
wbNew.BreakLink Name:=ExternalLinks(x), Type:=xlLinkTypeExcelLinks
Next x
我能够通过以下代码获得预期的结果
Sub CopyToNewWorkbook()
Dim ws As Worksheet
Dim i As Integer
Dim wbCurrent As Workbook
Dim wbName As Variant
Dim wbNew As Workbook
Call MyName
wbName = MyName
Set wbCurrent = ActiveWorkbook
Set wbNew = Workbooks.Add
For Each ws In wbCurrent.Sheets
ws.Visible = xlSheetVisible
Do While wbNew.Sheets.Count <= (wbCurrent.Sheets.Count - 3)
For i = 3 To wbCurrent.Sheets.Count
wbCurrent.Sheets(i).Copy after:=wbNew.Sheets(wbNew.Sheets.Count)
Next i
Loop
Next ws
wbNew.Activate
Sheets("Sheet1").Select
ActiveWindow.SelectedSheets.Delete
Cells.Replace What:=MyName, Replacement:="", LookAt:=xlPart, SearchOrder:=xlByRows, _
MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Cells.Replace What:="'[" & wbName & "]", Replacement:="'", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:= _
False, SearchFormat:=False, ReplaceFormat:=False
End Sub
Sub CopyToNewWorkbook()
将ws设置为工作表
作为整数的Dim i
将当前工作区设置为工作簿
作为变量的名称
以工作簿的形式新建
叫我的名字
wbName=MyName
设置wbCurrent=ActiveWorkbook
设置wbNew=工作簿。添加
对于wbCurrent.Sheets中的每个ws
ws.Visible=xlSheetVisible
Do While wbNew.Sheets.Count抱歉,我没有时间键入代码,但是…如果在复制之前将所有=(等号)替换为|(管道),所有公式都将转换为文本字符串。然后,您可以将工作表复制到新工作簿,在新工作表上查找并替换工作簿名称,最后查找并替换| back to=,所有操作都完成了。您的3个循环都是冗余的,不是吗?皮带和吊带?如果您现在展示一些这些公式的示例,可能会有所帮助。@Vincent G,是的,您是对的,我有几个循环,我相信我遇到的问题是回到原始文件或区分这两个文件。@bwmastang13只有内部For循环是必要的,另外两个没有用。断开这些链接将完全断开公式并保留值?是的。断开链接会断开公式,这是我不想做的。如果我误解了那里的要求,很抱歉。那么,您是说希望更改引用旧书的每个单元格中的公式,将旧书的名称替换为新书的名称?请不要发布您自己问题的答案。相反,请使用“解决方案”部分更新问题。@ScottMarcus要求在哪里更新?没提那件事。