vba - 使用具有“动态创建名称”的变量
Posted
技术标签:
【中文标题】vba - 使用具有“动态创建名称”的变量【英文标题】:vba - Use a variable with a "dynamic created name" 【发布时间】:2022-01-16 03:43:44 【问题描述】:我希望你能帮助我提出一个疯狂的想法。我不确定这是否可能,我什至不知道如何称呼它。
我想使用一个变量来动态建立它的名字。
这可能吗?
我正在逐行读取一个 html 文件,我的代码需要知道在哪个工作表中存储当前行。 我有大约 10 张纸,但对于这个问题,我只会使用两张纸:Module 和 Switch。 对于每张工作表,我都有一个“WhateverSheetRow”变量来记录更新的行。在此示例中:ModuleRow 和 SwitchRow。 我的想法是,因为我在每张工作表的每一行中都写,我知道哪一行是最后更新的,所以在下一次出现时,我会将它增加 1 并更新它,而不是使用 find 或任何其他“最后空行”更新方法。 有没有办法将 WhatSheetRow 增加 1 以动态构建变量名?
Dim ModuleRow as Long
Dim SwitchRow as Long
Dim Found as String
If Found = "Module" Then 'String found is Module
Found & "Row" = Found & "Row" + 1 'Increase ModuleRow by one
Sheets(Found).Range("A" & (ModuleRow)).Value = "Y"
所以问题是是否有办法“构建”变量名并使用它。
或者什么是更好的选择?
非常感谢!
【问题讨论】:
你能提供一个视觉例子来说明你在说什么吗?我假设你知道你可以做到moduleRow=ModuleRow +1
?
如果我正确理解了您的要求,我认为公共变量应该可以解决您的问题。
阅读数组、集合和脚本字典。您可能还会发现学习基本的 VBA 教程可能会有所帮助,因为您的问题表明严重缺乏编程基础知识。
@freeflow :) 不是真的。
【参考方案1】:
您可以在其他一些languages 中使用那个(坏的)想法,但不能在 VBA 中使用。使用数组或字典。如果您要更改脚本中工作表的数量或位置,请使用字典。
Option Explicit
Sub demo()
Dim wb As Workbook, ws As Worksheet
Set wb = ThisWorkbook
' using an array
Dim arLastRow() As Long
ReDim arLastRow(1 To wb.Sheets.Count)
For Each ws In wb.Sheets
arLastRow(ws.Index) = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
Next
' set found
Dim Found As String
Found = "Module" ' or Switch or any other sheet name
With wb.Sheets(Found)
arLastRow(.Index) = arLastRow(.Index) + 1
.Cells(arLastRow(.Index), "A") = "Y"
End With
' or using a dictionary
Dim dictLastRow As Object
Set dictLastRow = CreateObject("Scripting.Dictionary")
For Each ws In wb.Sheets
dictLastRow(ws.Name) = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
Next
' set found
Found = "Switch" ' or Module or any other sheet name
With wb.Sheets(Found)
dictLastRow(.Name) = dictLastRow(.Name) + 1
.Cells(dictLastRow(.Name), "A") = "Y"
End With
End Sub
【讨论】:
感谢您的回答。我试图避免 .End(xlUp) 因为我拥有的数据量非常慢。我一直在努力解决一些问题,但看起来我需要在代码的其他地方寻找效率。我会试试你的代码。再次感谢您的帮助。 @Rodgrigo.End(xlUp)
只为子开头的每个工作表运行一次以查找任何现有行,如果您的工作表是空的,那么您可以将其替换为您想要开始的行号在。以上是关于vba - 使用具有“动态创建名称”的变量的主要内容,如果未能解决你的问题,请参考以下文章
具有多个标准排名的 Excel VBA 动态数据验证下拉列表