上图是我希望实现的简化示例。基本上,我需要一个宏将通过列A,粘贴到单元格C2,然后保存工作簿的副本。因此,最终结果将是“Type1.xlsm”,“Type2.xlsm”等。在每次宏运行结束时,外部工作表的链接将被破坏。
我遇到的问题是,每次保存主工作簿的副本时,宏都无法返回到原始工作簿。我需要一些方法可以递归调用宏。
这是我到目前为止所做的:
Sub test()
For i = 1 To 5
If Not Range("B" & i).Value = "X" Then
Range("C2").Value = Range("A" & i).Value
Calculate 'updates the formula
Range("B" & i).Value = "X" 'update the check
ActiveWorkbook.SaveAs Filename:=Range("A" & i).Value
ActiveWorkbook.Close
'INSERT CODE TO BREAK THE EXTERNAL LINK
'At this point, how do I refer back to the original workbook?
End If
Next i
End Sub
这是输出应该是:
应该是“Type4.xlsm”的一个例子:
答案 0 :(得分:0)
我认为这应该足够了。您可以创建指向主文件中相关工作表的对象变量(可能不是第一个)。包含代码的文件可以称为ThisWorkbook。
Sub test()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets(1)
For i = 1 To 5
If Not ws.Range("B" & i).Value = "X" Then
ws.Range("C2").Value = ws.Range("A" & i).Value
Calculate 'updates the formula
ws.Range("B" & i).Value = "X" 'update the check
ActiveWorkbook.SaveAs Filename:=ws.Range("A" & i).Value
ActiveWorkbook.Close
'At this point, how do I refer back to the original workbook?
End If
Next i
End Sub
答案 1 :(得分:0)
使用SaveCopyAs()方法
Sub test()
For i = 1 To 5
If Not Range("B" & i).Value = "X" Then
Range("C2").Value = Range("A" & i).Value
Calculate 'updates the formula
Range("B" & i).Value = "X" 'update the check
ActiveWorkbook.SaveCopyAs Range("A" & i).Value
'At this point, your active workbook and worksheet are still the "original" ones
End If
Next i
End Sub