Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 将多个工作表声明为变量_Excel_Vba - Fatal编程技术网

Excel 将多个工作表声明为变量

Excel 将多个工作表声明为变量,excel,vba,Excel,Vba,我试图以这种方式为工作表声明一些变量 Dim e For Each e In Array("Data", "CL", "SE", "GE", "E1", "E2", "E3", "E4", "E5", "STP", "STF", "RH", "CR", "MC", "AW") Set wsData = ThisWorkbook.Worksheets(e) Next e 是否可以使用1d数组声明所有工作表。。?如果没有,是否有一个解决办法来实现这一点。。? 示例wsData参考工作表“数

我试图以这种方式为工作表声明一些变量

Dim e
For Each e In Array("Data", "CL", "SE", "GE", "E1", "E2", "E3", "E4", "E5", "STP", "STF", "RH", "CR", "MC", "AW")
    Set wsData = ThisWorkbook.Worksheets(e)
Next e
是否可以使用1d数组声明所有工作表。。?如果没有,是否有一个解决办法来实现这一点。。? 示例wsData参考工作表“数据”
和wsCL引用工作表“CL”等等。

您可以像这样循环使用内置集合

For each e in ThisWorkbook.Worksheets
    'Now e represents a workbook object with each iteration
    Debug.Print e.Name
Next e
For e = 1 to ThisWorkbook.Worksheets.Count
    Debug.Print ThisWorkbook.Worksheets(e).Name
Next e
您也可以使用
工作表
,而不是
工作表

如果需要,您也可以使用
For…Next
循环,如下所示

For each e in ThisWorkbook.Worksheets
    'Now e represents a workbook object with each iteration
    Debug.Print e.Name
Next e
For e = 1 to ThisWorkbook.Worksheets.Count
    Debug.Print ThisWorkbook.Worksheets(e).Name
Next e

您可以像这样在内置集合中循环

For each e in ThisWorkbook.Worksheets
    'Now e represents a workbook object with each iteration
    Debug.Print e.Name
Next e
For e = 1 to ThisWorkbook.Worksheets.Count
    Debug.Print ThisWorkbook.Worksheets(e).Name
Next e
您也可以使用
工作表
,而不是
工作表

如果需要,您也可以使用
For…Next
循环,如下所示

For each e in ThisWorkbook.Worksheets
    'Now e represents a workbook object with each iteration
    Debug.Print e.Name
Next e
For e = 1 to ThisWorkbook.Worksheets.Count
    Debug.Print ThisWorkbook.Worksheets(e).Name
Next e

VBA中不能有变量名。不过,您可以通过工作表的代码名来引用工作表。例如:

with wsData
    'code
end with
现在Excel通常以“Sheet1”、“Sheet2”等形式为工作表指定代码名。您要做的是将这些代码名更改为您想要的名称,以便您可以在问题中引用它们。为了更改它们,您可以运行如下循环:

Sub setSheetCodenames()

Dim ws As Worksheet

For Each ws In ActiveWorkbook.Worksheets
    ws.[_CodeName] = "ws" & ws.Name
Next

End Sub
这将导致工作表“数据”被称为“wsData”,工作表CL被称为“wsCL”,以此类推


注意:这假设您的工作表已经创建。如果尚未创建,则需要先创建工作表,然后再运行此代码。

VBA中不能有变量名。但您可以通过工作表的代码名引用工作表。例如:

with wsData
    'code
end with
现在Excel通常以“Sheet1”、“Sheet2”的形式为工作表指定代码名。。等等。你要做的是将这些代码名更改为你想要的名称,这样你就可以在你的问题中引用它们。要更改它们,您可以运行如下循环:

Sub setSheetCodenames()

Dim ws As Worksheet

For Each ws In ActiveWorkbook.Worksheets
    ws.[_CodeName] = "ws" & ws.Name
Next

End Sub
这将导致工作表“数据”被称为“wsData”,工作表CL被称为“wsCL”,以此类推

注意:这假定已创建图纸。如果没有,则需要在运行此代码之前先创建它们。

工作表数组 代码

Option Explicit

Sub WorksheetGroup()
    Dim wsArray As Variant, wsData As Variant, i As Long
    wsArray = Array("Data", "CL", "SE", "GE", "E1", "E2", "E3", "E4", _
      "E5", "STP", "STF", "RH", "CR", "MC", "AW")
    wsData = getWorksheets(wsArray)
    ' e.g.
    For i = 0 To UBound(wsData)
        Debug.Print wsData(i).Name
    Next i
End Sub

Function getWorksheets(wsArray As Variant) As Variant
    Dim wsData As Variant, ws As Variant, i As Long
    ReDim wsData(UBound(wsArray))
    For Each ws In wsArray
        Set wsData(i) = ThisWorkbook.Worksheets(ws)
        i = i + 1
    Next ws
    getWorksheets = wsData
End Function
辅助子系统

Sub AddSheets()
    Dim e As Variant
    For Each e In Array("Data", "CL", "SE", "GE", "E1", "E2", "E3", "E4", _
      "E5", "STP", "STF", "RH", "CR", "MC", "AW")
        ThisWorkbook.Worksheets.Add , ActiveSheet
        ActiveSheet.Name = e
    Next e
End Sub
编辑 收藏版本

主要区别在于您必须使用
设置
,必须使用
添加
,这样您就不需要
i
,并且集合是基于一个的。此外,还有可能被利用的
参数

Sub WorksheetGroupColl()
    Dim wsArray, wsColl As Collection, i As Long
    wsArray = Array("Data", "CL", "SE", "GE", "E1", "E2", "E3", "E4", _
      "E5", "STP", "STF", "RH", "CR", "MC", "AW")
    Set wsColl = getWorksheetsColl(wsArray)
    ' e.g.
    For i = 1 To wsColl.Count
        Debug.Print wsColl(i).Name
    Next i
End Sub

Function getWorksheetsColl(wsArray As Variant) As Collection
    Dim wsColl As New Collection, ws As Variant
    For Each ws In wsArray
        wsColl.Add ThisWorkbook.Worksheets(ws) ' There are more parameters.
    Next ws
    Set getWorksheetsColl = wsColl
End Function
工作表数组 代码

Option Explicit

Sub WorksheetGroup()
    Dim wsArray As Variant, wsData As Variant, i As Long
    wsArray = Array("Data", "CL", "SE", "GE", "E1", "E2", "E3", "E4", _
      "E5", "STP", "STF", "RH", "CR", "MC", "AW")
    wsData = getWorksheets(wsArray)
    ' e.g.
    For i = 0 To UBound(wsData)
        Debug.Print wsData(i).Name
    Next i
End Sub

Function getWorksheets(wsArray As Variant) As Variant
    Dim wsData As Variant, ws As Variant, i As Long
    ReDim wsData(UBound(wsArray))
    For Each ws In wsArray
        Set wsData(i) = ThisWorkbook.Worksheets(ws)
        i = i + 1
    Next ws
    getWorksheets = wsData
End Function
辅助子系统

Sub AddSheets()
    Dim e As Variant
    For Each e In Array("Data", "CL", "SE", "GE", "E1", "E2", "E3", "E4", _
      "E5", "STP", "STF", "RH", "CR", "MC", "AW")
        ThisWorkbook.Worksheets.Add , ActiveSheet
        ActiveSheet.Name = e
    Next e
End Sub
编辑 收藏版本

主要区别在于您必须使用
设置
,必须使用
添加
,这样您就不需要
i
,并且集合是基于一个的。此外,还有可能被利用的
参数

Sub WorksheetGroupColl()
    Dim wsArray, wsColl As Collection, i As Long
    wsArray = Array("Data", "CL", "SE", "GE", "E1", "E2", "E3", "E4", _
      "E5", "STP", "STF", "RH", "CR", "MC", "AW")
    Set wsColl = getWorksheetsColl(wsArray)
    ' e.g.
    For i = 1 To wsColl.Count
        Debug.Print wsColl(i).Name
    Next i
End Sub

Function getWorksheetsColl(wsArray As Variant) As Collection
    Dim wsColl As New Collection, ws As Variant
    For Each ws In wsArray
        wsColl.Add ThisWorkbook.Worksheets(ws) ' There are more parameters.
    Next ws
    Set getWorksheetsColl = wsColl
End Function

谢谢。但目标是为这些工作表声明变量,而不仅仅是循环使用它们。。简而言之,要使用loop@yasserkalil声明多个变量,您可以创建一个工作表数组。但是您的代码如何知道Wshts(5)是
工作表(“E1”)
?请告诉我们更多关于您正在努力实现的目标,以便我们可以为您提供建议。我正在从事一个大型项目,我需要一种更简单的方法来使用工作表进行申报。。所以我没有想到为工作表声明公共变量..非常感谢。但目标是为这些工作表声明变量,而不仅仅是循环使用它们。。简而言之,要使用loop@yasserkalil声明多个变量,您可以创建一个工作表数组。但是您的代码如何知道Wshts(5)是
工作表(“E1”)
?请告诉我们更多关于您正在努力实现的目标,以便我们可以为您提供建议。我正在从事一个大型项目,我需要一种更简单的方法来使用工作表进行申报。。所以我没有想到为工作表声明公共变量..非常感谢。我会好好学习代码,因为我认为这是实现我目标的最合适的方法。非常感谢。我会好好学习代码,因为我认为这是实现我目标的最合适的方法。