我使用以下代码块来设置一些初始值。我发现自己经常使用这种结构,我想知道是否有更简洁的东西?
(a, b)
如果重要,这些范围中的每一个都是一列宽。
答案 0 :(得分:4)
我会使用枚举来引用列号。枚举位于代码模块的顶部。列表中的下一个枚举是从前一个增加1。枚举列的最大优点是需要重新排序列时;您只需更新枚举,您的代码将像以前一样运行。枚举也适用于intellisense。
Option Explicit
Public Enum Cols
cnAppTransEffDate = 2
cnAppTransAmt = 4
cnAppActionCode = 5
cnAppDescr
End Enum
Sub FillData()
' Some Code
With Worksheets(AppTab)
.Cells(StartingRow, cnAppTransEffDate).Value = FirstPymtDueDate
.Cells(StartingRow, cnAppTransAmt).Value = RegularPymt
.Cells(StartingRow, cnAppActionCode).Value = SchPymtDueActionCode
.Cells(StartingRow, cnAppDescr).Value = TransDescr
End With
End Sub
答案 1 :(得分:3)
使用一个或多个With ... End With语句。
with Sheets(AppTab)
.Cells(StartingRow, .Range("AppTransEffDate").Column) = FirstPymtDueDate
.Cells(StartingRow, .Range("AppTransAmt").Column) = RegularPymt
.Cells(StartingRow, .Range("AppActionCode").Column) = SchPymtDueActionCode
.Cells(StartingRow, .Range("AppDescr").Column) = TransDescr
end with
'alternate
with Sheets(AppTab)
with .rows(StartingRow)
.Cells(1, .Range("AppTransEffDate").Column) = FirstPymtDueDate
.Cells(1, .Range("AppTransAmt").Column) = RegularPymt
.Cells(1, .Range("AppActionCode").Column) = SchPymtDueActionCode
.Cells(1, .Range("AppDescr").Column) = TransDescr
end with
end with
我不认为第二个With .... End With会在这种情况下显示出与第一个一样多的改进,但隔离你引用的单元格会更有效率,并避免重复调用以查找父母身份。
始终明确引用父工作表被广泛认为是“最佳做法”,并且完全避免使用.Select和.Activate。
答案 2 :(得分:0)
我通常的方法是设置行范围的第一个单元格,然后使用Range._Default
属性
Set r = Sheets(AppTab).Range("A" & StartingRow)
r(, Range("AppTransEffDate").Column) = FirstPymtDueDate
但不是命名范围,我会像Thomas Inzina的回答一样使用Enum
。
如果你的命名范围从第1行开始,那么这可能会起作用
Range("AppTransEffDate")(StartingRow) = FirstPymtDueDate
或
Set areas = Sheets(AppTab).Range("AppTransEffDate,AppTransAmt,AppActionCode,AppDescr").Areas
areas(1)(StartingRow) = FirstPymtDueDate
areas(2)(StartingRow) = RegularPymt
areas(3)(StartingRow) = SchPymtDueActionCode
areas(4)(StartingRow) = TransDescr
或者也许Intersect可能会起作用:
Set areas = Sheets(AppTab).Range("(AppTransEffDate,AppTransAmt,AppActionCode,AppDescr) " & StartingRow & ":" & StartingRow).Areas
areas(1) = FirstPymtDueDate
areas(2) = RegularPymt
areas(3) = SchPymtDueActionCode
areas(4) = TransDescr