2013-06-11 83 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

這幫了很大忙。非常感謝你! –