我创建了一个向工作表添加信息的表单。通过单击"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
-方法。