亲爱的SO!
在第J列中,有空行和行,其值为checked。
我试图写一个打印"未经检查"的vba代码哪里有一个空单元格,这可以工作但是当它遇到一个带有值(检查)的单元格时,它会停止。并且不会下到下一个单元格可能是因为我在单元格中有公式,如果没有完全打印,但它仍然包含该公式。在我的情况下,我有空单元格直到J7然后它再次在J15开始。但这可能会不时地改变源数据。
我想这样做的原因是因为我在J列中有一个公式已经打印了一些值然后一些VBA代码检查不同列中的其他值并打印到列J.列J是过滤主列排序。所以这就是我猜的方式。
我现在的代码是,
Sub DoIfNotEmpty()
Dim ra As Range, re As Range
With ThisWorkbook.Worksheets("Sheet1")
Set ra = .Range("J:j25")
For Each re In ra
If IsEmpty(re.Value) Then
re.Value = "unchecked"
End If
Next re
End With
End Sub
如果单元格包含一个公式,我可以打印到空单元格,在这种情况下是否有一个未填充的if语句?
答案 0 :(得分:2)
除了@MaximePorté之外,它应该是.Range("J1:j25")
我想这些单元格看起来只是空洞,但它们不是。
包含空字符串""
的单元格不再是空的,但它看起来像。你可以这样测试:
=""
(中间没有空格!)Debug.Print IsEmpty(Range("A1").Value)
,您将获得FALSE
。单元格A1不再为空,因为它包含空字符串。
你能做什么?
Sub DoIfNotEmpty()
Dim ra As Range, re As Range
With ThisWorkbook.Worksheets("Sheet1")
Set ra = .Range("J1:J25")
For Each re In ra
If IsEmpty(re.Value) or re.Value = vbNullString Then
re.Value = "unchecked"
End If
Next re
End With
End Sub
这会将伪空单元格标记为“未选中”。但请注意,它还会杀死导致空字符串""
的公式。
答案 1 :(得分:1)
您可以利用Specialcells()
对象
Range
方法
Sub DoIfNotEmpty()
ThisWorkbook.Worksheets("Sheet1").Range("J1:J25").SpecialCells(xlCellTypeBlanks).Value = "unchecked"
End Sub
或者,如果您有返回空白的公式,那么AutoFilter()
“空白”单元格并写入其中
Sub DoIfNotEmpty()
With ThisWorkbook.Worksheets("Sheeet1").Range("J1:J25") '<--| reference your range (first row must be a "header")
.AutoFilter Field:=1, Criteria1:="" '<--| filter its empty cells
If Application.WorksheetFunction.Subtotal(103, .cells) > 1 Then .Resize(.Rows.Count - 1).Offset(1).SpecialCells(xlCellTypeVisible).Value = "unchecked" '<--| if any cell filtered other than headers then write "unchecked" in them
.Parent.AutoFilterMode = False
End With
End Sub