Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.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_Excel_Macros - Fatal编程技术网

VBA如何将工作簿上的行复制到具有条件的其他行

VBA如何将工作簿上的行复制到具有条件的其他行,vba,excel,macros,Vba,Excel,Macros,我有一个包含所有原始数据的主工作簿。此字段的B列为空或包含文本“是” 我有另一个工作簿,它必须包含主工作簿中B列中包含“是”的所有行 每次宏运行时,我都需要清空第二个筛选工作簿,并检查第1行的主工作簿 如何使用VBA实现这一点 编辑1:这是我一直在编写的代码 Sub filter() Dim LastRow As Integer, i As Integer, erow As Integer LastRow = ActiveSheet.Range(“A” & Rows.Count).E

我有一个包含所有原始数据的主工作簿。此字段的B列为空或包含文本“是”

我有另一个工作簿,它必须包含主工作簿中B列中包含“是”的所有行

每次宏运行时,我都需要清空第二个筛选工作簿,并检查第1行的主工作簿

如何使用VBA实现这一点

编辑1:这是我一直在编写的代码

Sub filter()

Dim LastRow As Integer, i As Integer, erow As Integer

LastRow = ActiveSheet.Range(“A” & Rows.Count).End(xlUp).Row

For i = 2 To LastRow

If Cells(i, 1) = Date And Cells(i, 2) = “Yes” Then
Range(Cells(i, 1), Cells(i, 7)).Select
Selection.Copy

Workbooks.Open Filename:="C:\Users\212557423\Desktop\2.xls"
Worksheets(“Sheet1”).Select
erow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row

ActiveSheet.Cells(erow, 1).Select
ActiveSheet.Paste
ActiveWorkbook.Save
ActiveWorkbook.Close
Application.CutCopyMode = False
End If

Next i
End Sub
Edit2:经过进一步研究,我得到了以下代码:

Sub filter()
Dim strsearch As String, lastline As Integer, tocopy As Integer

lastline = Range("A65536").End(xlUp).Row
j = 1

For i = 1 To lastline
    For Each c In Range("B" & i)
        If InStr(c.Text, "ja") Then
            Rows(i).Copy Destination:=Sheets(2).Rows(j)
        j = j + 1
        End If
    Next c
Next i

End Sub
我现在的问题是,这个宏只能从一张图纸复制到另一张图纸。我需要的是“从属”工作簿从“主”工作簿中获取行


有人能帮忙吗?谢谢

edit:只需添加一条警告,即按照您的要求,在添加原始数据工作表中的当前筛选值之前,筛选工作簿始终为空

试试这个

Option Explicit

Sub main()
    Dim rawDataSht As Worksheet, filtDataSht As Worksheet

    Set rawDataSht = ActiveSheet
    Workbooks.Open Filename:="C:\Users\212557423\Desktop\2.xls"
    Set filtDataSht = ActiveWorkbook.Worksheets("Sheet1")

    With rawDataSht
        With .Range("A1:G" & .Cells(.Rows.Count, "A").End(xlUp).Row)
            .AutoFilter field:=2, Criteria1:="YES"
            If Application.WorksheetFunction.Subtotal(103, .Cells.Resize(, 1)) > 1 Then
                filtDataSht.Cells.Clear
                .Offset(1).Resize(.Rows.Count - 1).SpecialCells(xlCellTypeConstants).Copy
                filtDataSht.Cells(1, 1).PasteSpecial xlPasteAll
                Application.CutCopyMode = False
            Else
                MsgBox "No data with ""YES"" in column B of sheet " & .Parent.name & " of workbook " & .Parent.Parent.name
            End If
            .AutoFilter
        End With
    End With
    ActiveWorkbook.Close (True)    
End Sub

这是一种稍微不同的完成任务的方法

    With ActiveSheet
        .AutoFilterMode = False
        With Range("B1", Range("B" & Rows.Count).End(xlUp))
            .AutoFilter Field:=1, Criteria1:=Array("YES"), Operator:=xlFilterValues
            On Error Resume Next
            .Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Copy
        End With
    Workbooks("C:\Users\212557423\Desktop\2.xls").Sheets("Sheet1").Cells(1, 1).PasteSpecial xlPasteValues
        .AutoFilterMode = False
    Application.CutCopyMode = False
    End With

你试过什么?发布一些代码以及对您有效/无效的内容。。。。我们非常乐意为您提供指导,但不会为您编写代码。请先尝试一下,发布您所拥有的,我们可以帮助您修复它。首先用简单的步骤制定一个计划,例如1:打开masterWb和otherWb。2:在otherWb的B列中循环所有单元格,并检查masterWb中相应的单元格等。我用代码编辑了我的第一篇文章。谢谢谢谢看起来比我的解决方案好。但是我得到了错误1004,我不知道为什么…这一个:
。自动筛选字段:=2,标准1:=“是”
当启动宏时,包含原始数据的工作表实际上是“活动”的吗?是否有从“A”列到“G”列的数据?是的,包含原始数据的工作表处于活动状态,并且包含从A到G列的数据。我意识到,尽管我收到了该错误消息,但工作表上的数据将被过滤,所有不包含“是”的行都将被隐藏。工作表是否受到保护?