Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.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
使用Excel VBA在一个单元格中搜索一个值,并在同一行的另一个单元格中搜索另一个值_Excel_Vba - Fatal编程技术网

使用Excel VBA在一个单元格中搜索一个值,并在同一行的另一个单元格中搜索另一个值

使用Excel VBA在一个单元格中搜索一个值,并在同一行的另一个单元格中搜索另一个值,excel,vba,Excel,Vba,我正在研究一个大规模的VBA脚本,一旦完成,但当它到达需要VBA脚本检查此逻辑的位置时,我遇到了一个问题: If Cell AC2 = "PastDue" And Cell W2 <> "Risk Accepted" on Sheet1 Then Copy row to Sheet2. 如果第1页上的单元格AC2=“PastDue”和单元格W2“已接受风险”,则将行复制到第2页。 以下是我目前掌握的代码: Sub PastDue() Application.ScreenUpdat

我正在研究一个大规模的VBA脚本,一旦完成,但当它到达需要VBA脚本检查此逻辑的位置时,我遇到了一个问题:

If Cell AC2 = "PastDue" And Cell W2 <> "Risk Accepted" on Sheet1 Then Copy row to Sheet2.
如果第1页上的单元格AC2=“PastDue”和单元格W2“已接受风险”,则将行复制到第2页。
以下是我目前掌握的代码:

Sub PastDue()
Application.ScreenUpdating = False
Application.StatusBar = "Job Updating"

Dim lr As Long
Dim lr2 As Long
Dim r As long
Dim ws1 As Worksheet1
Dim ws2 As Worksheet2

Application.ScreenUpdating= False
Set ws1 = Sheets("Sheet1")
Set ws2 = Sheets("Sheet2")
N = 1
lr = ws1.Cells(Rows.Count, "AC").End(x1Up).Row 'Used to search column AC
lr = ws1.Cells(Rows.Count, "W").End(x1Up).Row 'This errors out when ran and was a line I added in to check the second column
lr2 = ws2.Cells(Rows.Count, "A").End.x1Up).Row

    For r = 2 To lr
        If ws1.Range("AC" & r).Value = "PastDue" Then
            If ws1.Range ("W" & r).Value <> "Risk Accepted" Then 'I added this to search for the second piece of the logic
                ws1.Rows(r).Copy Destination:=ws2.Range("A" & N + 1)
            N = ws2.Cells(Rows.Count, "A").End(xlUp).Row
            End If
        End If
   Next r
Sheets("Sheet2").Select
Application.StatusBar = False
Application.ScreenUpdating = True
End Sub
Sub passdue()
Application.ScreenUpdating=False
Application.StatusBar=“作业更新”
变暗lr为长
调暗lr2,长度相同
变暗,变长
将ws1尺寸标注为工作表1
将ws2调暗为工作表2
Application.screenUpdate=False
设置ws1=图纸(“图纸1”)
设置ws2=图纸(“图纸2”)
N=1
lr=ws1.Cells(Rows.Count,“AC”).End(x1Up).Row'用于搜索列AC
lr=ws1.Cells(Rows.Count,“W”).End(x1Up).Row'在运行时出错,是我为检查第二列而添加的一行
lr2=ws2.Cells(Rows.Count,“A”).End.x1Up.Row
对于r=2至lr
如果ws1.Range(“AC”&r).Value=“PastDue”,则
如果ws1.Range(“W”&r).Value“Risk Accepted”,那么“我添加了这个来搜索逻辑的第二部分”
ws1.Rows(r).Copy Destination:=ws2.Range(“A”&N+1)
N=ws2.Cells(Rows.Count,“A”).End(xlUp).Row
如果结束
如果结束
下一个r
图纸(“图纸2”)。选择
Application.StatusBar=False
Application.ScreenUpdating=True
端接头

这是一个稍微修改过的代码,它只在一列中查找一个值时才起作用

我在一些模拟数据上测试了您的代码,除了一些奇怪的错误之外,它似乎还起作用。我不确定这些错误是在将代码复制到StackOveflow时疏忽了,还是它们确实存在于VBA中。如果这确实是您的代码,我不确定在只搜索单个值时您的代码是如何工作的

  • Dim
    工作表设置为
    Worksheet1
    Worksheet2
    。这些不是类名。将行更改为:
    Dim ws1 as workeep
    Dim ws2 as workeep
  • 传递给
    End
    函数的参数是
    x1up
    (注意,您使用的是数字1,而不是字母
    l
  • 当我更改这两项时,代码似乎有效。我强调“似乎”一词,因为我不确定您的错误是什么。您需要详细说明

    我最终使用的代码是:

    Sub PastDue()
    Application.ScreenUpdating = False
    Application.StatusBar = "Job Updating"
    
    Dim lr As Long
    Dim lr2 As Long
    Dim r As Long
    Dim ws1 As Worksheet
    Dim ws2 As Worksheet
    
    Application.ScreenUpdating = False
    Set ws1 = Sheets("Sheet1")
    Set ws2 = Sheets("Sheet2")
    N = 1
    lr = ws1.Cells(Rows.Count, "AC").End(xlUp).Row 'Used to search column AC
    lr = ws1.Cells(Rows.Count, "W").End(xlUp).Row 'This errors out when ran and was a line I added in to check the second column
    lr2 = ws2.Cells(Rows.Count, "A").End(xlUp).Row
    
        For r = 2 To lr
            If ws1.Range("AC" & r).Value = "PastDue" Then
                If ws1.Range("W" & r).Value <> "Risk Accepted" Then  'I added this to search for the second piece of the logic
                    ws1.Rows(r).Copy Destination:=ws2.Range("A" & N + 1)
                N = ws2.Cells(Rows.Count, "A").End(xlUp).Row
                End If
            End If
       Next r
    Sheets("Sheet2").Select
    Application.StatusBar = False
    Application.ScreenUpdating = True
    End Sub
    
    Sub passdue()
    Application.ScreenUpdating=False
    Application.StatusBar=“作业更新”
    变暗lr为长
    调暗lr2,长度相同
    变暗,变长
    将ws1设置为工作表
    将ws2设置为工作表
    Application.ScreenUpdating=False
    设置ws1=图纸(“图纸1”)
    设置ws2=图纸(“图纸2”)
    N=1
    lr=ws1.Cells(Rows.Count,“AC”).End(xlUp).Row'用于搜索列AC
    lr=ws1.Cells(Rows.Count,“W”).End(xlUp).Row'在运行时出错,这是我为检查第二列而添加的一行
    lr2=ws2.Cells(Rows.Count,“A”).End(xlUp).Row
    对于r=2至lr
    如果ws1.Range(“AC”&r).Value=“PastDue”,则
    如果ws1.Range(“W”&r).Value“Risk Accepted”,那么“我添加了这个来搜索逻辑的第二部分”
    ws1.Rows(r).Copy Destination:=ws2.Range(“A”&N+1)
    N=ws2.Cells(Rows.Count,“A”).End(xlUp).Row
    如果结束
    如果结束
    下一个r
    图纸(“图纸2”)。选择
    Application.StatusBar=False
    Application.ScreenUpdating=True
    端接头
    
    这个问题是…?哈哈,当查看原始代码时,我确实在
    x1up
    上做了双重检查,但我认为这只是我!FWIW-另一个问题是不需要第一个
    lr=
    语句。(或者,它可能是必需的,但与当前编写的一样没有用处,因为
    lr
    会立即在下一行被覆盖。)而且
    lr2
    在赋值后不被使用-我怀疑它和
    N
    是一个变量。所以我接受了代码,是的,我键入了1而不是l:P。现在它运行时没有任何错误,但没有结果粘贴到工作表2上。我能做什么:1.清理LR1和lr2,因为我需要在AC列中查找value=“PastDue”,然后是值“RiskAccepted”的W列。现在它运行时没有任何错误,但没有结果粘贴到工作表2上。我可以做什么:1.清理LR1和LR2,因为我需要在AC列中查找value=“PastDue”,然后在W列中查找值“RiskAccepted”。2.当我使用其他人的代码时,它具有"N=1。通过查看用于将第2页上的第一个粘贴行放置到第B行的代码,可以看出这一点。我确信有一种更干净的方法可以做到这一点,但因为它起作用,我想我只需要使用它就可以了。如果有人需要,我确实有一个包含数据的表。我能够修复过去的问题,因为变量的格式从和旧的expor更改t到新的导出。那么看看我如何让它看2个变量,如果我现在想让它看3个变量呢?我需要添加另一个DIM吗?