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
将条件添加到VBA复制和粘贴_Vba - Fatal编程技术网

将条件添加到VBA复制和粘贴

将条件添加到VBA复制和粘贴,vba,Vba,我有下面的代码,但我需要添加另一个标准。我需要添加的条件是对*实用程序的通配符搜索。因此,如果列L中有单词实用程序,则在复制和粘贴中包含该行。如果没有,请不要复制和粘贴 Sub CopyData() Dim Cl As Range Dim SrcWbk As Workbook Dim SrcSht As Worksheet Dim DestSht As Worksheet Dim Rng As Range Application.ScreenUpdating = False Set Src

我有下面的代码,但我需要添加另一个标准。我需要添加的条件是对
*实用程序的通配符搜索。因此,如果列L中有单词
实用程序
,则在复制和粘贴中包含该行。如果没有,请不要复制和粘贴

Sub CopyData()

Dim Cl As Range
Dim SrcWbk As Workbook
Dim SrcSht As Worksheet
Dim DestSht As Worksheet
Dim Rng As Range

Application.ScreenUpdating = False

Set SrcWbk = Workbooks.Open("Transactional Activity PD 10-2017 (Expense 
Accounts).xlsb")
Set SrcSht = SrcWbk.Sheets("Activity")
Set DestSht = ThisWorkbook.Sheets("Transactions")

With CreateObject("scripting.dictionary")
    For Each Cl In DestSht.Range("AE2", DestSht.Range("AE" & 
Rows.Count).End(xlUp))
        If Not .exists(Cl.Value) Then .Add Cl.Value, Nothing
    Next Cl
    For Each Cl In SrcSht.Range("AE2", SrcSht.Range("AE" & 
Rows.Count).End(xlUp))
        If Not .exists(Cl.Value) And Cl.Offset(, -29).Value = "PV" And 
Cl.Offset(, -15) Like "*Utilities" Then
            If Rng Is Nothing Then
                Set Rng = Cl
            Else
                Set Rng = Union(Rng, Cl)
            End If
        End If
    Next Cl
End With
Rng.EntireRow.Copy DestSht.Range("A" & Rows.Count).End(xlUp).Offset(1)

End Sub

谢谢

下面添加了一个标准,即仅包括在列AE上执行的测试所在行的L列中找到“实用程序”的行。没有测试

Dim Cl As Range
Dim SrcWbk As Workbook
Dim SrcSht As Worksheet
Dim DestSht As Worksheet
Dim Rng As Range

Application.ScreenUpdating = False

Set SrcWbk = Workbooks.Open("Transactional Activity PD 10-2017 (Expense Accounts).xlsb")
Set SrcSht = SrcWbk.Sheets("Activity")
Set DestSht = ThisWorkbook.Sheets("Transactions")

With CreateObject("scripting.dictionary")

    For Each Cl In DestSht.Range("AE2", DestSht.Range("AE" & Rows.Count).End(xlUp))
        If Not .exists(Cl.Value) Then .Add Cl.Value, Nothing
    Next Cl

    For Each Cl In SrcSht.Range("AE2", SrcSht.Range("AE" & Rows.Count).End(xlUp))

        If Not .exists(Cl.Value) And Cl.Offset(, -29).Value = "PV" And _
        InStr(Cl.Offset(, -19), "utilities") > 0 Then
            If Rng Is Nothing Then
                Set Rng = Cl
            Else
                Set Rng = Union(Rng, Cl)
            End If
        End If

    Next Cl

End With

Rng.EntireRow.Copy DestSht.Range("A" & Rows.Count).End(xlUp).Offset(1)

End Sub

你需要更进一步,展示你尝试了什么,哪里出了问题。我修改了我的试用版,每次都会返回一个错误。我不知道我哪里出错了。你为什么要拆分一些程序行?它生成无效的代码我尝试了此代码,但得到了此部分的错误:如果不存在,则.exists(Cl.Value)和Cl.Offset(,-29)。Value=“PV”和uu InStr(Cl.Offset,-25),“utilities”)>0,然后编辑。打字错误,应已阅读指令(第19层偏移量(,-19),“实用程序”)>0