Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 如何更改同一行中Excel Visual Basic for x变量的单元格值?_Vba_Excel - Fatal编程技术网

Vba 如何更改同一行中Excel Visual Basic for x变量的单元格值?

Vba 如何更改同一行中Excel Visual Basic for x变量的单元格值?,vba,excel,Vba,Excel,我在ExcelVisualBasic中为userform创建函数,用于更改为一列选择的X的特定单元格值。但是,每次用户更改创建的userform中的值时,程序都会将与该列相关的每个单元格中的数据与X值相乘。示例:如果我在“A”列中有三次值Marie,第3、7、10行中有一次值Marie,那么我在“B”列的userform输入是hello。每行的输出都将是相同的“hello”。但是我想独立地修改每个值,重复“A”列中的值 用户表单的代码: Private Sub btnSubmit_Click()

我在ExcelVisualBasic中为userform创建函数,用于更改为一列选择的X的特定单元格值。但是,每次用户更改创建的userform中的值时,程序都会将与该列相关的每个单元格中的数据与X值相乘。示例:如果我在“A”列中有三次值Marie,第3、7、10行中有一次值Marie,那么我在“B”列的userform输入是hello。每行的输出都将是相同的“hello”。但是我想独立地修改每个值,重复“A”列中的值

用户表单的代码:

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

问题是,您正在循环处理工作表的每一行,如果某个值在不同的行上重复,则每次都会匹配。您需要找到一种更好的方法来确定要修改哪些重复值。例如,此代码将循环执行,直到找到第一个出现的数据(“marie”):


如果您不知道要更改哪一次出现的“marie”,则必须删除重复数据,或者找出一种方法来区分第3行上的“marie”与第3行中的“marie”“玛丽在第7排。

谢谢,我刚刚试过你的代码,但它会产生一个无限循环,然后程序崩溃。我刚刚解决了这个问题,谢谢你。我找到了一种区分XD这个名字的方法
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