如何在VBA中对区域进行排序,而不对排序列的第一个单元格进行硬编码



我们公司的数据库生成给定客户的费用和付款的CSV列表,我正在尝试创建一个宏,该宏将使用CSV为我们的客户创建发票。

CSV的格式是,付款列表显示在费用列表下方几行,这两行的长度可能不同。每个部分中的列也代表不同的内容(例如,B列在费用部分显示客户姓氏,在付款部分显示付款日期(。正因为如此,宏在对每个范围进行操作时,不能硬编码每个范围的开始和结束位置(当我简单地记录它时,它会这样做(。

代码的一部分用于按日期对付款进行排序:

Dim PaymentsTable As Range
Set PaymentTable = ActiveSheet.Cells(LastRow, 1).CurrentRegion
Dim PaymentDate As Range
Set PaymentDate = PaymentTable.Columns(2)
PaymentDate.Interior.ColorIndex = 3
PaymentTable.Sort Key1:=Range("PaymentDate"), Order1:=xlAscending, Header:=xlYes

程序可以正确识别倒数第二行中的第2列(将其染成红色(。然而,最后一行总是产生以下错误:

"对象"_Global"的方法"Range"失败">

我可以通过在Key1中给出绝对单元位置(例如"A1"(来消除这个错误。

为什么我会出现此错误?如何更改代码以将其删除?如有任何帮助,我们将不胜感激!

您需要直接给定范围PaymentTable,因为您已经将其定义为Dim PaymentDate As Range

PaymentTable.Sort Key1:=PaymentTable, Order1:=xlAscending, Header:=xlYes

如果使用Range("PaymentDate"),它将查找不是变量PaymentDate的命名范围"PaymentDate"

最新更新