从USEDRANGE方法中排除第一行(它是我的表中的第1行)?

11

我从我的经纪人那里得到了一些输入数据。 我编写了一些代码来自动计算,添加列并插入一些公式。

最终,我想要进行一些有条件的格式设置(影响整行),以确定盈利交易(绿色字体整行)和亏损交易(红色字体整行)。

为此,我使用了USEDRANGE方法-我知道这是一个棘手的问题,但我的数据是一致的-没有空行,只有少数空列,因此我认为USEDRANGE可以处理它。 我需要使用USEDRANGE方法,因为下次运行此报告时将有更多行。

但是,在我的数据中,第一行是我保留列标题的地方。

我希望我的标题保持黑色(字体),但我仍然想使用USEDRANGE方法。

enter image description here

如何使用USEDRANGE方法执行我的条件格式设置,排除第一行(以便它保持黑色字体)。

Option Explicit
Dim RowNumber As Long
Dim LastRow As Long
Dim ColumnNumber As Integer
Dim LastColumn As Integer
Dim VBA As Worksheet
Dim TotalRange As Range

Sub CondicionalFormating_WholeRows()
    Set VBA = Workbooks("lista transakcji Dukascopy od October 2015.xlsm").Worksheets("VBA")
    Set TotalRange = VBA.UsedRange
    LastRow = VBA.Cells(Rows.Count, 1).End(xlUp).Row
    LastColumn = VBA.Cells(1, Columns.Count).End(xlToLeft).Column

TotalRange.FormatConditions.Add Type:=xlExpression, Formula1:="=$H1<0"
TotalRange.FormatConditions(TotalRange.FormatConditions.Count).SetFirstPriority
    With TotalRange.FormatConditions(1).Font
        .Bold = False
        .Italic = False
        .Strikethrough = False
        .Color = -16777024
        .TintAndShade = 0
    End With
    TotalRange.FormatConditions(1).StopIfTrue = False

TotalRange.FormatConditions.Add Type:=xlExpression, Formula1:="=$H1>0"
TotalRange.FormatConditions(TotalRange.FormatConditions.Count).SetFirstPriority
    With TotalRange.FormatConditions(1).Font
        .Bold = False
        .Italic = False
        .Strikethrough = False
        .ThemeColor = xlThemeColorAccent6
        .TintAndShade = -0.499984740745262
    End With
    TotalRange.FormatConditions(1).StopIfTrue = False

    '   VBA.Range(Cells(1, 1), Cells(LastRow, LastColumn)).Select
End Sub

1
我建议您不要使用.UsedRange,而是明确设置TotalRange.UsedRange可能会引起麻烦。 - Kyle
首先,我会进行调整大小操作。然后再进行偏移操作。否则可能会出现1004错误。 - 111111
2个回答

19
Set TotalRange = VBA.UsedRange '<<< your existing line

'Add this line right after
Set TotalRange = TotalRange.Offset(1,0).Resize(TotalRange.Rows.Count-1, _
                                               TotalRange.Columns.Count) 

我应该将这第二行代码添加到我的程序中吗? 您能对这部分进行一些评论吗:... ...Resize(TotalRange.Rows.Count-1, TotalRange.Columns.Count) - michal roesler

10
使用.offset(1)将整个范围引用向下移动1行。这将在范围末尾留下一个空行。.Resize(VBA.UsedRange.Rows.Count - 1)将修剪掉最后几行。
设置TotalRange = VBA.UsedRange.Offset(1).Resize(VBA.UsedRange.Rows.Count - 1)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接