如何在不更改引用的情况下将Excel工作表复制并粘贴到新书中?

如何在不更改引用的情况下将Excel工作表复制并粘贴到新书中?,excel,vba,Excel,Vba,我正在尝试将工作表从一个Excel工作簿复制并粘贴到另一个工作簿。工作表集成到该工作表的本地模型中。因此,我需要复制的工作表中的单元格引用在绝对意义上保持不变 例如,带有“='Sheet1'C1”的单元格必须保留为“='Sheet1'C1”,而不是“='[原始工作簿]Sheet1'C1” 现在我在使用时得到了意想不到的结果 Sub TransferSheet(wka As Workbook, wkb As Workbook, WorksheetName As String) Dim ws

我正在尝试将工作表从一个Excel工作簿复制并粘贴到另一个工作簿。工作表集成到该工作表的本地模型中。因此,我需要复制的工作表中的单元格引用在绝对意义上保持不变

例如,带有
“='Sheet1'C1”
的单元格必须保留为
“='Sheet1'C1”
,而不是
“='[原始工作簿]Sheet1'C1”

现在我在使用时得到了意想不到的结果

Sub TransferSheet(wka As Workbook, wkb As Workbook, WorksheetName As String)
    Dim ws1 As Worksheet
    wka.Activate
    Set ws1 = wka.Worksheets(WorksheetName)
    wkb.Activate
    ws1.Copy after:=wkb.Worksheets(Worksheets.Count)
End Sub

我认为这应该奏效:

Sub TransferSheet(wka As Workbook, wkb As Workbook, WorksheetName As String)
    Dim ws1 As Worksheet
    wka.Activate
    Set ws1 = wka.Worksheets(WorksheetName)
    wkb.Activate
    ws1.Copy after:=wkb.Worksheets(Worksheets.Count)
    wkb.ChangeLink "wka.xls", "wkb.xls", xlExcelLinks
End Sub

编辑:此解决方案用于更改宏按钮上的链接。

我认为这应该可以:

Sub TransferSheet(wka As Workbook, wkb As Workbook, WorksheetName As String)
    Dim ws1 As Worksheet
    wka.Activate
    Set ws1 = wka.Worksheets(WorksheetName)
    wkb.Activate
    ws1.Copy after:=wkb.Worksheets(Worksheets.Count)
    wkb.ChangeLink "wka.xls", "wkb.xls", xlExcelLinks
End Sub
编辑:此解决方案用于更改宏按钮上的链接。

我找到了一个超级用户,该用户让我了解了如何在VBA中解决此问题。由于这是一个常见问题,人们使用了许多解决方案,例如将内容复制并粘贴到文本编辑器,然后返回到新工作表。另一种解决方案是使用查找和替换函数

将其与VBA相适应,可以通过在复制图纸后对其执行查找和替换来解决问题

Sub TransferSheet(wka As Workbook, wkb As Workbook, WorksheetName As String)
   Dim ws1 As Worksheet
   wka.Activate
   Set ws1 = wka.Worksheets(WorksheetName)
   wkb.Activate
   ws1.Copy after:=wkb.Worksheets(Worksheets.Count)
   wkb.ChangeLink "wka.xls", "wkb.xls", xlExcelLinks

   Dim sht As Worksheet
   Dim fnd As Variant
   Dim rplc As Variant

   fnd = "'[" & wka.Name & "]Summary'!"
   rplc = ""

   For Each sht In ActiveWorkbook.Worksheets
      sht.Cells.Replace what:=fnd, Replacement:=rplc, _
        LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, _
        SearchFormat:=False, ReplaceFormat:=False
   Next sht
End Sub
我能够找到一个超级用户,它让我知道如何在VBA中解决这个问题。由于这是一个常见问题,人们使用了许多解决方案,例如将内容复制并粘贴到文本编辑器,然后返回到新工作表。另一种解决方案是使用查找和替换函数

将其与VBA相适应,可以通过在复制图纸后对其执行查找和替换来解决问题

Sub TransferSheet(wka As Workbook, wkb As Workbook, WorksheetName As String)
   Dim ws1 As Worksheet
   wka.Activate
   Set ws1 = wka.Worksheets(WorksheetName)
   wkb.Activate
   ws1.Copy after:=wkb.Worksheets(Worksheets.Count)
   wkb.ChangeLink "wka.xls", "wkb.xls", xlExcelLinks

   Dim sht As Worksheet
   Dim fnd As Variant
   Dim rplc As Variant

   fnd = "'[" & wka.Name & "]Summary'!"
   rplc = ""

   For Each sht In ActiveWorkbook.Worksheets
      sht.Cells.Replace what:=fnd, Replacement:=rplc, _
        LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, _
        SearchFormat:=False, ReplaceFormat:=False
   Next sht
End Sub

您可以轻松地将新文件中的数据源更改回自身。以下是代码wkb.ChangeLink“c:\excel\wka.xls”、“c:\excel\wkb.xls”、xlExcelLinks您可以轻松地将新文件中的数据源更改回自身。以下是代码wkb.ChangeLink“c:\excel\wka.xls”、“c:\excel\wkb.xls”、xlExcelLinks