我目前正在学习/搞乱VBA编码,所以我可以写一些宏来工作。我可以真的使用一些帮助。
问题:我希望下面的代码(由宏记录器编写)为我的需要添加一些特定的代码。
Sub Sort()
Range("A1:D23").Select
ActiveWindow.SmallScroll Down:=-15
ActiveWorkbook.Worksheets("Sheet8").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Sheet8").Sort.SortFields.Add(Range("A2:A23"), _
xlSortOnCellColor, xlDescending, , xlSortNormal).SortOnValue.Color = RGB(255, _
255, 0)
With ActiveWorkbook.Worksheets("Sheet8").Sort
.SetRange Range("A1:D23")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End Sub
第一行我希望它不具有特定范围的静态。替换Range(“A1:D23”)。选择范围(“A1”)。CurrentRegion。选择我的数据表中不同范围的工作?
对于第3,第4和第5行,其中显示ActiveWorkbook.Worksheets(“Sheet8”)如何才能使其不仅对于sheet8而且对于我打开或创建的任何工作表都有效?
3.最后在第4行Sort.SortFields.Add(范围(“A2:A23”),我想从不同的数据更改为该列下的不同行数
我希望我足够清楚。如果可以,请帮助
答案 0 :(得分:1)
这可能会有所帮助:
获取工作表的行数并使用它。请参阅下面的详细信息。注意:如果工作表是空的,可能会出现故障。
将ActiveWorkbook.Sheets("Sheet 8")
替换为ActiveSheet
。不幸的是,ActiveSheet不提供自动完成功能,但它是一个Sheet对象。将它投射到任何Sheet对象都会给你这种行为。
好吧,一旦你希望你的代码两次处理相同的范围,你也可以将它保存在一个变量中。
考虑到您的表可能会按行和列扩展,您需要使用End
命令对它们进行计数。
这是更新后的代码:
Sub Sort()
Dim sht As Worksheet
Dim rngSort As Range
Dim rngTable As Range
Set sht = ActiveSheet
rowCount = sht.Range("A1").End(xlDown).Row
Set rngSort = sht.Range("A1:A" & rowCount)
Set rngTable = sht.Range(sht.Cells(1, 1), sht.Cells(rowCount, 1).End(xlToRight))
sht.Sort.SortFields.Clear
sht.Sort.SortFields.Add(rngSort, _
xlSortOnCellColor, xlDescending, , _
xlSortNormal).SortOnValue.Color = RGB(255, 255, 0)
With sht.Sort
.SetRange rngTable
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
看看我的射程。我使用sht.Range
因为当您没有说出您的范围在哪里时,Excel会认为它是您选择的工作表。如果不是,你必须明确说出来。在你的情况下,没关系。