2016-04-14 32 views
0

我在Excel Visual Basic中爲用戶窗體創建函數,它改變了爲一列選擇的X的特定單元格值。但是,每次用戶更改創建的用戶窗體中的值時,程序都會將與該列相關的每個單元格中的數據與X值相乘。例如:如果我在列「A」中的值爲Marie三次,第3,7,10行中的一個,並且列「B」的我的用戶表單輸入是hello。每行的輸出將是相同的「你好」。但是我想單獨修改每個值的值列「A」重複。如何更改同一行中x變量的Excel Visual Basic的單元格值?

爲用戶窗體代碼:

Private Sub btnSubmit_Click() 
Dim erow As Long 
Dim ws As Worksheet 
Dim lastrow As Long 
Dim count As Integer 

Set ws = ThisWorkbook.Sheets("Table") 

lastrow = Sheets("Table").Cells(Rows.count, 1).End(xlUp).Row 
count = 0 
For x = 2 To lastrow 


If Sheets("Table").Cells(x, 1) = Me.cmbEmp Then 
ws.Cells(x, 3) = Me.ldlcolor 
ws.Cells(x, 30) = (Me.ldlp) 
count = count + 1 

End If 
If Sheets("Table").Cells(x, 3) = Me.cmbEmp Then 
ws.Cells(x, 1) = Me.ldlname 
ws.Cells(x, 14) = (Me.ldlI) 
count = count + 1 
End If 

Next x 

Me.Hide 
End Sub 

回答

0

的問題是,你是通過您的工作表的每一行循環,如果一個值在不同的行復制,它每次都會匹配。你需要想出一個更好的方式來確定你想修改的重複值中的哪一個。例如,該代碼會通過,直到找到你的數據第一次出現(「瑪麗」)循環:

Dim bolFound As Boolean 
bolFound = False 
While Not bolFound 
    If Sheets("Table").Cells(x, 1) = Me.cmbEmp Then 
     ws.Cells(x, 3) = Me.ldlcolor 
     ws.Cells(x, 30) = (Me.ldlp) 
     count = count + 1 
     bolFound = True 
    End If 

    If Sheets("Table").Cells(x, 3) = Me.cmbEmp Then 
     ws.Cells(x, 1) = Me.ldlname 
     ws.Cells(x, 14) = (Me.ldlI) 
     count = count + 1 
     bolFound = True 
    End If 
Wend 

如果你不知道你要更改的「瑪麗」的發生,那麼你要麼必須刪除重複的數據或找出一種方法來區分第3行上的「瑪麗」和第7行上的瑪麗。

+0

謝謝,我只是試過你的代碼,但它使無限循環,然後程序崩潰。 –

+0

我剛剛解決了這個問題,謝謝你,我找到了一個方法來區分名稱XD –

相關問題