将范围设置为自动筛选后的表格列,Excel VBA

将范围设置为自动筛选后的表格列,Excel VBA,excel,vba,Excel,Vba,我刷新仪表板的部分工作包括过滤ODBC查询表以仅显示某些项目,然后将这些项目ID复制到同一工作簿中的另一个选项卡。因为项目的顺序和过滤结果随着查询的每次刷新而改变,所以我很难定义要复制的项目ID的范围 我尝试了下面的代码,结果只复制了复制到显示表每一行的查询表中的第一个值。我还尝试过通过单元格引用而不是表引用引用来引用范围,这导致了相同的结果 Public Sub EPC_test() Dim wb As Workbook Dim ws As Worksheet Set wb = Activ

我刷新仪表板的部分工作包括过滤ODBC查询表以仅显示某些项目,然后将这些项目ID复制到同一工作簿中的另一个选项卡。因为项目的顺序和过滤结果随着查询的每次刷新而改变,所以我很难定义要复制的项目ID的范围

我尝试了下面的代码,结果只复制了复制到显示表每一行的查询表中的第一个值。我还尝试过通过单元格引用而不是表引用引用来引用范围,这导致了相同的结果

Public Sub EPC_test()

Dim wb As Workbook
Dim ws As Worksheet

Set wb = ActiveWorkbook
Set ws = wb.Sheets("projects_master")

   'filter query table to show qualifying projects
       Set ws = wb.Sheets("projects_master")
       Dim i As Integer, lo As ListObject
        Set lo = wb.Sheets("projects_master").ListObjects(1) 'lo = query table


       i = Application.WorksheetFunction.Match("Display Tab?", wb.Sheets("projects_master").Range("A1:ZZ1"), 0)

       lo_PM.Range.AutoFilter Field:=i, Criteria1:="1"

  'update range with qualifying project IDs
       Set ws_m = wb.Sheets("projects_master") 
        Set ws_BP = wb.Sheets("Display") 

    Set range1 = ws_m.Range("projects_master[ID]").Rows.SpecialCells(xlCellTypeVisible)

    Set range2 = ws_BP.Range("Display[ID]") 

    'copy values from query to display
          range2.Value = range1.Value

“Display”是工作表的名称,还是该工作表上的
ListObject
/表的名称,或者两者都是?我不认为“Display[ID]”和“projects\u master[ID]”是命名范围的有效名称。这些是列标题吗?@MathieuGuindon display是工作表的名称和该工作表上的列表对象。@Comintern是的,这些是表标题。通过单元格引用来引用范围是否更好?与其使用
工作表.range
,不如尝试通过
列表对象
API,例如
设置range2=ws\u BP.ListObjects(“Display”).ListColumns(“ID”).DataBodyRange