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”)
?请告诉我们更多关于您正在努力实现的目标,以便我们可以为您提供建议。我正在从事一个大型项目,我需要一种更简单的方法来使用工作表进行申报。。所以我没有想到为工作表声明公共变量..非常感谢。我会好好学习代码,因为我认为这是实现我目标的最合适的方法。非常感谢。我会好好学习代码,因为我认为这是实现我目标的最合适的方法。