2017-07-12 16 views
0

我有一個工作得很好的VBA,直到我保存並再次打開它,運行它並開始得到錯誤。運行時錯誤1004無法插入新的單元格,因爲它會將非空的新單元格從工作表的末尾推出

我從表格(「主」)複製數據並將此數據轉換爲表格(「全部」)。問題在於我將它轉換爲表格(標識爲列表對象)並在粘貼發生之前添加新行。但是,由於某種原因,它會在表單的奇怪區域轉置。有時在需要的地方,有時在Excel的最後一行。正因爲如此,我會得到運行時間1004錯誤,我不得不進入數據找到這個隨機單元。因爲這不會被我使用,但它是一個模板工作簿,所以我需要確保它能夠順利運行。

這裏是我使用

If Sheets("Master").Range("E3") <> "All Agents" Then 

Sheets("All").ListObjects("Table24").ListRows.Add 
    Sheets("Master").Range("E3").Copy 
    Sheets("All").Cells(Sheets("All").Range("A1").ListObject.DataBodyRange.Rows.Count + 1, 1).PasteSpecial (xlPasteValues) 
    Sheets("Master").Range("H3").Copy 
    Sheets("All").Cells(Sheets("All").Range("B1").ListObject.DataBodyRange.Rows.Count + 1, 2).PasteSpecial (xlPasteValues) 
    Sheets("Master").Range("F9:F33").SpecialCells(xlCellTypeVisible).Copy 
    Sheets("All").Cells(Sheets("All").ListObject.DataBodyRange.End(xlDown).Row, 3).PasteSpecial xlPasteValues, Transpose:=True 

回答

0

嘗試,因爲代碼,

Option Explicit 

Sub Macro1() 
    Dim wsm As Worksheet, i As Long, v As Long, vals As Variant 

    Set wsm = Worksheets("Master") 
    If LCase(wsm.Range("E3")) <> "all agents" Then 
     v = Application.Subtotal(103, wsm.Range("F9:F33")) 
     If CBool(v) Then 
      ReDim vals(1 To 1, 1 To v + 2) 
      vals(1, 1) = wsm.Range("E3").Value 
      vals(1, 2) = wsm.Range("H3").Value 
      For i = 1 To v 
       vals(1, i + 2) = wsm.Range("F9:F33").SpecialCells(xlCellTypeVisible)(i) 
      Next i 

      With Worksheets("All").ListObjects("Table24") 
       .ListRows.Add AlwaysInsert:=False 
       .DataBodyRange.Cells(.DataBodyRange.Rows.Count, 1).Resize(1, UBound(vals, 2)) = vals 
      End With 
     End If 
    End If 
End Sub 
相關問題