2013-06-11 56 views
1

我工作的一个程序,它下面的部分工作用户输入使用数组的类(Excel中VBA)

2)添加报头的内容到一个元素中的类,如果这是真的

例如,如果有一个“X”下的“离合器”报头的行,然后在“离合器“添加到,在这种情况下,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循环中为每个类元素设置值。此外,如果有更好的解决方案,我想更多地了解它。

+0

你真的不会真的'转换'如果''''循环'。您可以考虑使用“Select Case”而不是一系列嵌套的If/Else语句。 –

+0

我遇到了问题,因为选择了大小写短路。你如何建议避免这种情况? –

+0

我不知道你的意思是“Select Case short circuits”。我无法理解你的想法 - 在这里也没有其他人 - 所以,请更新你的问题以包括你尝试过的代码,并指出哪一行会产生错误。如果没有错误发生,请描述输出与您想要的/期望的不一致。 –

回答

1

我不是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 
+0

这帮了很大忙。非常感谢你! –