excel - FOR EACH 带有单词的循环
问题描述
如何使用单词来应用 FOR EACH 循环?假设我有 96 个单独的 csv 文件,如下所示,并且需要更改每个文件的第一个单元格。这些文件是
c:\2010\2010_jan_apple.csv
c:\2010\2010_jan_orange.csv
c:\2010\2010_feb_apple.csv
c:\2010\2010_feb_orange.csv
...
c:\2010\2010_dec_apple.csv
c:\2010\2010_dec_orange.csv
c:\2012\2011_jan_apple.csv
c:\2012\2011_jan_orange.csv
...
c:\2016\2016_dec_apple.csv
c:\2016\2016_dec_orange.csv
所以我认为会有一个 FOR 循环和两个 FOR EACH 循环。
year=2010,2012,2014,2016
month=jan,feb,...,dec
type=apple,orange
我的愚蠢代码是
sub a()
application.displayalerts=false
for year=2010 to 2016 step 2
workbooks.open "c:\" & year & "\" & year & "_jan_apple.csv"
cells(1,1)="apple"
with activeworkbook
.saveas
.close
end with
workbooks.open "c:\" & year & "\" & year & "_jan_orange.csv"
cells(1,1)="orange"
with activeworkbook
.saveas
.close
end with
...
next year
end sub
在 VBA 中,我可以创建一个诸如 {"jan","feb",...,"dec"} 或 {"apple","orange"} 的列表来使用 FOR EACH 迭代吗?非常感谢。
解决方案
如果您只有“Apple and Oranges”,那么您不需要循环。如果你有更多的“水果”,那么是的,你将需要一个循环。此外,您不需要为月份名称提供数组。你可以从MonthName()
这是你正在尝试的吗?
Option Explicit
Sub Sample()
Dim flName As String
Dim i As Long
Dim yr As Long
For yr = 2010 To 2016 Step 2
For i = 1 To 12
flName = "c:\" & yr & "\" & yr & "_" & Left(MonthName(i), 3) & "_apple.csv"
'UpdateWb flName, "apple"
Debug.Print flName
flName = "c:\" & yr & "\" & yr & "_" & Left(MonthName(i), 3) & "_orange.csv"
'UpdateWb flName, "orange"
Debug.Print flName
Next i
Next yr
End Sub
Sub UpdateWb(f As String, fruit As String)
On Error GoTo Whoa
Dim wb As Workbook
Set wb = Workbooks.Open(flName)
wb.Sheets(1).Cells(1, 1) = fruit
Application.DisplayAlerts = False
wb.Close (True)
DoEvents
LetsContinue:
Application.DisplayAlerts = True
Exit Sub
Whoa:
MsgBox Err.Description
Resume LetsContinue
End Sub
如果你有更多的水果,那么你可以使用第三个循环。例如
Sub Sample()
Dim flName As String
Dim fruits() As Variant
Dim i As Long
Dim yr As Long
Dim itm As Variant
'~~> Add more if required
fruits = Array("Apple", "Orange", "Guava")
For yr = 2010 To 2016 Step 2
For i = 1 To 12
For Each itm In fruits
'c:\2010\2010_jan_apple.csv
flName = "c:\" & yr & "\" & yr & "_" & Left(MonthName(i), 3) & "_" & itm & ".csv"
'UpdateWb flName, itm
Debug.Print flName
Next itm
Next i
Next yr
End Sub
推荐阅读
- mpi - MPICH mpiexec (MPI) 进程因错误而终止,无法在 lldb 中调试
- django - 如何将字段添加到默认提升面板的多字段
- c# - 串行端口的数据接收事件处理程序不起作用
- mysql - 根据数据库中的主键获取数据作为列表
- php - 如何使用 Swift Mailer 生成 *.eml 文件(在 Laravel 中)
- reactjs - 在另一个 React 应用程序登录页面中托管整个 React 应用程序
- python - 如果选择了其他两个 QCheckbox,则能够禁用 QCheckbox
- python - 如何在 python 中多次附加相同的元素?
- powerbi - 如何将总计百分比的矩阵乘以值以在 Power BI 中创建预测值
- javascript - 创建一个重定向到另一个页面但在 Vue 上执行预定义调用/操作的登录页面