Excel 在不同页面上调用相同的表

Excel 在不同页面上调用相同的表,excel,vba,Excel,Vba,我录制了一个宏,为了在一个页面上对一个表进行排序,它指定了一个页面名称,我想将它设置为一个变量,这样它就可以在任何活动页面上执行相同的操作 我有一个反映页面名称的命名单元格,并尝试将其输入,但不断出现错误 只是尝试用一个表示活动页面的变量替换(“TRADE”) ActiveWorkbook.Worksheets("TRADE").ListObjects("Table4").Sort.SortFields.Clear ActiveWorkbook.Worksheets("TRADE

我录制了一个宏,为了在一个页面上对一个表进行排序,它指定了一个页面名称,我想将它设置为一个变量,这样它就可以在任何活动页面上执行相同的操作

我有一个反映页面名称的命名单元格,并尝试将其输入,但不断出现错误

只是尝试用一个表示活动页面的变量替换(“TRADE”)

    ActiveWorkbook.Worksheets("TRADE").ListObjects("Table4").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("TRADE").ListObjects("Table4").Sort.SortFields.Add _
        Key:=Range("Table4[[#All],[Column2]]"), SortOn:=xlSortOnValues, Order:= _
        xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("TRADE").ListObjects("Table4").Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    ActiveWorkbook.Worksheets("TRADE").ListObjects("Table6").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("TRADE").ListObjects("Table6").Sort.SortFields.Add _
        Key:=Range("Table6[[#All],[Column2]]"), SortOn:=xlSortOnValues, Order:= _
        xlDescending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("TRADE").ListObjects("Table6").Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    End Sub

这是未经测试,但更换此

ActiveWorkbook.Worksheets("TRADE")
。。。用这个

ActiveSheet

(当我说“未测试”时,我的意思是ActiveSheet应该存在于上下文中,它是否在您更改的所有代码中整体工作是另一回事,这只是对我的回答的一个警告。)

这是未测试的,但替换它

ActiveWorkbook.Worksheets("TRADE")
。。。用这个

ActiveSheet

(当我说“未测试”时,我的意思是ActiveSheet应该存在于上下文中,它是否在您更改的所有代码中整体工作是另一回事,这只是对我的答案的警告。)

Skin给您的答案可能是最好的方法,但这里有一个替代方法:用变量替换硬编码的名称,就像这样

Dim wks As Worksheet
Set wks = ActiveSheet
然后,您需要将工作表名称的每个瞬间替换为
wks.name
。您的代码如下所示:

Dim wks As Worksheet
Set wks = ActiveSheet

    ActiveWorkbook.Worksheets(wks.Name).ListObjects("Table4").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets(wks.Name).ListObjects("Table4").Sort.SortFields.Add _
        Key:=Range("Table4[[#All],[Column2]]"), SortOn:=xlSortOnValues, Order:= _
        xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets(wks.Name).ListObjects("Table4").Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    ActiveWorkbook.Worksheets(wks.Name).ListObjects("Table6").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets(wks.Name).ListObjects("Table6").Sort.SortFields.Add _
        Key:=Range("Table6[[#All],[Column2]]"), SortOn:=xlSortOnValues, Order:= _
        xlDescending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets(wks.Name).ListObjects("Table6").Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

End Sub

Skin给你的答案可能是最好的方法,但这里有一个替代方法:用一个变量替换硬编码的名称,就像这样

Dim wks As Worksheet
Set wks = ActiveSheet
然后,您需要将工作表名称的每个瞬间替换为
wks.name
。您的代码如下所示:

Dim wks As Worksheet
Set wks = ActiveSheet

    ActiveWorkbook.Worksheets(wks.Name).ListObjects("Table4").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets(wks.Name).ListObjects("Table4").Sort.SortFields.Add _
        Key:=Range("Table4[[#All],[Column2]]"), SortOn:=xlSortOnValues, Order:= _
        xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets(wks.Name).ListObjects("Table4").Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    ActiveWorkbook.Worksheets(wks.Name).ListObjects("Table6").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets(wks.Name).ListObjects("Table6").Sort.SortFields.Add _
        Key:=Range("Table6[[#All],[Column2]]"), SortOn:=xlSortOnValues, Order:= _
        xlDescending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets(wks.Name).ListObjects("Table6").Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

End Sub

您的表名
Table4
Table6
也是硬编码的。这不是一个问题吗?我还没有测试该部分,但是页面将是相同的,而且似乎该页面的表名是唯一的,所以希望我不会对该部分有问题。是的,在我尝试之后,它得到了一个超出范围或未定义的错误非常好的观察,任何解决方案都会有帮助。您的表名
Table4
Table6
也是硬编码的。这不是一个问题吗?我还没有测试该部分,但是页面将是相同的,而且似乎该页面的表名是唯一的,所以希望我不会对该部分有问题。是的,在我尝试之后,它得到了一个超出范围或未定义的错误非常好的观察,任何解决方案都会有帮助。我想这只是一个部分答案。表号是唯一的,不能在不同的页面上更改为相同的名称,也不能以任何方式找到并为其分配变量。@如果在每张工作表上的表名前面加上工作表名,会怎么样?如果这样做,调整逻辑就很容易了。我可以在“Table6”内部调用conacate或任何东西,使其类似于“Table6”和“pagename”,作为varaibleSub Macro6()“”Macro6宏“”ActiveSheet.ListObjects(“Table”&ActiveSheet.Name”)。Sort.SortFields.Clear ActiveSheet.ListObjects(“Table”&ActiveSheet.Name).Sort.SortFields.Add u键:=Range(“Table”&ActiveSheet.Name&“[[\#All],[Column2]]),SortOn:=xlSortOnValues,Order:=\uxlascending,DataOption:=xlSortNormal With ActiveSheet.ListObjects(“Table”&ActiveSheet.Name).Sort.Header=xlYes.MatchCase=False.Orientation=xlTopToBottom.SortMethod=xlPinYin.apply不确定它是否对任何人都有帮助,但很难通过名称管理器为每张工作表选择6个表,但在它们所在的列加上页面名称和使跟踪和命名列和页面名称的速度大大加快我想这只是一个部分答案。表号是唯一的,不能在不同的页面上更改为相同的名称,可以通过任何方式找到并为其分配变量。@Inoverhished如果在每张工作表上的表名前面加上工作表名,会怎么样?如果这样做,调整逻辑就很容易了。我可以在“Table6”内部调用conacate或任何东西,使其类似于“Table6”和“pagename”,作为varaibleSub Macro6()“”Macro6宏“”ActiveSheet.ListObjects(“Table”&ActiveSheet.Name”)。Sort.SortFields.Clear ActiveSheet.ListObjects(“Table”&ActiveSheet.Name).Sort.SortFields.Add u键:=Range(“Table”&ActiveSheet.Name&“[[\#All],[Column2]]),SortOn:=xlSortOnValues,Order:=\uxlascending,DataOption:=xlSortNormal With ActiveSheet.ListObjects(“Table”&ActiveSheet.Name).Sort.Header=xlYes.MatchCase=False.Orientation=xlTopToBottom.SortMethod=xlPinYin.apply不确定它是否对任何人都有帮助,但很难通过名称管理器为每张工作表选择6个表,但在它们所在的列加上页面名称和使跟踪和命名列和页面名称的速度更快