excel - 使用工作表中的输入值来引用不同的工作表 vba
问题描述
我正在尝试在 excel 中创建一个宏,该宏从一个选项卡中获取单元格值,并将这些值的引用创建为 vba 中的工作表。
工作表列表的示例如下(长度可能更长或更短):
sheet1
sheet2
sheet3
...
我已经能够使用下面的代码将其存储在一个数组中。使用此数组,我想获取这些存储的值并使用它们来引用工作表,如下所示手动完成。
ws1= wb.Sheets("sheet1")
ws(i)= wb.Sheets("ws(i)")
任何帮助解决这个问题或推荐不同的方法将不胜感激!
谢谢,米
Dim wb As Workbook: Set wb = ThisWorkbook
Dim wsInputsList As Worksheet
Set wsInputsList = wb.Sheets("InputsTab")
Dim lastrowInputs As Long
lastrowInputs = wsInputsList.Cells(Rows.Count, 1).End(xlUp).Row
Dim i As Integer
i = 1
Do While i < lastrowInputs
Dim ws(1 To 50) As Variant
ws(i) = wsInputsList.Cells(i + 1, 1).Value
i = i + 1
Loop
解决方案
蒂姆威廉姆斯给你答案
这里我再给你一些建议
代码 1
Option Explicit
Sub SetSheetList()
Dim wb As Workbook: Set wb = ThisWorkbook
Dim wsInputsList As Worksheet: Set wsInputsList = wb.Sheets("InputsTab")
Dim lastrowInputs As Long, i As Long
lastrowInputs = wsInputsList.Cells(Rows.Count, 1).End(xlUp).Row
ReDim ws(1 To lastrowInputs) As Worksheet 'dim your array only once
For i = 1 To lastrowInputs
Set ws(i) = wb.Sheets(wsInputsList.Cells(i, 1).Value)
Next
End Sub
在哪里
- 将数组调光移到循环之外,以免调暗
lastrowInputs
时间……</li> - 使用了一个
For … Next
循环来更多地处理你的情况(做你需要的,清楚地做,用更少的陈述)
但是这种表格列表容易出现一些缺点,例如列表中的名称不再实际。对于哪种情况你可以考虑
代码 2
Option Explicit
Sub SetSheetList2()
Dim wb As Workbook: Set wb = ThisWorkbook
Dim wsInputsList As Worksheet: Set wsInputsList = wb.Sheets("InputsTab")
Dim shtName As String
Dim lastrowInputs As Long, i As Long, nshts As Long
lastrowInputs = wsInputsList.Cells(Rows.Count, 1).End(xlUp).Row
ReDim ws(1 To lastrowInputs) As Worksheet 'dim your array only once
For i = 1 To lastrowInputs
shtName = wsInputsList.Cells(i, 1).Value ' store current "possible" sheet name
If IsSheetThere(wb, shtName) Then ' if current "possible" sheet name is an "actual" one
nshts = nshts + 1 ' update sheet names found
Set ws(nshts) = wb.Sheets(shtName) ' update sheets array
End If
Next
If nshts < lastrowInputs Then ReDim Preserve ws(1 To nshts) As Worksheet 'redim your array to the actual number of items stored, if needed
End Sub
然而,您在“InputsTab”中的工作表名称列表可能并不详尽……</p>
如您所见,保留和使用这样的列表可能比一开始看起来要困难得多:这是关注您真正需要的内容以及原因的问题
推荐阅读
- regex - RegEx 使用 PowerShell 在字符串中查找数字
- ecmascript-6 - ES6 模块导出和导入
- testing - 带有ecto的CRDB,在测试时,它不会从初始值开始序列
- macos - OSX Mojave 上的 GDB 兼容性问题
- qt - 如何更新 Qt ui 以从相机显示 opencv mat;
- windows-10 - 如何修复 secpol.msc 的 samba 共享连接问题?
- android - Uri.java 第 475 行 android.net.Uri$StringUri。
com.google.android.gms.ads - neo4j - Neo4j Desktop 1.1.10 如何导出密码文件?
- oauth-2.0 - 是否有在 Kubernetes 集群上提供 OAUTH2 安全性的最佳实践标准?
- python - Pandas-Python:如何在 Pandas 中编写新行?