2016-04-14 31 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 –

相关问题