Arrays 在类中使用数组(Excel VBA)
我正在做一个程序的一部分,该程序执行以下操作: 1) 确定特定单元格中是否有“X”,以及标头是否与用户输入匹配 2) 如果为true,则将标头的内容添加到类中的元素 例如,如果一行的“离合器”标题下有一个“X”,则在本例中,将“离合器”添加到位置离合器 下面是实现这一点的方法(编辑:这是一个Do-While循环,因此是R+1,如果最初没有澄清的话,很抱歉): 现在,问题是每个元素都有一个很长的ElseIf语句列表(总共有6个)。我想把它转换成一个for循环,经过一些研究后,我认为在类模块中包含一个数组是最好的方法,因为我可以循环数组中的每个值Arrays 在类中使用数组(Excel VBA),arrays,excel,class,vba,Arrays,Excel,Class,Vba,我正在做一个程序的一部分,该程序执行以下操作: 1) 确定特定单元格中是否有“X”,以及标头是否与用户输入匹配 2) 如果为true,则将标头的内容添加到类中的元素 例如,如果一行的“离合器”标题下有一个“X”,则在本例中,将“离合器”添加到位置离合器 下面是实现这一点的方法(编辑:这是一个Do-While循环,因此是R+1,如果最初没有澄清的话,很抱歉): 现在,问题是每个元素都有一个很长的ElseIf语句列表(总共有6个)。我想把它转换成一个for循环,经过一些研究后,我认为在类模块中包含一
我想知道如何在类模块中创建由类元素组成的数组,以及是否可以为for循环中的每个类元素设置值。此外,如果有更好的解决方案,我想了解更多 我不是100%确定你的意思。但是根据你文章的第一部分,这里有一些带有注释的示例代码
Option Explicit
Sub tryme()
Dim inp As String
inp = InputBox("Whats the header:")
Dim ws As Worksheet
Set ws = Sheets("Sheet1")
Dim rng As Range
Dim i As Long, j As Long
For i = 1 To ws.Cells(1, Columns.Count).End(xlToLeft).Column
If StrComp(inp, CStr(ws.Cells(1, i).Value), 1) = 0 Then
For j = 2 To ws.Cells(Rows.Count, i).End(xlUp).Row
Set rng = ws.Cells(j, i)
If StrComp(CStr(rng.Text), "X", 1) = 0 Then
' youve just found a match
' so if your class constructor takes some params
' for example
' ...MyClass(header as String, row as Long)
' then you can call it
' ...dim newMyClassObj(Cstr(ws.Cells(1, i).Text), rng.row)
End If
Set rng = Nothing
Next j
End If
Next i
End Sub
我不是100%确定你的意思。但是根据你文章的第一部分,这里有一些带有注释的示例代码
Option Explicit
Sub tryme()
Dim inp As String
inp = InputBox("Whats the header:")
Dim ws As Worksheet
Set ws = Sheets("Sheet1")
Dim rng As Range
Dim i As Long, j As Long
For i = 1 To ws.Cells(1, Columns.Count).End(xlToLeft).Column
If StrComp(inp, CStr(ws.Cells(1, i).Value), 1) = 0 Then
For j = 2 To ws.Cells(Rows.Count, i).End(xlUp).Row
Set rng = ws.Cells(j, i)
If StrComp(CStr(rng.Text), "X", 1) = 0 Then
' youve just found a match
' so if your class constructor takes some params
' for example
' ...MyClass(header as String, row as Long)
' then you can call it
' ...dim newMyClassObj(Cstr(ws.Cells(1, i).Text), rng.row)
End If
Set rng = Nothing
Next j
End If
Next i
End Sub
您不会真正将
If-Else
转换为循环
。您可以考虑使用<代码>选择案例< /代码>,而不是一系列嵌套的<代码> I/EX//COD>语句。我遇到了一个问题,因为选择CASE短路。你建议如何避免这种情况?我不知道你所说的“选择案例短路”是什么意思。我看不懂你的心思——这里的其他人也看不懂——所以,请更新你的问题,包括你尝试过的代码,并指出哪一行出现了错误。如果没有出现错误,请描述输出如何与您想要/期望的不一致。我设法使用完全不同的方法来解决我的问题,但感谢您花时间提供帮助。下次我有问题的时候会更清楚。你不会真的把If-Else
转换成循环。您可以考虑使用<代码>选择案例< /代码>,而不是一系列嵌套的<代码> I/EX//COD>语句。我遇到了一个问题,因为选择CASE短路。你建议如何避免这种情况?我不知道你所说的“选择案例短路”是什么意思。我看不懂你的心思——这里的其他人也看不懂——所以,请更新你的问题,包括你尝试过的代码,并指出哪一行出现了错误。如果没有出现错误,请描述输出如何与您想要/期望的不一致。我设法使用完全不同的方法来解决我的问题,但感谢您花时间提供帮助。下次我有问题的时候会说得更清楚。这很有帮助。非常感谢你!这帮了大忙。非常感谢你!