Excel-vba从用户select的工作簿中抽取过滤的信息

我必须做一个主要的报告,汇编来自两个有点大的工作簿的信息。 这些工作簿每周都在变,但是每一个的信息结构都是一样的,从每列的名称有多less列(每一个有多less条logging可能会有所不同,当然是从20000到25000等)

从工作簿1,我必须从一个范围的特定列中提取信息。 通过调查,我设法find一个很好的代码,帮助了我很多。 信息跨越工作表中的A:W,但我只需要列c,f,g,i和w中的信息。

Private Sub BtnImportDPr_Click() Dim wkbCrntWorkBook As Workbook Dim wkbSourceBook As Workbook Dim rngSourceRange As Range Dim rngDestination As Range Set wkbCrntWorkBook = ActiveWorkbook With Application.FileDialog(msoFileDialogOpen) .Filters.Clear .Filters.Add "Excel 2007-16", "*.xlsx; *.xlsm; *.xlsa; *.xlsb" .AllowMultiSelect = False .Show If .SelectedItems.Count > 0 Then Workbooks.Open .SelectedItems(1) Set wkbSourceBook = ActiveWorkbook Worksheets("SysSummary").Activate ActiveSheet.Range("A:W").AutoFilter Field:=3, Criteria1:="<=700" _ , Operator:=xlAnd Set rngSourceRange = Application.InputBox(prompt:="Select source range", Title:="Source Range", Default:="SysSummary!C:C,SysSummary!F:F,SysSummary!G:G,SysSummary!I:I,SysSummary!W:W", Type:=8) wkbCrntWorkBook.Activate Set rngDestination = Application.InputBox(prompt:="Select destination cell", Title:="Select Destination", Default:="B:F", Type:=8) rngSourceRange.Copy rngDestination rngDestination.CurrentRegion.EntireColumn.AutoFit wkbSourceBook.Close False End If End With End Sub 

这个代码允许用户select他/她想要使用的工作簿,我知道这看起来有很大的潜在错误风险,但我确信我从中获取信息的范围的结构将保持不变它被改变,这可能意味着这个工作实用程序将不存在。 |||

现在,在第二个工作簿中,我需要使用一个表格(跨越所有用户select的工作簿,其名称将保持不变)。 这个表格很大,从A列到AQ列,但我只需要a,e,u,p,q,v和aa列的信息。

所以,由于最后的代码工作,我试着再次使用它,但一些errorespopup。 就像一张桌子是不同的

 Private Sub BtnImportTTS_Click() Dim wkbCrntWorkBook As Workbook Dim wkbSourceBook As Workbook Dim rngSourceRange As Range Dim rngDestination As Range Set wkbCrntWorkBook = ActiveWorkbook With Application.FileDialog(msoFileDialogOpen) .Filters.Clear .Filters.Add "Excel 2007-16", "*.xlsx; *.xlsm; *.xlsa; *.xlsb" .AllowMultiSelect = False .Show If .SelectedItems.Count > 0 Then Workbooks.Open .SelectedItems(1) Set wkbSourceBook = ActiveWorkbook Worksheets("Sys_DETAIL").Activate ConvertTableToRange ActiveSheet.Range("A3:AT").AutoFilter Field:=27, Criteria1:="02" Set rngSourceRange = Application.InputBox(prompt:="Select source range", Title:="Source Range", Default:="Sys_DETAIL!A:A,Sys_DETAIL!E:E,Sys_DETAIL!U:U,Sys_DETAIL!P:P,Sys_DETAIL!Q:Q,Sys_DETAIL!V:V,Sys_DETAIL!AA:AA", Type:=8) wkbCrntWorkBook.Activate Set rngDestination = Application.InputBox(prompt:="Select destination cell", Title:="Select Destination", Default:="B:H", Type:=8) rngSourceRange.Copy rngDestination rngDestination.CurrentRegion.EntireColumn.AutoFit wkbSourceBook.Close savechanges:=False End If End With End Sub Sub ConvertTableToRange() Dim rList As Range With Worksheets("TTS_DETAIL").ListObjects("Table_TRACK_TTS.accdb") Set rList = .Range .Unlist ' convert the table back to a range End With End Sub 

经过调查了一下,我决定去懒惰的路线,只是通过VBA代码转换表正常范围,它的工作。 但由于某种原因,我不能把所有的信息。 筛选到Criteria1:02(这是非常重要的)后,我留下了8500logging(从过去的200000),但Excel只是拉5000个logging。

我不确定是否与范围曾经是一个表的事实有关。 所以,如果有人可以帮我修改我的代码,或者给我一个新的表,我会非常感激。