我对下面的宏有一点问题 - 我使用数据表单来添加或删除记录。当我添加一条记录时,它可以工作,但当我删除一条记录时它不起作用 - 出现错误:
“错误1004 - 范围类的排序方法失败”
Dim sourceSheet As Worksheet
Set sourceSheet = ActiveSheet
Application.ScreenUpdating = False
SHEETS("STUDS").Visible = True
SHEETS("STUDS").Select
ActiveSheet.ShowDataForm
Columns("A:H").Select
Range("A1:H5").Sort Key1:=Range("A1"), Order1:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False,
Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range("A1").Select
SHEETS("STUDS").Visible = xlVeryHidden
Call sourceSheet.Activate
有人可以帮忙吗?
这是一个突出显示的问题:
Range("A1:G11").Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
每次添加或删除记录时,范围都会更改,但宏代码保持不变(A1:G11) - 它不会随范围而改变
我尝试了新的和修改过的代码,但它不起作用
Dim sourceSheet As Worksheet
Set sourceSheet = ActiveSheet
Application.ScreenUpdating = False
With Worksheets("STUDS")
.Visible = True
.ShowDataForm
Dim LastRow As Long
LastRow = .Cells(.Cells.Rows.Count, "A").End(xlUp).Row 'find last used row in column A
.Range("A1:H" & LastRow).Sort Key1:=Range("A1"), Order1:=xlAscending,
Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, _
Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
.Range("A1").Select 'only needed if you want to jump to the top
.Visible = xlVeryHidden
End With
Application.ScreenUpdating = True
End Sub
错误msge是:
排序参考无效。确保它在您要排序的数据中,并且第一个按框排序不一样或空白
(第一个排序依据框不相同或为空) 请帮助:)
答案 0 :(得分:0)
这是一种避免使用.Select
并查找最后使用的行来动态更改范围的方法。
Dim sourceSheet As Worksheet
Set sourceSheet = ActiveSheet
Application.ScreenUpdating = False
With Worksheets("STUDS")
.Visible = True
.ShowDataForm
Dim LastRow As Long
LastRow = .Cells(.Cells.Rows.Count, "A").End(xlUp).Row 'find last used row in column A
.Range("A1:H" & LastRow).Sort Key1:=.Range("A1"), Order1:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, _
Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
.Range("A1").Select 'only needed if you want to jump to the top
.Visible = xlVeryHidden
End With
sourceSheet.Activate 'call is deprecated and not needed
Application.ScreenUpdating = True 'Don't forget to reactivate updating!
请注意,我使用了With
声明。这意味着以点开头的所有内容都是指With
语句中指定的工作表:
With Worksheets("STUDS")
.Visible = True
.Range("A1").Select
End With
与
相同Worksheets("STUDS").Visible = True
Worksheets("STUDS").Range("A1").Select
您应始终指定范围在哪个工作表中。如果您不这样做,VBA会假定ActiveSheet是有意的。
另一种方法是为工作表定义变量
Dim ws as Worksheet
Set ws = ThisWorkbook.Worksheets("STUDS")
ws.Visible = True
ws.Range("A1").Select
请记住,如果没有指定范围是哪个工作表,请不要使用Range
。