2015-10-05 88 views
0

我写了一个代码,在过滤一些行后从其他表导入表的一个代码。我的问题是,当我超过表中的行数超过表。现在,我想知道是否有办法通过行数动态修改表的大小。动态修改表大小

Public Sub refresh() 

Dim ws1 As Worksheet, ws2 As Worksheet, lr1 As Long, lRow As Long 
    Set ws1 = ThisWorkbook.Worksheets("Scénarios de menace") 
    Set ws2 = ThisWorkbook.Worksheets("Analyse de risque") 
    Application.Calculation = xlCalculationAutomatic 
    ws2.Range("B6:N" & ws2.Cells(ws2.Rows.Count, 2).End(xlUp).Row).ClearContents 
    lr1 = ws1.Cells(ws1.Rows.Count, 2).End(xlUp).Row 
     ws1.Range("A1:A" & lr1).AutoFilter Field:=1, Criteria1:="x" 
     ws1.Range("B3:N" & lr1).SpecialCells(xlCellTypeVisible).Copy 
     ws2.Range("B6").PasteSpecial Paste:=xlPasteValuesAndNumberFormats 
     ws1.Range("A6:A" & lr1).AutoFilter 
     ws2.Activate: ws2.Cells(1, 1).Activate 
End Sub 
+0

有一个看看'update_Table3' companio [将2个Excel表格合并为一个附加数据]中的子程序(http://stackoverflow.com/questions/9923385/combine-2-excel-tables-into-one-appending-the-data/32680703#32680703) 。它不仅可以将表扩展到新行,还可以删除收缩表格公式中遗留的'#VALUE!'错误。 – Jeeped

回答

1

问题是,调整表格的大小会让您知道它的名称更容易。

我已经添加了3行代码:

  1. 要获得通过粘贴的数据
  2. 使用的总范围为总范围
  3. 要调整表中创建一个表(这里不是真的有用,因为该表是刚刚成立)

    Public Sub refresh() 
    
    Dim ws1 As Worksheet, ws2 As Worksheet, lr1 As Long, lRow As Long, ResultsRange As String 
        Set ws1 = ThisWorkbook.Worksheets("Scénarios de menace") 
        Set ws2 = ThisWorkbook.Worksheets("Analyse de risque") 
        Application.Calculation = xlCalculationAutomatic 
        ws2.Range("B6:N" & ws2.Cells(ws2.Rows.Count, 2).End(xlUp).Row).ClearContents 
        lr1 = ws1.Cells(ws1.Rows.Count, 2).End(xlUp).Row 
    
        ws1.Range("A1:A" & lr1).AutoFilter Field:=1, Criteria1:="x" 
        ws1.Range("B3:N" & lr1).SpecialCells(xlCellTypeVisible).Copy 
        ws2.Range("B6").PasteSpecial Paste:=xlPasteValuesAndNumberFormats 
        ws1.Range("A6:A" & lr1).AutoFilter 
        ws2.Activate 
        ws2.Cells(1, 1).Activate 
    
        ResultsRange = "$B$6:$N$" & ws2.Range("B"& ws2.Rows.Count).End(xlUp).Row 
        ws2.ListObjects.Add(xlSrcRange, Range(ResultsRange), , xlYes).Name = "Results_Table" 
        ws2.ListObjects("Results_Table").Resize Range(ResultsRange) 
    
    End Sub 
    
+0

谢谢你的回答。 – Souma

+0

你的代码给了我一个Range错误。 – Souma

+0

在哪一行?你是否理解创造和调整桌子大小的原则? – R3uK