【问题标题】:Show in MSgBox all nonempty values from row在 MSgBox 中显示行中的所有非空值
【发布时间】:2016-02-09 08:09:42
【问题描述】:

我正在处理行大小为 A:ZZ 的 Excel 工作表,并且应该只有 7 个具有值的单元格。我正在尝试制作一种“过滤器”,它将检查非空单元格的数量,如果有超过 7 个非空单元格将在 MsgBox 中打印一条消息(并且直到此时有效)。但是在 MsgBox 中,我也想只从行中获取那些值(例如用逗号分隔) - 尽管由于 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 

怎么了?

【问题讨论】:

  • 虽然它不应该工作(With ActiveSheet.Range(Rows(b)) cus b0)我仍然建议使用.SpecialCells(xlCellTypeVisible).Address。这应该显示非空范围(不是值)...如果您需要这些值,则需要一个 For Each ... 循环...(根本不需要 Application.Intersect

标签: excel cell msgbox


【解决方案1】:

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

Sub ShowValues()
    Dim rowNum As Long
    Dim rowRange As Range
    Dim valRange 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

                'Add row number to message.
                msg = msg & "Row: " & rowRange.Row & ": "

                'Add values to message separated by comman.
                For Each valRange In rowRange.SpecialCells(xlCellTypeConstants)
                    msg = msg & valRange.Value & ", "
                Next valRange

                'Remove last comma.
                msg = Left(msg, Len(msg) - 2)

                'Line break.
                msg = msg & vbCr
            End If
            rowNum = rowNum + 1
        Loop
    End With
    MsgBox msg, vbOKOnly + vbInformation
End Sub

或者这会给你地址:

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

【讨论】:

  • 这基本上正是我所需要的,但 with 循环总是以一些消息结束(也是空的)。如何以这种方式制作类似:if there is anywhere more than those 7 values than print a message and if not just continue with ending this function (go on)?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多