0

我在 excel 中有一个表格,我正在插入一些列,因为最后一列正在更改,我必须检测最后一列并将其设置为 vba 中的范围

我已经编写了代码来查找最后一列并将其转换为字母,但是我无法将其设置为范围。

Public Function ColumnLetter(ColumnNumber As Long) As String
ColumnLetter = Split(Cells(1, ColumnNumber).Address(True, False), "$")(0)
End Function

Dim Rng As Range
Dim LastColumn, LastRow As Long
Dim Str As String

LastRow = Cells(Rows.Count, 2).End(xlUp).Row
LastColumn = Cells(2, Columns.Count).End(xlToLeft).Column
Str = ColumnLetter(LastColumn)
'Set Rng = Range("M7:M" & LastRow)

我想将注释行写为

Set Rng = Range( & Str & "7" & LastRow)

让它动态我该怎么做?

4

2 回答 2

1

首先,换成Str别的东西;您正在遮蔽该Str功能。

Dim colLetter As String
colLetter = ColumnLetter(LastColumn)

然后根据需要连接:

Set Rng = Range(colLetter & "7:" & colLetter & LastRow)

请注意,您可以跳过使用列字母而只使用Cells列索引。

Set Rng = Range(Cells(7, LastColumn), Cells(LastRow, LastColumn))
于 2021-05-26T13:04:55.137 回答
1

正如其他人指出的那样, Str 不是最好的变量名。假设您将其更改为“ColLtr”...那么您的具体答案是Range(ColLtr & "7:" & ColLtr & LastRow)

但是,我可以建议另一种方法吗?

如果您尝试将范围设置为已使用范围的右下角,请使用:

With {sheet}.UsedRange
Set Rng = .Cells(.Rows.Count,.Columns.Count)
End With

(用或替换 {sheet}WorkSheets("MySheet")ActiveSheet您更喜欢指定工作表。)

如果您需要整列,请将其调整为:

With {sheet}.UsedRange
Set Rng = .Columns(.Columns.Count)
End With

但是...如果您“将范围格式化为表格”(创建 ListObject),则可以完全绕过 VBA 并[TableName[ColumnHeader]]在 VBA 或工作表公式中使用 。当然,“TableName”和“ColumnHeader”将特定于您的表格名称和列标题中的实际文本。

于 2021-05-26T13:18:39.113 回答