【问题标题】:copy excel sheets with table references复制带有表引用的 excel 工作表
【发布时间】:2011-02-03 23:24:23
【问题描述】:

我有一个包含多张工作表的 Excel 2007 文档,我们称之为source.xls。我想将一些工作表复制到文件夹中的所有 Excel 文档中,例如 C:\some_folder

我想出了如何遍历目录:

Dim file As String
file = dir("C:\some_folder\*.xlsx")
Do While file <> ""

   Rem do_stuff

   file = dir()
Loop

以及如何在工作簿之间复制工作表:

For Each ws in ActiveWorkbook.Worksheets
    Dim wb as Workbook
    Set wb = Workbook.Open(file)
    ws.Copy , wb.sheets(w.sheets.Count)
    wb.Close SaveChanges:=True
Next ws

到目前为止一切顺利。

现在其中一张表包含一个表,其中包含来自 SQL Server 的外部数据。复制效果很好。

另一个工作表将该表中的数据引用为Table_MYSERVER_MYDB[[row][col]]。当我复制它时,引用自动变成source.xls!Table_MYSERVER_MYDB[[row][col]]

更新: 我只是试图通过工作表和单元格来引用表格中的数据,例如=Other_Sheet!A1。还是同样的问题,引用神奇地变成了=[source.xls]Other_Sheet!A1

更新 2: 下一次尝试是使用=INDIRECT("Other_Sheet!"&amp;CELL("address")) 访问另一张工作表中的单元格,但这似乎会触发 Excel 2007 中的错误。所有单元格将显示相同的值。自己试试吧:)

我希望目标文档中的工作表能够引用同一工作簿中的表格。我该怎么做?

我也愿意接受 VBA 以外的其他解决方案

【问题讨论】:

    标签: vba excel excel-2007


    【解决方案1】:

    我自己想通了:

    我最后一次绝望的尝试是在所有公式中使用 Search&Replace 来删除 [source.xls]。

    当时一位同事建议使用:

    wb.ChangeLink Name:=source.xls NewName:=wb.Name Type:=xlExcelLinks
    

    正是我想要的!

    【讨论】:

      【解决方案2】:

      试试这个:

      Sub CopyFormula()
      Dim R1,R2 As Range
      
      Set R1 = Workbooks("wb2.xls").Sheets(1).Range("A1")
      Set R2 = Workbooks("wb1.xls").Sheets(1).Range("A1")
      
      R1.Formula = R2.Formula
      End Sub
      

      【讨论】:

      • 虽然这可能行得通,但恐怕这不会很好地扩展。我必须将 10 张纸中的数千个单元格复制到数千个文档中......
      • @chris Range 可以是任何东西......即“A1:Z99”
      • 啊,这可能会加快速度!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-19
      • 1970-01-01
      • 2015-08-09
      相关资源
      最近更新 更多