如何从主工作簿中保存副本

时间:2016-11-07 20:24:22

标签: excel vba excel-vba

enter image description here

上图是我希望实现的简化示例。基本上,我需要一个宏将通过列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

这是输出应该是:

enter image description here

应该是“Type4.xlsm”的一个例子:

enter image description here

2 个答案:

答案 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