【问题标题】:VBA not pasting into empty row in tableVBA不粘贴到表中的空行
【发布时间】:2021-09-19 20:26:40
【问题描述】:

我的目标是将符合特定条件的行复制并粘贴到另一个工作簿的表中。

我的 VBA 运行良好,只是它粘贴在表格下方的空单元格中。不在表格内标题下方的空单元格中。

PS。我知道使用 select 通常不受欢迎,但我需要使用相当基本的语法,以便如果下一个人需要修改它并且不熟悉 VBA,他们可以。

Sub Export()

Sheets("Export Format").Select

Cells(13, "D").Calculate

        With Range("A1", Cells(Rows.Count, "L").End(xlUp))  'reference its column A:G cells from row 1 (header) down to last not empty one in column "A"
            
            .AutoFilter Field:=6, Criteria1:="<>0" ' filter referenced cells on 6th column with everything but "0" content
            
            If Application.WorksheetFunction.Subtotal(103, .Columns(1)) > 1 Then
                
                .Offset(1).Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible).Copy ' copy filtered cells skipping headers
                
                With Workbooks.Open(Filename:="Z:\Tracking\Database.xlsx").Sheets("Sheet1") 'open wanted workbook and reference its wanted sheet
                    
                    .Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone _
                    , SkipBlanks:=False, Transpose:=False 'paste filtered cells in referenced sheet from ist column A first empty cell after last not empty one
                    
                    .Parent.Close True 'Save and closes referenced workbook
                
                End With
                
                Application.CutCopyMode = False
            
            End If
        
        End With
        
        On Error Resume Next
        Sheets("Export Format").ShowAllData 'Clears Filters
        On Error GoTo 0
        
        Sheets("Export Format").Select 'Brings back to Main request sheet
    
End Sub

【问题讨论】:

  • 桌子是空的吗?
  • 是的,该表是空的。我添加了一张数据库图片,以供参考。
  • 想必Region是A列,你确定空白单元格没有隐藏空格吗?
  • 正确,区域是 A 列,我已清除该行的内容,因此其中没有任何内容。
  • 好像xlup不会进入表格,正确的方法是引用表格对象,知道表格名称吗?如果您知道该表是空的,那么我想删除 .Offset(1, 0) 可能会起作用(但会使后续维护者感到困惑!)

标签: excel vba


【解决方案1】:

尝试使用表的属性,例如InsertRowRange

Sub Export()

    Const DBFILE = "Z:\Tracking\Database.xlsx"
    Dim wb As Workbook, wbDB As Workbook
    Dim ws As Worksheet, tbl As ListObject
    Dim rngFilter As Range, x, rng As Range

    Set wb = ThisWorkbook
    Set ws = wb.Sheets("Export Format")
    
    x = Application.WorksheetFunction.Subtotal(103, ws.Columns(1))
    If x <= 1 Then
        ws.Select
        Exit Sub
    End If

    ' set filter range
    With ws
       .Range("D13").Calculate
       ' column A:L cells from row 1 (header)
       ' down to last not empty one in column "A"
       Set rngFilter = .Range("A1", .Cells(Rows.Count, "L").End(xlUp))
    End With
    
    ' open wanted workbook and reference its wanted sheet
    Set wbDB = Workbooks.Open(DBFILE)
    With wbDB.Sheets("Sheet1")
        Set tbl = .ListObjects("Table1")
        If tbl.InsertRowRange Is Nothing Then
           Set rng = tbl.ListRows.Add.Range
        Else
           Set rng = tbl.InsertRowRange
        End If
    End With

    ' filter on 6th column with everything but "0" content
    With rngFilter

        .AutoFilter Field:=6, Criteria1:="<>0"
        ' copy filtered cells skipping headers
        .Offset(1).Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible).Copy
        'paste filtered cells in referenced sheet
        'from ist column A first empty cell after last not empty one
        rng.PasteSpecial Paste:=xlPasteValues, _
            Operation:=xlNone, SkipBlanks:=False, Transpose:=False
        Application.CutCopyMode = False
       
    End With

    wbDB.Close True 'Save and closes referenced workbook
    ws.AutoFilterMode = False
    ws.Select 'Brings back to Main request sheet
    MsgBox "Ended"
  
End Sub

【讨论】:

  • 非常感谢,它运行良好!
猜你喜欢
  • 2015-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多