2015-06-22 53 views
-1

我想将行(A:E),行(F:AH)和行(AL)从活动工作簿复制到行(A:E),行(G:AI),另一个工作簿的行(AJ)。这是我正在处理的代码。我在这里看到它,然后编辑它。基于单元值将特定行复制到另一个工作簿

Dim wb1 As Workbook, wb2 As Workbook 
Dim ws1 As Worksheet, ws2 As Worksheet 
Dim copyFrom As Range 
Dim lRow As Long 
Dim strSearch As String 
Dim ret 

ret = Application.GetOpenFilename(FileFilter:="Excel Workbooks (*.xls, .xlsx*),*.xls, .xlsx*", _ 
            Title:="Select data file for Monitoring Log") 
Set wb1 = ThisWorkbook 
Set ws1 = wb1.Worksheets("Macro Template") 

strSearch = "Newly Distributed" 

With ws1 

    .AutoFilterMode = False 

    lRow = .Range("AL" & .Rows.Count).End(xlUp).Row 

    With .Range("AL7:AL" & lRow) 
     .AutoFilter Field:=1, Criteria1:="=*" & strSearch & "*" 
     Set copyFrom = .Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow 
    End With 

    '~~> Remove any filters 
    .AutoFilterMode = False 
End With 

'~~> Destination File 
Set wb2 = Application.Workbooks.Open(ret) 
Set ws2 = wb2.Worksheets("Source") 

With ws2 
    If Application.WorksheetFunction.CountA(.Cells) <> 0 Then 
     lRow = .Cells.Find(What:="*", _ 
         After:=.Range("A1"), _ 
         Lookat:=xlPart, _ 
         LookIn:=xlFormulas, _ 
         SearchOrder:=xlByRows, _ 
         SearchDirection:=xlPrevious, _ 
         MatchCase:=False).Row + 1 
    Else 
     lRow = 1 
    End If 

    copyFrom.Copy .Rows(lRow) 
End With 

wb2.Save 
wb2.Close 

此代码复制整个行。我如何修改它以复制特定的行。

+1

的问题是不明确的。您似乎在某些点上使用“行”来表示“列”。请发布示例输入数据和预期输出。 –

+0

我的错误是,列a:e中的数据将被复制到另一个工作簿的列a:e中。我不想使用整行,而是想从行的列中复制选定的数据。 –

回答

0

更换

copyFrom.Copy .Rows(lRow) 

copyFrom.Columns("A:E").Copy .Cells(lRow, "A") 
copyFrom.Columns("F:AH").Copy .Cells(lRow, "G") 
copyFrom.Columns("AL").Copy .Cells(lRow, "AJ") 
+0

谢谢!它正在工作 –

0

从源代码,我只是可以看到你从列AL复制到另一个工作表的数据。
我修改了你的代码,并成功复制到另一个工作表中。复制功能可以写成1行而不是多行。

Option Explicit 
Dim wb1 As Workbook 
Dim wb2 As Workbook 
Dim ws1 As Worksheet 
Dim ws2 As Worksheet 
Dim lRow As Long 
Dim lRow2 As Long 
Dim strSearch As String 

Sub Test() 

Dim ret 

ret = Application.GetOpenFilename(FileFilter:="Excel Workbooks (*.xls, .xlsx*),*.xls, .xlsx*", _ 
            Title:="Select data file for Monitoring Log") 
Set wb1 = ThisWorkbook 
Set ws1 = wb1.Worksheets("Macro Template") 

strSearch = "Newly Distributed" 

With ws1 

    .AutoFilterMode = False 

    lRow = .Cells(Rows.Count, "AL").End(xlUp).Row 
    'lRow = .Range("AL" & .Rows.Count).End(xlUp).Row 

    With .Range("AL7:AL" & lRow) 
     .AutoFilter Field:=1, Criteria1:="=*" & strSearch & "*" 
    End With 

End With 

'~~> Destination File 
Set wb2 = Application.Workbooks.Open(ret) 
Set ws2 = wb2.Worksheets("Source") 

With ws2 
    If Application.WorksheetFunction.CountA(.Cells) <> 0 Then 
     lRow2 = .Cells(Rows.Count, "A").End(xlUp).Row 
    Else 
     lRow2 = 1 
    End If 

    'copyFrom.Copy .Rows(lRow) 
    ws1.Range("AL8:AL" & lRow).SpecialCells(xlCellTypeVisible).Copy Destination:=ws2.Range("A" & lRow2) 
End With 

    '~~> Remove any filters 
    ws1.AutoFilterMode = False 

wb2.Save 
wb2.Close 
End Sub 
+0

谢谢。但我想要发生的是将列(A:E)的数据复制到另一个工作簿的列(A:E)以及列(F:AH)到列(G:AI)。 –

+0

您可以修改代码'ws1.Range(“AL8:AL”&lRow).SpecialCells(xlCellTypeVisible).Copy Destination:= ws2.Range(“A”&lRow2)'来满足您的需求。只是改变范围。由于您的问题没有清楚地提到您需要从该列中过滤掉任何内容,因此我只是根据您发布的代码提供解决方案以供参考。希望它可以帮助 –

+0

谢谢。顺便说一下,我怎样才能将只限于列A的行复制到AJ,而不是复制整行。我试过使用copyFrom = .Offset(1,0).SpecialCells(xlCellTypeVisible).Rows(“1:36”),但它不起作用。 –

相关问题