我想格式化我选择的范围,以简化目前的工作,仅将第一行显示为红色,其余选择显示为白色。
当我的选择从A1开始时,一切都很好,但是,当我的选择在整个图纸上开始时,我的格式就会偏离选择。
自从我玩VBA以来已经很久了,所以为真正的菜鸟问题道歉!
这是我的代码:
Sub formatrange()
Dim myRng As Range
Set myRng = Selection
Dim lc As Long
Dim lr As Long
lr = myRng.Rows.Count
lc = myRng.Columns.Count
myRng.Range(myRng.Cells(1, 1), myRng.Cells(1, lc)).Interior.Color = RGB(153, 0, 0)
myRng.Range(myRng.Cells(2, 1), myRng.Cells(lr, lc)).Interior.Color = RGB(255, 255, 255)
End Sub
非常感谢。
答案 0 :(得分:0)
我认为问题是您的lr
变量。这将填充您选择的行数。但是,如果说从第3行开始有10行,那么第10行不是最后一行,第12行是。因此,您需要添加
lr = lr + myRng.Row - 1
要将行数转换为行号。
课程的最后一列也是如此
答案 1 :(得分:0)
尝试以下代码:
Public Sub FormatRange()
Dim myRng As Range
Set myRng = Selection
Dim lc As Long, lr As Long
lc = myRng.Columns.Count
lr = myRng.Rows.Count
myRng.Resize(1, lc).Interior.Color = RGB(153, 0, 0)
myRng.Offset(1, 0).Resize(lr - 1, lc).Interior.Color = RGB(255, 255, 255)
End Sub
myRng
引用选定的范围,而myRng.Resize()
更改引用的行和列的数量。另外,myRng.Offset()
将参考向下和向右移动指定的数量。
因此,我从myRng
处获取了左上方的引用,并通过.Resize(1,lc)
“选择”了第一行
我通过向下移动一行并用lr-1
选择.Offset(1,0).Resize(lr-1,lc)
行来“选择”剩余的表。
恕我直言,使用myRng.Resize(n,m)
代替Range(myRng.Cells(1,1), myRng.Cells(n,m))
总是更干净。