格式化所选范围宏

时间:2020-02-04 12:09:40

标签: excel vba

我想格式化我选择的范围,以简化目前的工作,仅将第一行显示为红色,其余选择显示为白色。

当我的选择从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

非常感谢。

2 个答案:

答案 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

test result

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))总是更干净。