gpt4 book ai didi

没有原始工作簿引用的 Excel VBA 复制表

转载 作者:行者123 更新时间:2023-12-03 20:36:28 26 4
gpt4 key购买 nike

我有一个例程,它从许多工作簿中复制各种工作表并将这些工作表粘贴到我称之为“主”工作簿(其中包含来自不同工作簿的不同工作表)中。

该代码运行良好,但它也使用通常的“额外”保留对原始工作表的引用,例如 =SUM([Book1]Sheet1!C13:G13) (为了保持示例简单)。

我正在复制的工作表需要以与我使用以下命令的完全相同的格式复制:

Dim WS_Count As Integer
WS_Count = wb.Worksheets.Count
For c = 1 To WS_Count
If wb.Sheets(c).Name <> "TEST" Then
wb.Sheets(c).Copy Before:=master.Worksheets(master.Sheets.Count)
End If
Next

文档的复制和合并效果很好,但是因为我还从工作簿中复制了一些摘要表,这些摘要表包含对工作表的内部引用,如果没有原始工作簿引用 [Book1],我在复制时遇到了困难。我在处理主工作簿时不知道工作簿的文件名,因为有很多源工作簿文档。

我的问题是,有没有办法在不复制单元格工作簿引用的情况下复制具有所有格式的工作表?

我也尝试了 Paste/Paste Special 的所有变体,但是这要么会丢失工作表格式,要么仍然保留其他工作簿引用。

我希望避免查找和替换任何包含 [... .xls] 的字符串,因为它不是一个优雅的解决方案。任何正确方向的指针将不胜感激。

最佳答案

如果一次复制所有工作表,公式引用将指向复制的工作表而不是源工作表。借助以下代码,您将获得与使用 Shift 选择多个工作表相同的功能:

wb.Worksheets(Array("Sheet1", "Sheet2")).Copy Before:=master.Worksheets(master.Worksheets.Count)

所以如果你的工作表名称是固定的,你可以替换里面的 Array()函数调用,否则您需要在 For c = 1 To WS_Count 中创建一个适当的数组循环并在之后调用一次复制代码:
Dim ws() As String ' declare string array
ReDim ws(wb.Worksheets.Count) As String ' set size dynamically

Dim counter As Long ' running counter for ws array
counter = 1

For c = 1 to WS_Count
If wb.Worksheets(c).Name <> "TEST" Then
ws(counter) = wb.Worksheets(c).Name
counter = counter + 1
End If
Next

ReDim Preserve ws(counter) As String ' Strip of superfluous empty array entries (i.e. TEST sheets
wb.Worksheets(ws).Copy Before:=master.Worksheets(master.Worksheets.Count)

请注意,此代码未经测试。

关于没有原始工作簿引用的 Excel VBA 复制表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24328526/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com