【问题标题】:Working with Arrays in Classes (Excel VBA)在类中使用数组 (Excel VBA)
【发布时间】:2013-06-11 15:16:06
【问题描述】:

我正在开发一个程序的一部分,该程序执行以下操作:

1) 判断某个单元格中是否有“X”以及表头是否与用户输入匹配

2) 如果为真,则将标头的内容添加到类中的元素

例如,如果行的“clutch”标题下有一个“X”,则将“clutch”添加到本例中的 pos.clutch。

这是完成此操作的(编辑:这是在 Do While 循环中,因此是 R + 1,抱歉,如果最初没有澄清):

If sh.Cells(R + 1, Clutch) = "X" And _
   sh.Cells(1, Clutch).Value = CStr(cboPart.Value) Then
     pos.Clutch = sh.Cells(1, Clutch)

现在,问题是我对每个元素都有一长串 ElseIf 语句(总共有 6 个)。我想将其转换为 For 循环,经过一些研究后,我想出了一个我将包含的数组在类模块中将是最好的方法,因为我可以遍历数组中的每个值。

我想知道如何在类模块中创建一个由类元素组成的数组,以及是否可以在 For 循环中为每个类元素设置值。此外,如果有更好的解决方案,我想了解更多。

【问题讨论】:

  • 您并没有真正将If Else 转换为Loop。您可以考虑使用 Select Case 而不是一系列嵌套的 If/Else 语句。
  • 我遇到了一个问题,因为选择案例短路。您如何建议避免这种情况?
  • 我不知道您所说的“选择案例短路”是什么意思。我无法读懂您的想法——这里的其他人也无法读懂——所以,请更新您的问题以包含您尝试过的代码,并指出哪一行引发了错误。如果没有引发错误,请描述输出与您想要/期望的不一致的原因。
  • 我设法使用完全不同的方法来解决我的问题,但感谢您抽出宝贵时间提供帮助。下次有问题我会更清楚。

标签: arrays excel class vba


【解决方案1】:

我不是 100% 确定你的意思。但是根据您帖子的第一部分,这里有一些带有 cmets 的示例代码

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

【讨论】:

  • 这很有帮助。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-26
  • 2019-05-17
  • 1970-01-01
相关资源
最近更新 更多