Excel 在MSgBox中显示行中的所有非空值

Excel 在MSgBox中显示行中的所有非空值,excel,cell,msgbox,Excel,Cell,Msgbox,我正在处理一个行大小为A:ZZ的Excel表格,应该只有7个单元格有值。我正在尝试制作一种“过滤器”,它将检查非空单元格的数量,如果有超过7个非空单元格,它将在MsgBox中打印一条消息(直到这一点起作用为止)。但是在MsgBox中,我也希望只使用行中的那些值(例如,用coma分隔)-这虽然不起作用,但因为Intersect语法存在一些问题。这是密码 Sub blanks() Dim a, b As Integer a = 0 Range("A1").Select Do

我正在处理一个行大小为A:ZZ的Excel表格,应该只有7个单元格有值。我正在尝试制作一种“过滤器”,它将检查非空单元格的数量,如果有超过7个非空单元格,它将在MsgBox中打印一条消息(直到这一点起作用为止)。但是在MsgBox中,我也希望只使用行中的那些值(例如,用coma分隔)-这虽然不起作用,但因为Intersect语法存在一些问题。这是密码

Sub blanks() 
  Dim a, b As Integer
  a = 0

  Range("A1").Select
  Do
    With ActiveSheet.Range(Rows(b))
      b = ActiveCell.Row
      a = Application.WorksheetFunction.CountA(ActiveSheet.Rows(b))

      If a > 7 Then
        MsgBox ("ERROR" & "/n" & Application.Intersect(.SpecialCells(xlCellTypeVisible)))
        Exit Do
      Else
        ActiveCell.Offset(1, 0).Select
      End If

    End With
  Loop Until ActiveCell = "stop"
End Sub 

有什么问题吗?

这将为您提供常量值(即不是来自公式):

Sub ShowValues()
Dim rowNum尽可能长
变暗行范围作为范围
变暗范围作为范围
作为字符串的Dim msg
rowNum=1
使用此工作簿。工作表(“表1”)
执行While.Cells(rowNum,1)“停止”
设置行范围=.Cells(rowNum,1)。调整大小(1702)
如果Application.WorksheetFunction.CountA(行范围)>7,则
'将行号添加到消息。
msg=msg&“行:&rowRange.Row&:”
'将值添加到由逗号分隔的消息。
对于rowRange.SpecialCells(xlCellTypeConstants)中的每个valRange
msg=msg&valRange.Value&“
下一个山谷
'删除最后一个逗号。
味精=左(味精,精(味精)-2)
“断线。
msg=msg&vbCr
如果结束
rowNum=rowNum+1
环
以
MsgBox msg,vbOKOnly+vbInformation
端接头
或者这将为您提供地址:

Sub ShowAddressOfValues()
    Dim rowNum As Long
    Dim rowRange As Range
    Dim msg As String

    rowNum = 1
    With ThisWorkbook.Worksheets("Sheet1")
        Do While .Cells(rowNum, 1) <> "stop"
            Set rowRange = .Cells(rowNum, 1).Resize(1, 702)
            If Application.WorksheetFunction.CountA(rowRange) > 7 Then
                msg = msg & "Row: " & rowRange.Row & ". Address: " & _
                    rowRange.SpecialCells(xlCellTypeConstants).Address & vbCr
            End If
            rowNum = rowNum + 1
        Loop
    End With
    MsgBox msg, vbOKOnly + vbInformation
End Sub
Sub ShowAddressOfValues()
Dim rowNum尽可能长
变暗行范围作为范围
作为字符串的Dim msg
rowNum=1
使用此工作簿。工作表(“表1”)
执行While.Cells(rowNum,1)“停止”
设置行范围=.Cells(rowNum,1)。调整大小(1702)
如果Application.WorksheetFunction.CountA(行范围)>7,则
msg=msg&“行:&”rowRange.Row&“。地址:&”_
rowRange.SpecialCells(xlCellTypeConstants).地址和vbCr
如果结束
rowNum=rowNum+1
环
以
MsgBox msg,vbOKOnly+vbInformation
端接头

虽然它不应该使用ActiveSheet.Range(行(b))
cus
b
0
),但我仍然建议使用
.SpecialCells(xlCellTypeVisible).Address
。这应该显示非空的范围(不是值)。。。如果需要这些值,则需要为每个…
循环设置一个
。。。(根本不需要
Application.Intersect
)这正是我所需要的,但是with循环总是以一些消息结束(也是空的)。如何以这种方式制作如下内容:
如果有超过这7个值的任何地方,则打印一条消息,如果没有,则继续结束此功能(继续)?
Sub ShowAddressOfValues()
    Dim rowNum As Long
    Dim rowRange As Range
    Dim msg As String

    rowNum = 1
    With ThisWorkbook.Worksheets("Sheet1")
        Do While .Cells(rowNum, 1) <> "stop"
            Set rowRange = .Cells(rowNum, 1).Resize(1, 702)
            If Application.WorksheetFunction.CountA(rowRange) > 7 Then
                msg = msg & "Row: " & rowRange.Row & ". Address: " & _
                    rowRange.SpecialCells(xlCellTypeConstants).Address & vbCr
            End If
            rowNum = rowNum + 1
        Loop
    End With
    MsgBox msg, vbOKOnly + vbInformation
End Sub