arrays - 使用数组嵌套 For 循环以分配变量
问题描述
我正在尝试将一些现有代码压缩到另一个现有循环中的数组中。
1)基于数组(TerrArray)在工作簿中创建新工作表。
2)以相同的方式格式化所有新工作表。
3) 为每个新创建的工作表声明一个单独的 lastrow 变量。
Dim Counter As Long
Dim TerrArray
Dim LongArray
Dim NAlr As Long, AUlr As Long, BRlr As Long, CAenlr As Long, CAfrlr As Long, DElr As Long, ESlr As Long, FRlr As Long, ITlr As Long, MXlr As Long, USAlr As Long, UK As Long, r As Long
TerrArray = Array("NA", "AU", "BR", "CAen", "CAfr", "DE", "ES", "FR", "IT", "MX", "USA", "UK")
LongArray = Array(LR, NAlr, AUlr, BRlr, CAenlr, CAfrlr, DElr, ESlr, FRlr, ITlr, MXlr, USAlr, UKlr)
''' Create sheets
For m = 0 To UBound(TerrArray)
Sheets.Add(After:=ActiveSheet).Name = TerrArray(m)
Next m
''' Loops formatting of each sheet
Counter = Sheets.Count
For i = 2 To Counter
Sheets(1).Cells(1, 1).EntireRow.Copy
Sheets(i).Cells(1, 1).PasteSpecial
[other formatting code, etc]
Next i
''' Assigns lastrow variable to each sheet
NAlr = Sheets("NA").Cells(Rows.Count, "B").End(xlUp).Row
AUlr = Sheets("AU").Cells(Rows.Count, "B").End(xlUp).Row
BRlr = Sheets("BR").Cells(Rows.Count, "B").End(xlUp).Row
[etc]
我不知道将 LongArray 放置在其他两个循环之一的哪个位置以使用类似的东西
LongArray(n) = Sheets(i).Cells(Rows.Count, "B").End(xlUp).Row
上面的代码执行后,我后面的功能代码可以获取行计数变量。
编辑:不确定我是否朝着正确的方向前进
For m = 0 To UBound(TerrArray)
Sheets.Add(After:=ActiveSheet).Name = TerrArray(m)
LongArray(m) = Sheets(TerrArray(m)).Cells(Rows.Count, "B").End(xlUp).Row
Next m
解决方案
使用字典(按照该链接查看类似的 SO 问题/答案,我将在其中解释如何使用字典类):
Const TERR as String ="NA,AU,BR,CAen,CAfr,DE,ES,FR,IT,MX,USA,UK"
Sub foo()
Dim dict = CreateObject("Scripting.Dictionary")
Dim t as Variant
Dim newSheet As Worksheet
For Each t in Split(TERR, ",")
' Create each sheet
Set newSheet = Sheets.Add(After:=ActiveSheet)
newSheet.Name = t
' Formatting stuff:
Sheets(1).Rows(1).EntireRow.Copy
newSheet.Cells(1, 1).PasteSpecial
' [other formatting code, etc]
With newSheet
Sheets(1).Rows(1).EntireRow.Copy
' formatting code probably goes here
dict.Add(t, .Cells(.Rows.Count, 2).End(xlUp).Row)
End With
Next
' Now, you can reference the last row associated with each
' Instead of using variable NAlr, just refer to the dictionary value associated with the "NA" key:
MsgBox dict("NA")
'etc...
或者,只需编写 aFunction
来获取最后一行,因为最后一行可能会改变,因此养成直接/静态分配这些值的习惯可能不是一个好主意。
推荐阅读
- javascript - 在 Chrome 上使用 location.reload 不能正常工作,在 Firefox 中使用相同的代码可以正常工作
- flutter - currentState.validate() 导致 Flutter App 崩溃
- python - 我如何解释网络服务器收到的以下消息?
- mysql - Grafana 选择查询抛出错误 - “找不到名为 time 或 time_sec 的列”
- python - combine() 参数 1 必须是 datetime.date,而不是 str
- sql - 创建一个引用其他列及其值的列?
- rest - 不符合服务器数据约束的数据返回什么状态码?
- python - 尝试动态调整 python 多处理数组大小的问题
- python - '@' 运算符的含义是什么?
- aws-lambda - 放大获取 lambda 中的托管 URL 作为环境变量