Vba 具有范围类问题排序方法的宏
我对下面的宏有点问题-我使用数据表单添加或删除记录。当我添加一条记录时,它工作,但当我删除一条记录时,它不工作-出现错误: “错误1004-范围类的排序方法失败” 有人能帮忙吗 这是一个突出的问题:Vba 具有范围类问题排序方法的宏,vba,excel,sorting,Vba,Excel,Sorting,我对下面的宏有点问题-我使用数据表单添加或删除记录。当我添加一条记录时,它工作,但当我删除一条记录时,它不工作-出现错误: “错误1004-范围类的排序方法失败” 有人能帮忙吗 这是一个突出的问题: Range("A1:G11").Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlYes, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
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为:
排序引用无效。确保它位于要排序的数据内,并且第一个“排序依据”框不相同或不为空
(第一个排序依据框不相同或为空)
请帮助:)这是一种避免使用
的方法。选择并查找最后使用的行以动态更改范围
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 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
请记住,在未指定范围在哪个工作表中的情况下,不要使用范围。您可能应该知道数据块是否有标题。不要依赖xlGuess。您可能希望阅读并遵循以下步骤:加快代码速度,降低代码易出错的风险。谢谢您的指导-它成功了。还有一件事。。。每次删除记录时,范围都会发生变化,但覆盖旧范围的宏代码保持不变。你也能帮我修一下吗?谢谢你,佩赫。。。到目前为止看起来不错。。如前所述,删除记录时范围会发生变化。如何使宏变得如此灵活,以至于在添加或删除记录时实际范围会发生变化…实际上它不再工作。。。当我删除一条记录时效果很好,但当我删除另一条记录时,同样的错误出现了。我发现问题在于删除记录时范围会发生变化,但宏不会随之变化。谢谢你,PEH。。我明白了。。现在,当我使用您的代码并添加或删除一条记录时,我得到的是msge:“排序引用无效。请确保它位于要排序的数据内,并且第一个排序依据框不相同或不为空。”。(不一样,也不是空白)。。我将更新我的帖子并向您显示代码……如果您的数据有标题,您键入的可能是Key1:=.Range(“A2”)
,而不是A1
?并确保在范围之前有一个
,否则它不会引用with
语句中的工作表!我只能坚持“NoRange()
而不引用范围在哪个工作表中”如果这没有改变任何东西,您能提供一个导致错误的示例数据集吗?我无法复制它。此外,当我添加新记录时,它位于列表之外(超出范围),并且我仍然得到msge:Sort方法或range类失败-然后我必须扩展列表,以便能够再次测试…再次出错。。请帮忙好的-谢谢你。。。我会尝试根据你的建议进行更改,然后,如果没有成功,我会给你发送数据表,以便你可以复制。。。谢谢你,佩霍姆。。。是的,它的工作原理和简单的工作表一样。。。多好的解决方案…哈。。。我完全疯了。。我知道,不太推荐在excel 2003中工作,但我必须这样做,因为我正在开发某种计算器/估计器,并且它必须在所有excel版本中工作。。。从2003年开始。非常感谢你,佩赫,我真的很感谢你的帮助。再一次,你绝对是一个能解决任何问题的人。非常感谢。
Dim ws as Worksheet
Set ws = ThisWorkbook.Worksheets("STUDS")
ws.Visible = True
ws.Range("A1").Select