运行时错误1004.范围类的选择方法失败.VBA



我创建了一个向工作表添加信息的表单。通过单击"ADD"将数据添加到工作表中。按钮。一旦添加到工作表中,它就会选择工作表中的所有数据进行排序和格式化。

工作簿被定义为WB设置为ThisWorkbook工作表定义为WS,并设置为WS。工作表("Transactions")

添加数据没有任何问题,但是当尝试选择所有数据格式化时,我现在得到'运行时间';错误。

在下面的代码中,i = 28

With WS
.Range("A2:F" & i).Select <<<---- on this line
.Range("F" & i).Activate
.Sort.SortFields.Clear
.Sort.SortFields.Add2 Key:=Range("C1:C" & i), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal  ' sorts by date
.Sort.SortFields.Add2 Key:=Range("B1:B" & i), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal  ' sorts by type
.Sort.SortFields.Add2 Key:=Range("D1:D" & i), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal ' sorts by income or outgoing
' Further sorting and formatting continues below ......
End with

首先,我从范围选择中删除变量,并使用

With WS
.Range("A2:F28").Select 
..........
End with

但是,这会导致相同的错误。

我还尝试将WB设置为ActiveWorksheet而不是ThisWorksheet,以防它试图从其他打开的工作簿中选择单元格。然而,它刚刚将数据写入正确的工作表

然后我尝试删除。select

的使用
With WS
With .Range("A2:F" & i)
'.Range("F" & i).Activate
.Sort.SortFields.Clear
.Sort.SortFields.Add2 Key:=Range("C1:C" & i), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal  ' sorts by date
.Sort.SortFields.Add2 Key:=Range("B1:B" & i), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal  ' sorts by type
.Sort.SortFields.Add2 Key:=Range("D1:D" & i), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal ' sorst by income or outgoing
End With
End With

但是这会产生一个错误"无法获取Range类的Sort属性">

(1)您提到的错误是因为您不能在非活动工作表的范围上使用Select。然而,你不需要。

(2) Sort错误有点棘手。嵌套2个With-语句。在这种情况下,VBA将首先查看"inner"With语句,在你的例子中是Range。现在一个Range有一个Sort方法,VBA运行时认为您想要访问它。但是,该排序是一个(一行)方法,您可以调用,参见https://learn.microsoft.com/en-us/office/vba/api/Excel.range.sort
。但是,您拥有的代码对于Sort-Object是有效的。此Sort-对象存在于工作表,而不是范围,请参阅https://learn.microsoft.com/en-us/office/vba/api/Excel.range.sort

因此,您可以删除内部With-子句以使用工作表的Sort-对象,或者为Range调用特定的Sort-方法。

相关内容

  • 没有找到相关文章

最新更新