首页 > 解决方案 > 如何根据 VBA 中的活动行选择范围?

问题描述

我正在尝试根据输入的数据设置一系列单元格的单元格颜色。该行将根据当前活动的行而更改,但列将保持不变。如果活动单元格为“N/A”,我想将单元格颜色更改为黑色。我不断收到运行时错误 13:类型不匹配。我正在尝试为当前选择的任何行中的 D:F 列着色。我的代码片段如下。

Sub black_out_range()
Dim wsC As Worksheet
Dim jobRange As Range
Dim jobRange As Range

Set wsC = Worksheets("Sheet1")
Set jobRange = Range("B10", Range("B10").End(xlDown))

jobRange.Select

If TypeName(Selection) = "Range" Then
    For Each i In jobRange
    i.Activate
    
    If ActiveCell = "N/A" Then
        With wsC
            .Range(.Cells(4, i), .Cells(6, i)).Interior.Color = RGB(0, 0, 0)
        End With

提前致谢!

标签: excelvba

解决方案


您没有回答我的澄清问题,所以我会尝试假设您尝试处理真正的错误#N/A。如果是这样,请尝试下一个代码。它还避免了选择,这不会带来任何好处,只会消耗 Excel 资源,降低代码速度:

Sub black_out_range()
 Dim wsC As Worksheet, lastR As Long, i As Long

 Set wsC = Worksheets("Sheet1")
 lastR = wsC.Range("B" & rows.count).End(xlUp).row() 'it returns the last cell even with gaps in the range

 For i = 10 To lastR
    If IsError(wsC.Range("B" & i).Value) Then
        If wsC.Range("B" & i).Value = CVErr(2042) Then   'the error for '#N/A' type
            wsC.Range("D" & i & ":F" & i).Interior.Color = RGB(0, 0, 0)
        End If
    End If
 Next i
End Sub

但是,如果这些单元格中确实有“N/A”,请使用下一个版本:

Sub black_out_range_bis()
 Dim wsC As Worksheet, lastR As Long, i As Long

 Set wsC = Worksheets("Sheet1")
 lastR = wsC.Range("B" & rows.count).End(xlUp).row()

 For i = 10 To lastR
    If wsC.Range("B" & i).Value = "N/A" Then
        wsC.Range("D" & i & ":F" & i).Interior.Color = RGB(0, 0, 0)
    End If
 Next i
End Sub

推荐阅读