Excel 设置选定范围宏的格式

Excel 设置选定范围宏的格式,excel,vba,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.C

我想格式化我选择的一个范围,以简化目前的事情,只需顶部的一行为红色,其余的部分为白色

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

非常感谢大家。

我认为问题在于您的
lr
变量。这将填充所选内容中的行数。但是,如果从第3行开始有10行,那么第10行不是最后一行,第12行是。所以你需要包括一些东西,比如

lr=lr+myRng.行-1

将行数转换为行数

当然,上一篇专栏文章也是如此

请尝试以下代码:

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)

I通过向下移动一行并选择带有
偏移量(1,0)的
lr-1
行来“选择”剩余表格。调整大小(lr-1,lc)

使用
myRng.Resize(n,m)
代替
范围(myRng.Cells(1,1),myRng.Cells(n,m))
总是比较干净的