微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

最后一行代码到选择案例代码范围

如何解决最后一行代码到选择案例代码范围

添加了最后一行来选择案例代码,见下文。 错误

Method Range of Object _Worksheet Failed

不太确定如何处理错误? 这是否意味着它可以t find the range on the worksheet? I把颜色程序放在下面给你看 除了范围中的最后一行外,代码运行良好

Option Explicit

Private Sub Add_Break_Lines_Click()

    Dim Com As ComboBox
    Dim ws As Worksheet

    Set ws = Application.Workbooks("Automated ardworker.xlsm").Worksheets("Job Card Master")
    Set Com = Me.Add_Break_Lines
    LastRow = ws.Range("C299").End(xlUp).row
    
    With ws
        Select Case Com.Value
        Case "Break Lines 1 Page Job Card"
            Color .Range("A13:Q & LastRow")
        End Select
    End With

End Sub

Function Color(rng As Range)

    Dim row As Range
    Dim EmptyRowNum As Integer
    
    For i = 1 To rng.Rows.Count
        Set row = rng.Rows(i)
        If WorksheetFunction.CountA(row) = 0 Then
            EmptyRowNum = EmptyRowNum + 1
        End If
        If EmptyRowNum = 2 Then
            EmptyRowNum = 0
            row.Interior.ColorIndex = 6
        End If
    Next i

End Function

解决方法

组合框更改

  • 始终使用 Option Explicit

  • 使用与 VBA 中使用的关键字、属性、方法...名称不同的变量名称。

  • 您可以考虑使用

    If WorksheetFunction.CountBlank(rrg) = rrg.Columns.Count Then 
    

    由于 Tom Brunberg 在评论中指出的原因,在函数中,即如果您的公式在范围内计算为“”,则永远不会有 empty 行,只有 blank 行。也许在循环之前使用一个变量:

    cCount = rng.Columns.Count
    

工作表模块例如Sheet1(在 VBA 中括号中的名称)

Option Explicit

Private Sub Add_Break_Lines_Change()

    Dim cmb As ComboBox
    Dim ws As Worksheet
    Dim LastRow As Long

    Set ws = ThisWorkbook.Worksheets("Job Card Master")
    Set cmb = Me.Add_Break_Lines
    cmb.AddItem "Break Lines 1 Page Job Card"
    cmb.AddItem "Dummy"
    LastRow = ws.Range("C" & ws.Rows.Count).End(xlUp).row
    
    Select Case cmb.Value
        Case "Break Lines 1 Page Job Card"
            colorAbove ws.Range("A13:Q" & LastRow)
    End Select

End Sub

标准模块模块 1(可选在同一工作表模块中)

Option Explicit

Sub colorAbove(rng As Range)
    
    Dim brg As Range
    Dim rrg As Range
    Dim EmptyRowNum As Long
    Dim i As Long
    
    For i = 1 To rng.Rows.Count
        Set rrg = rng.Rows(i)
        If WorksheetFunction.CountA(rrg) = 0 Then
            EmptyRowNum = EmptyRowNum + 1
        End If
        If EmptyRowNum = 2 Then
            EmptyRowNum = 0
            If brg Is Nothing Then
                Set brg = rrg
            Else
                Set brg = Union(brg,rrg)
            End If
        End If
    Next i
    
    If Not brg Is Nothing Then
        brg.Interior.ColorIndex = 6
    End If

End Sub

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。