首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Excel 2010 VBA:如何将工作表数组存储为变量?

Excel 2010 VBA:如何将工作表数组存储为变量?
EN

Stack Overflow用户
提问于 2013-06-18 20:44:56
回答 5查看 89.9K关注 0票数 3

我正在尝试使用我的代码调用我的工作表的几个数组。

代码语言:javascript
复制
ThisWorkbook.Sheets(Array("Sheet1", "Sheet3"))
ThisWorkbook.Sheets(Array("Sheet2", "Sheet5"))

我想知道是否有任何方法可以设置一个类似于下面的变量:

代码语言:javascript
复制
Dim ArrayOne As String
Dim ArrayTwo As String

ArrayOne = ThisWorkbook.Sheets(Array("Sheet1", "Sheet3"))
ArrayTwo = ThisWorkbook.Sheets(Array("Sheet2", "Sheet5"))

ArrayOne 'Call this Array then save

Filename:="C:\Data\testfile.xls", FileFormat:= _
xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _,
CreateBackup:=False 

ArrayTwo 'Call this array then save

Filename:="C:\Data\testfile.xls", FileFormat:= _
xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _,
CreateBackup:=False 

如果你能帮助我,请让我知道!

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-06-18 21:00:08

尝试使用记录宏功能。它将允许您选择多个工作表,然后将它们复制到新书中。下一步,保存这本书,你就到了那里。现在对代码进行修补,让它以您想要的方式工作。

归根结底是:

代码语言:javascript
复制
ThisWorkbook.Sheets(Array("Sheet1", "Sheet3")).Copy
ActiveWorkbook.SaveAs ...

如果您想要预定义数组,这也很容易做到;这些数组只需包含表的名称。可以使用变量变量创建数组:

代码语言:javascript
复制
Dim ArrayOne as Variant
ArrayOne = Array("Sheet1", "Sheet3")

并在.Sheets().Copy中使用它:

代码语言:javascript
复制
ThisWorkbook.Sheets(ArrayOne).Copy
票数 4
EN

Stack Overflow用户

发布于 2013-06-18 21:12:40

以下是VBA中的数组工作方式的示例:

代码语言:javascript
复制
Sub Example()
    Dim ArrayOne() As String
    Dim ArrayTwo() As String
    Dim ArrayThree As Variant
    Dim i As Long

    ReDim ArrayOne(1 To Sheets.Count)
    ReDim ArrayTwo(1 To 2)

    For i = 1 To Sheets.Count
        ArrayOne(i) = Sheets(i).Name
    Next

    ArrayTwo(1) = "Sheet1"
    ArrayTwo(2) = "Sheet2"

    ArrayThree = Array("Sheet1", "Sheet3")
End Sub

现在,据我所知,您不想使用数组。您可以在工作簿中引用工作表,如下所示:

代码语言:javascript
复制
Sheets("SheetName") 'SheetName is the name of your sheet
Sheets(1)           '1 = sheet index

将工作表复制到要保存的新工作簿的一种方法是:

代码语言:javascript
复制
Sub Example()
    Dim wkbk As Workbook

    ThisWorkbook.Sheets("Sheet1").Copy
    Set wkbk = ActiveWorkbook
    ThisWorkbook.Sheets("Sheet3").Copy After:=wkbk.Sheets(wkbk.Sheets.Count)

    wkbk.SaveAs FileName:="C:\New Excel Book.xlsx", _
                FileFormat:=xlOpenXMLWorkbook
    wkbk.Close
End Sub
票数 4
EN

Stack Overflow用户

发布于 2014-04-11 21:01:47

我在尝试创建动态数组时遇到了类似的问题(不知道有多少张表需要我处理)。我简单地使用了这个:

代码语言:javascript
复制
Sub copyArrayOfSheets()

Dim loopArray() As Variant

ReDim Preserve loopArray(1 To 1)
loopArray(1) = "Sheet1" ' a Sheet I know I need to export

j = 1
For Each loopSheet In ThisWorkbook.Sheets
    If loopSheet.Name <> "Sheet1" Then
        theName = loopSheet.Name
        j = j + 1
        ReDim Preserve loopArray(1 To j)
        loopArray(j) = theName ' Assign the name of the sheets to j-th position of loopArray() 
    End If
Next loopSheet

Sheets(loopArray()).Copy

Set newBook = ActiveWorkbook    
newBook.Activate

End Sub

希望这对你有任何帮助。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17169208

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档