对于每个函数,循环遍历特定命名的工作表
Posted
技术标签:
【中文标题】对于每个函数,循环遍历特定命名的工作表【英文标题】:For Each Function, to loop through specifically named worksheets 【发布时间】:2014-03-12 18:31:03 【问题描述】:我正在尝试找出正确的方法来编写一个通过 12 个具有特定名称(Jan、Feb、...、Dec)的工作表的宏。我想也许for each
会是一个不错的选择,所以我尝试了以下方法:
dim crntSht as worksheet
set crntsht=("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec")
for each crntsht in worksheets
.
.
.
end for
这不起作用,因为我以错误的方式定义了crntsht
。
谁能提出最好的方法来循环遍历所有 12 个工作表,并跳过同一工作簿中的所有其他工作表?
【问题讨论】:
【参考方案1】:使用 Microsoft Excel MONTHNAME
函数,该函数返回一个字符串,该字符串表示月份,给定一个从 1 到 12 的数字。
语法
月份名称(数字,[缩写])
缩写是可选的。此参数接受一个布尔值,TRUE 或 FALSE。如果此参数设置为 TRUE,则表示月份名称是缩写的。如果此参数设置为 FALSE,则月份名称不缩写。
例子
?MonthName(1,True)
会给你JAN
利用它为我们谋取利益
Sub Sample()
Dim ws As Worksheet
Dim i As Long
For i = 1 To 12
Set ws = ThisWorkbook.Sheets(MonthName(i, True))
With ws
'
'~~> Rest of the code
'
End With
Next i
End Sub
【讨论】:
【参考方案2】:Siddharth 的替代答案:
dim arrSht, i
arrSht = Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", _
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec")
for i = lbound(arrSht) to ubound(arrSht)
with worksheets(arrSht(i))
'work with sheet
end with
next i
【讨论】:
我将搜索有关 lbound 到 ubound 的更多信息,目前我无法确定它的具体功能,但非常感谢您的帮助! @Solaire -Array(...)
创建一个包含任何参数的数组(在本例中为月份名称列表)。通常(但不总是)数组中的第一个元素的索引=0。可以肯定的是,我们不假设第一个索引为零,并使用lbound()
找到第一个索引:同样ubound()
给我们最后一个索引。【参考方案3】:
啊,蒂姆打败了我……不过我的回答略有不同……
Sub LoopThroughSheets()
Dim Months As Variant
Dim Month As Variant
Months = Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", _
"Aug", "Sep", "Oct", "Nov", "Dec")
For Each Month In Months
'Code goes here.
Next Month
End Sub
【讨论】:
【参考方案4】:我认为这可能更好
dim v as variant
for each v in thisworkbook.sheets
' do something
' msgbox v.name
' msgbox v.index
next
【讨论】:
以上是关于对于每个函数,循环遍历特定命名的工作表的主要内容,如果未能解决你的问题,请参考以下文章
Python:循环遍历 Excel 工作表,将标题信息分配给每个工作表上的列,然后合并到一个文件
循环遍历 Excel 工作表并使用 C# 将文本保存到 TXT 文件中
Google脚本将电子表格中的工作表复制到新电子表格并在特定单元格后命名新电子表格