2016-06-07 56 views
0

我在Excel中有很多列的數據集。我正在使用UserForm條目來填充這些列。但是我也希望能夠在用戶窗體中編寫一個現有的ID,並使用從電子表格中提取的相應數據自動填充useform。列的順序可能會改變,所以我不想使用偏移功能來做到這一點。VBA-對數組中的字符串值進行迭代並確定它們是否與特定文本相同

我想在我的代碼中做什麼是使所有列名稱(這是相應的文本框中的條目形式命名相同)的數組。

首先,我找到了該行的ID。然後,我想遍歷不同的列,並找到它們下面的與該ID對應的值來填充我的輸入表單。

問題是我想使用「數組(i)」作爲我的用戶窗體中的文本框的名稱,但它不會讀取它。例如:

如果我直接寫入MRN = Cells(CSN_R,Changing_C),它確實用正確的數據填充條目表單,因爲它選擇「MRN」或「Myarray(0)」下的id行和列號。 」。但是,如果我使用myarray(0)=單元格(CSN_R,Changing_C),它不會......我不知道如何才能使其工作。

Dim CSN_Find As Range 
    Dim CSN_Existing As Range 
    Dim CSN_New As Range 

    Dim CSN_R As Integer 
    Dim Changing_C As Integer 

    ' Look for the CSN value 

    Worksheets("Input Data").Activate 
    Worksheets("Input Data").Rows(1).Find(What:="CSN", LookIn:=xlValues).EntireColumn.Select 

    Set CSN_Find = Selection.Find(What:=CSN.Value, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False) 

    ' If it's found, then populate form 

    If (Not CSN_Find Is Nothing) Then 

     CSN_Find.Activate 
     CSN_R = ActiveCell.Row 


     Dim myarray As Variant 
     Dim i As Integer 
     Dim lastColumn As Integer 


     myarray = Array("MRN", "ArrivalDate",...(I have a lot)) 

     lastColumn = Worksheets("Input Data").Cells(1, columns.Count).End(xlToLeft).Column 

     i = 0 

     Do Until i = lastColumn + 1 

     Changing_C = Worksheets("Input Data").Rows(1).Find(What:=myarray(i), LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False).Column 

     myarray(i) = Cells(CSN_R, Changing_C) **** not working 

     i = i + 1 
     Loop 

    ' Else, do nothing: 

    Else: If CSN_Find Is Nothing Then Exit Sub 

    End If 


End Sub 
+0

我只是說這個和它的工作原理,但它會需要一堆的if語句... 如果myArray的(I)= 「MRN」 那麼 MRN =細胞(CSN_R,Changing_C) 結束如果 如果myArray的(I)= 「ArrivalDate」 那麼 ArrivalDate =細胞(CSN_R,Changing_C) 結束如果 – pmv

回答

0

當您使用此myarray(i) = Cells(CSN_R, Changing_C) **** not working你只是覆蓋您的數組值

它看起來就像你正在試圖做的是文本分配給用戶表單控件文本框。你應該能夠通過用戶名稱來引用文本框 - 它叫什麼名字?

說這是默認的「UserForm1」你可以使用:

UserForm1.Controls(myarray(i)).Text = Cells(CSN_R, Changing_C) 
+0

謝謝!這正是我需要的! – pmv

1

試着這麼做:

Me.Controls(myarray(i)) = Cells(CSN_R, Changing_C) 
+0

這也完美。謝謝你的幫助! – pmv

相關問題