在Excel中使用VBA对没有表名的表进行排序

时间:2016-11-18 23:25:25

标签: excel excel-vba vba

我的目标是创建宏,其目的只是按升序对表进行排序。我知道保存几次点击似乎需要付出很多努力,但我需要它作为更大宏的一部分,其余的已经有效。使用记录功能,我得到了这个。

Sheets("Sheet1").ListObjects(1).ListColumns(1).Range

上面的代码确实有效,但我想这样做而不必专门引用表名,因为这可能会根据我使用它的位置而改变。我想用这样的东西

Table1[[#All],[Column1]]

据我所知,应该指向相同的范围     ListObjects(1),但VBA并不喜欢它。它出错了"对象不支持此属性或方法"。我对使用Sheets("Sheet1").ListObject(1).ListColumns(1).Range非常有信心,因为表格上应该只有一个表格。

  1. 我做错了什么?
  2. Table1[[#All],[Column1]]是否等同于import java.util.Scanner; public class test { public static void main(String[] args){ Scanner input = new Scanner(System.in); int numTried = 1; boolean stop = false; String entry = ""; String[] num = new String[10]; while(numTried <= 10 && !stop){ System.out.print("Enter name " + numTried + ": "); entry = input.nextLine(); if(entry.toUpperCase().equals("DONE")){ stop = true; }else{ num[numTried - 1] = entry; } numTried ++; } for(String s : num){ if(!(s == null)){ System.out.println(s); } } input.close(); } }
  3. 是否有更简单的方法使用VBA对表进行排序?
  4. 更新:谢谢Chris的回答;后来我也意识到我可以在脚本开头重命名表,避免这一切。

1 个答案:

答案 0 :(得分:0)

经过测试,它的工作原理Table1是工作表上的第一个或唯一的ListObject,Column1是第一列

Sub Demo()
    With ActiveWorkbook.Worksheets("Sheet1").ListObjects(1).Sort
        .SortFields.Clear
        .SortFields.Add _
          Key:=Sheets("Sheet1").ListObjects(1).ListColumns(1).Range, _
          SortOn:=xlSortOnValues, _
          Order:=xlAscending, _
          DataOption:=xlSortNormal
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub