Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.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宏停在行的末尾_Excel_Vba - Fatal编程技术网

我无法使VBA Excel宏停在行的末尾

我无法使VBA Excel宏停在行的末尾,excel,vba,Excel,Vba,我有一行数据,每月更改一次,但它只更改90个单元格中的大约30个,每个月它们都不同,因此我尝试制作一个宏来自动执行 宏查看单元格A2-B98并搜索与H2-I98的值匹配的信息,如果H中的值匹配,则它复制I中的值并替换B中的值,但它不会在行的末尾停止,即在第98行,它会内循环。所以我希望有人能发现我的错误,这样它就不会永远循环。谢谢 Sub Update_Holiday() Dim Search As String Dim Replacement As String Dim rngTmp As

我有一行数据,每月更改一次,但它只更改90个单元格中的大约30个,每个月它们都不同,因此我尝试制作一个宏来自动执行

宏查看单元格A2-B98并搜索与H2-I98的值匹配的信息,如果H中的值匹配,则它复制I中的值并替换B中的值,但它不会在行的末尾停止,即在第98行,它会内循环。所以我希望有人能发现我的错误,这样它就不会永远循环。谢谢

Sub Update_Holiday()

Dim Search As String
Dim Replacement As String
Dim rngTmp As Range
Dim rngSearch As Range

LastInputRow = Range("A65536").End(xlUp).Row
Set rngSearch = Worksheets("Holiday").Range(Cells(2, 1), Cells(98, 2))

For k = 2 to 98
    Search = Worksheets("Holiday").Cells(k, 8)
    Replacement = Worksheets("Holiday").Cells(k, 9)
    With rngSearch
        Set rngTmp = .Find(Search, LookIn:=xlValues)
        If rngTmp Is Nothing Then
            GoTo Go_to_next_input_row: 
        Else
            Worksheets("Holiday").Cells(rngTmp.Row, rngTmp.Column + 1).Value = Replacement
        End If
    End With
    Go_to_next_input_row:  
Next K

End Sub

如果我正确理解您的问题:对于H2:H98中的每个单元格,您正在寻找A2:A98中的匹配项。它不一定在同一排。如果在a列中找到匹配项,则需要从B列中获取值,并将其放入I列中,与我们刚才查找的搜索值位于同一行。在这种情况下,此代码将起作用:

Option Explicit
Sub Test()

Dim ws          As Worksheet
Dim srcRng      As Range        '' Source range
Dim schRng      As Range        '' Search range
Dim c           As Range
Dim search      As Range

Set ws = ThisWorkbook.Sheets(1)
Set srcRng = ws.Range("H2:H98")
Set schRng = ws.Range("A2:A98")

For Each c In srcRng     '' Iterate through your source range
    Set search = schRng.Find(c.Value, LookIn:=xlValues, SearchDirection:=xlNext)     '' Find the value from column H in column A
    If Not search Is Nothing Then
        c.Offset(, 1).Copy search.Offset(, 1)   '' Get the value from column B, from the same row as the value it found in column A
                                                '' Then paste that value in column I, on the same row as the value we searched for from column H
    End If
Next c

GoTo语句通常是非常非常糟糕的做法,但并不总是如此。尤其是在这种情况下。您不需要它们,它只会让您的代码变得复杂。

似乎您还没有完成为问题添加上下文。问题是什么?这里的问题是什么?从您的代码中不清楚哪一页上有什么。我从更新中获得的数据没有任何顺序或不完整。他们会在一封电子邮件中发送我6次更新,然后在另一封邮件中发送6次,这就是我使用查找功能的原因。但我确实使用了For k=2到98,它确实大大加快了宏的速度。但它仍然是内循环的。它不允许我在注释中发布代码,但它循环到哪里如果rngTmp不存在,则转到下一个输入行:然后转到下一个K,然后继续循环。我能够将我的原始代码修改为我用你的inputOk更改的代码,所以让我了解你在尝试做什么。对于H列中的每个值,您希望查看a列中的任何位置是否存在匹配项。如果在a列中找到匹配项,它将从该行的B列中获取值,并将其放在I列中与您刚才从H列中搜索的值相同的行中。是否正确?请关闭,并对混淆表示抱歉。我很难输入代码/一个标准化示例。对于H列中的每个值,它会查看a列中的任何位置是否存在匹配项。如果在列a中找到匹配项,它将从I中获取值,并将其复制到行B上。