【问题标题】:How do I create a worksheet from a stored worksheet variable如何从存储的工作表变量创建工作表
【发布时间】:2016-05-07 03:50:32
【问题描述】:

这里有新的 VBA 用户...

我不知道如何从存储在内存中的变量创建工作表。我要做的是从打开的工作簿中创建现有“模板”工作表的多个副本,在内存中操作它们(例如更改范围值、添加公式等),然后在打开的工作簿中将它们创建为实际工作表.

我可以在内存中创建副本并将它们存储在一个数组中,但是我不能在我的工作簿中创建实际的工作表。请帮忙:)

Dim wb As Workbook
Dim ws As Worksheet
Dim wsTemplate As Worksheet
Dim wsCopies(1 To 5) As Worksheet
Dim x As Long

Set wb = ThisWorkbook
Set ws = wb.Sheets("Worksheet Test")
Set wsCopy = ws


For x = 1 To 5
    Set wsCopies(x) = wsTemplate
'used this line to make sure this actually copied into memory
    Debug.Print wsCopies(x).Range("A1").FormulaR1C1
Next x

提前致谢!

【问题讨论】:

  • Set wsCopies(x) = wsTemplate 你没有初始化wstemplate
  • 对不起 findwindow,我确实初始化了,但我为这个问题制作了通用代码并且很快就完成了。谢谢大家的回复。我很难相信没有办法做到这一点。它是类模块可以处理的吗?如果您无法操作并将其吐回,那么将工作表变量保存在内存中又有什么意义?

标签: excel worksheet vba


【解决方案1】:

确实没有只存在于内存中的“内存中的工作表”。您创建了一个新工作表,它就在您的工作簿中。没有一点技巧也没有一个很好的方法来复制工作表。比如:

For x = 1 To 5
    wsTemplate.copy after:=wsTemplate
    Set wsCopies(x) = wb.Sheets(wsTemplate.index + 1)
'used this line to make sure this actually copied into memory
    Debug.Print wsCopies(x).Range("A1").FormulaR1C1
Next x

这并不可怕,但并不是你想的那样。如果您不喜欢 application.screenupdating = false 和所有这些,您可以将 wsCopies(x).visible 设置为 xlSheetHidden 并进行进一步的操作,直到您再次切换到可见。

【讨论】:

  • 感谢 JNevill。我试图避免它,因为我认为这样会更干净,而不是在粘贴到工作簿后尝试管理工作表的顺序。我认为这可能是唯一的方法。
  • 我相信有一个 worksheets.add 方法会更接近你的想法,但是你不会有一个副本......所以这可能是完成什么的最好方法你需要。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-08
  • 1970-01-01
相关资源
最近更新 更多