Vba Excel VB宏从另一个工作表中查找值,然后更改当前工作表中的单元格值

Vba Excel VB宏从另一个工作表中查找值,然后更改当前工作表中的单元格值,vba,excel,Vba,Excel,我有一个文件有两个工作表。我需要运行一个宏,在sheet2上向下查看a列,直到它为空。它需要从sheet1的sheet2列A中的单元格中查找值。如果找到,则更改列AP的值。如果未找到,则跳到下一个搜索以查找下一个值 这就是我目前所拥有的。我已经能够修复它,使其不再出现错误,但也没有结果。它显示并似乎运行,但未对sheet1上的单元格(“AP”、“找到的行值”)进行任何更改 Sub dataChange() Dim myRow As Integer Dim srch As Inte

我有一个文件有两个工作表。我需要运行一个宏,在sheet2上向下查看a列,直到它为空。它需要从sheet1的sheet2列A中的单元格中查找值。如果找到,则更改列AP的值。如果未找到,则跳到下一个搜索以查找下一个值

这就是我目前所拥有的。我已经能够修复它,使其不再出现错误,但也没有结果。它显示并似乎运行,但未对sheet1上的单元格(“AP”、“找到的行值”)进行任何更改

Sub dataChange()
    Dim myRow As Integer
    Dim srch As Integer
    On Error GoTo Err_Execute
    myRow = 1
    srch = 1
    While Sheet2.Cells(myRow, 1).Value <> ""
        If Sheet1.Range("A" & CStr(srch)).Value = Sheet2.Cells(myRow, 1).Value Then
            Sheet1.Range("AP" & CStr(srch)).Value = "HOUSTON"
        End If
        srch = srch + 1
        myRow = myRow + 1
    Wend
Err_Execute:
    MsgBox "An error occurred."
End Sub
子数据更改()
将myRow设置为整数
Dim srch作为整数
错误时转到错误执行
myRow=1
srch=1
而Sheet2.单元格(myRow,1).值“”
如果Sheet1.Range(“A”&CStr(srch)).Value=Sheet2.Cells(myRow,1.Value),则
表1.范围(“AP”和CStr(srch)).Value=“休斯顿”
如果结束
srch=srch+1
myRow=myRow+1
温德
执行错误:
MsgBox“发生错误。”
端接头

您的代码正在将
A1
Sheet1
Sheet2
中的
A1
进行比较。我想您需要将
Sheet1
中的
A1
Sheet2
中的
列a
进行比较。因此,您需要一个外部循环

下面是您的代码,经过修改后可以实现这一点。它还合并了Leviathan的注释,将
Integer
更改为
Long
,并在适当的位置插入Exit Sub

当Sheet2看起来像这样时

我在表1上得到这个结果

代码

Sub dataChange()
    Dim myRow As Long, srch As Integer
    On Error GoTo Err_Execute
    myRow = 1
    srch = 1
    Do While Sheet1.Cells(srch, 1).VALUE <> ""
        Do While Sheet2.Cells(myRow, 1).VALUE <> ""
            If Sheet1.Cells(srch, 1).VALUE = Sheet2.Cells(myRow, 1).VALUE Then
                Sheet1.Range("AP" & srch).VALUE = "HOUSTON"
                Exit Do
            End If
            myRow = myRow + 1
        Loop
        myRow = 1
        srch = srch + 1
    Loop
    Exit Sub
Err_Execute:
    MsgBox "An error occurred."
End Sub
子数据更改()
Dim myRow为长,srch为整数
错误时转到错误执行
myRow=1
srch=1
Do While Sheet1.Cells(srch,1).VALUE“”
Do While Sheet2.单元格(myRow,1).值“”
如果Sheet1.Cells(srch,1).VALUE=Sheet2.Cells(myRow,1).VALUE,则
表1.范围(“AP”和srch).VALUE=“休斯顿”
退出Do
如果结束
myRow=myRow+1
环
myRow=1
srch=srch+1
环
出口接头
执行错误:
MsgBox“发生错误。”
端接头

您的代码正在将
A1
Sheet1
Sheet2
中的
A1
进行比较。我想您需要将
Sheet1
中的
A1
Sheet2
中的
列a
进行比较。因此,您需要一个外部循环

下面是您的代码,经过修改后可以实现这一点。它还合并了Leviathan的注释,将
Integer
更改为
Long
,并在适当的位置插入Exit Sub

当Sheet2看起来像这样时

我在表1上得到这个结果

代码

Sub dataChange()
    Dim myRow As Long, srch As Integer
    On Error GoTo Err_Execute
    myRow = 1
    srch = 1
    Do While Sheet1.Cells(srch, 1).VALUE <> ""
        Do While Sheet2.Cells(myRow, 1).VALUE <> ""
            If Sheet1.Cells(srch, 1).VALUE = Sheet2.Cells(myRow, 1).VALUE Then
                Sheet1.Range("AP" & srch).VALUE = "HOUSTON"
                Exit Do
            End If
            myRow = myRow + 1
        Loop
        myRow = 1
        srch = srch + 1
    Loop
    Exit Sub
Err_Execute:
    MsgBox "An error occurred."
End Sub
子数据更改()
Dim myRow为长,srch为整数
错误时转到错误执行
myRow=1
srch=1
Do While Sheet1.Cells(srch,1).VALUE“”
Do While Sheet2.单元格(myRow,1).值“”
如果Sheet1.Cells(srch,1).VALUE=Sheet2.Cells(myRow,1).VALUE,则
表1.范围(“AP”和srch).VALUE=“休斯顿”
退出Do
如果结束
myRow=myRow+1
环
myRow=1
srch=srch+1
环
出口接头
执行错误:
MsgBox“发生错误。”
端接头

行是否匹配?另外,使用
单元格(对我来说)更容易。我尝试了代码,它很有效。尽管在执行
Err\u:
之前需要一个
Exit Sub
,因此即使一切正常执行,也不会收到错误消息。您应该明确地将变量声明从
Integer
更改为
Long
。整数最多只能容纳32767个数字。使用这些来遍历1048576行是个坏主意。那么,既然一切都在运行,那么问题到底是什么呢?最好提供一个输入、预期输出和没有得到的结果的样本。我猜你需要一个嵌套的循环-srch是外部的,myRow是内部的。行匹配吗?另外,使用
单元格(对我来说)更容易。我尝试了代码,它很有效。尽管在执行
Err\u:
之前需要一个
Exit Sub
,因此即使一切正常执行,也不会收到错误消息。您应该明确地将变量声明从
Integer
更改为
Long
。整数最多只能容纳32767个数字。使用这些来遍历1048576行是个坏主意。那么,既然一切都在运行,那么问题到底是什么呢?最好提供一个输入、预期输出和没有得到的结果的样本。我想你需要一个嵌套的循环——srch是外部的,myRow是内部的。