通过Excel VBA将数据插入表中

时间:2017-04-09 04:41:45

标签: excel vba excel-vba

我有一个excel表,我正在尝试自动删除数据并将数据插入到Excel表中。

我正在使用此VBA代码从我的表中删除我的数据

Sub Macro2()
    Application.ScreenUpdating = False
    Sheets("Report").Select
    ActiveSheet.ListObjects("Report").HeaderRowRange.Select
    'Remove the filters if one exists.
    If ActiveSheet.FilterMode Then
    Selection.AutoFilter
    End If

    With Worksheets("Report").ListObjects("Engagement_report")
        .DataBodyRange.Offset(1).Resize(.DataBodyRange.Rows.Count - 1, .DataBodyRange.Columns.Count).Rows.Delete
        .DataBodyRange.Rows(1).SpecialCells(xlCellTypeConstants).ClearContents
    End With

End Sub

然而,当我尝试将数据(大约11 000行)插入到同一个表中时,它非常慢并且我的excel崩溃了。我不确定它是否因为调整大小函数我确实删除了所有行,因此当我再次插入数据时,它正在重做范围,因此它很慢。

有人有任何建议可以提供帮助吗?

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

Public Sub addDataToTable(ByVal strTableName As String, _  
   ByVal strData As String, ByVal col As Integer)

 ActiveSheet.Table(strTableName).Select
 If strTableName.Rows.Count = 1 Then
     strTableName(Row, col).Value = strData
 Else
     strTable(LastRow, col).Value = strData
 End If
End Sub

注意:我认为这会对你有所帮助。

答案 1 :(得分:0)

此示例代码将帮助您插入多行。

Sub InsrtRw2()
Dim c As Range, fst As Range, c2 As Range

Set c = Cells.Find("Test", MatchCase:=False, _
lookat:=xlWhole, LookIn:=xlValues)


If Not c Is Nothing Then
c(2).EntireRow.Resize(10).Insert

Set fst = c

again:

Set c2 = Cells.FindNext(c)

If Not c2 Is Nothing Then

If c2.Address <> c.Address _
And c2.Address <> fst.Address Then

c2(2).EntireRow.Resize(10).Insert

Set c = c2

GoTo again

End If
End If
End If

End Sub