【问题标题】:Excel VB Macro to find value from another sheet then change a cell value in current sheetExcel VBA宏从另一个工作表中查找值然后更改当前工作表中的单元格值
【发布时间】:2016-05-04 20:59:06
【问题描述】:

我有一个包含两个工作表的文件。我需要运行一个宏,它向下看 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

【问题讨论】:

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

标签: vba excel


【解决方案1】:

您的代码正在将A1Sheet1Sheet2 中的A1 进行比较。我认为您想将Sheet1 中的A1Sheet2 中的所有ColumnA 进行比较。因此,您需要一个外循环。

以下是您的代码,经过修改以实现此目的。它还结合了 Leviathan 将 Integer 更改为 Long 的评论,并将 Exit Sub 插入到适当的位置。

当 Sheet2 看起来像这样时......

我在 Sheet1 上得到了这个结果...

代码...

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多