Excel 如何基于非空列中的单元格设置单元格格式?

Excel 如何基于非空列中的单元格设置单元格格式?,excel,vba,Excel,Vba,这真的很简单,但我是VBA新手 如果列B中的单元格不是空的,我想用灰色填充和边框格式化列J和K中的单元格(还没有到K)。我想在工作簿中的每个工作表中都这样做 Sub forEachWs() Dim ws As Worksheet For Each ws In ActiveWorkbook.Worksheets Call Format_ForecastingTemplate(ws) Next End Sub Sub Format_Forecasting

这真的很简单,但我是VBA新手

如果列B中的单元格不是空的,我想用灰色填充和边框格式化列J和K中的单元格(还没有到K)。我想在工作簿中的每个工作表中都这样做

Sub forEachWs()

    Dim ws As Worksheet
    For Each ws In ActiveWorkbook.Worksheets
        Call Format_ForecastingTemplate(ws)
    Next
End Sub


Sub Format_ForecastingTemplate(ws As Worksheet)

    Dim cell As Range
    Dim N As Long
    Dim i As Long

    N = Cells(Rows.Count, "B").End(xlUp).Row

    For i = 1 To N
        If cell <> "" Then
            With ActiveSheet.Range(Cells("J"), cell.Row)
                .ThemeColor = xlThemeColorDark1
                .BorderAround LineStyle:=xlContinuous
            End With
        End If
    Next
End Sub
Sub-forEachWs()
将ws设置为工作表
对于ActiveWorkbook.Worksheets中的每个ws
调用格式\u ForecastingTemplate(ws)
下一个
端接头
子格式\u ForecastingTemplate(ws-As工作表)
暗淡单元格作为范围
长
我想我会坚持多久
N=单元格(Rows.Count,“B”)。结束(xlUp)。行
对于i=1到N
如果是单元格“”,则
使用ActiveSheet.Range(单元格(“J”)、单元格.Row)
.ThemeColor=xlThemeColorDark1
.边框线型:=xlContinuous
以
如果结束
下一个
端接头
给我一个错误的行是
如果单元格为“”,则为
。我想这是因为我没有引用B列中的
单元格
变量

错误为:
对象变量或未设置块变量

像这样:


我将其更改为单个宏,并对原始代码进行了更改

Sub Format_ForecastingTemplate()

Dim cell As Range
Dim N As Long
Dim i As Long
Dim ws As Worksheet

For Each ws In ActiveWorkbook.Worksheets
    N = Cells(Rows.Count, "B").End(xlUp).Row

    For i = 1 To N
    'Looks at B to check if empty
        If ws.Cells(i, 2).Value <> "" Then
            'changes cells J to color and border
            ws.Cells(i, 10).Borders.LineStyle = xlContinuous
            ws.Cells(i, 10).Interior.ThemeColor = xlThemeColorDark1
            ws.Cells(i, 10).Interior.TintAndShade = -0.25

        End If
    Next i
Next ws
End Sub
子格式\u ForecastingTemplate()
暗淡单元格作为范围
长
我想我会坚持多久
将ws设置为工作表
对于ActiveWorkbook.Worksheets中的每个ws
N=单元格(Rows.Count,“B”)。结束(xlUp)。行
对于i=1到N
'查看B以检查是否为空
如果ws.Cells(i,2).Value为“”,则
'将单元格J更改为颜色和边框
ws.Cells(i,10).Borders.LineStyle=xlContinuous
ws.Cells(i,10).Interior.ThemeColor=xlThemeColorDark1
ws.Cells(i,10).Interior.TintAndShade=-0.25
如果结束
接下来我
下一个ws
端接头
可以更改列号,也可以为列K添加新行
希望这能有所帮助,请友好地留下反馈。:)

Cells()之前添加
ws.
,以确保它正在使用
ws
上的
Cells()
。否则,它将使用ActiveSheet。另外,也将
ActiveSheet
更改为
ws
,这样它在循环中使用
ws
,而不是使用任何活动表。不使用条件格式有什么原因吗?也要使用cell.valueAh,也要使用
Cells(“J”)
需要是一个数字…
ws.Cells(“J1”).Value
例如。@controlnetic.nomad条件格式在这种情况下会更好吗?作为最佳实践?我没有完全使用您的代码,但它给了我一些想法。谢谢