使用Msgbox显示范围内的项目

这背后的想法是有一个input区域和一个显示区域。 input区域保存值,显示值显示它们(全部准备完成)。 input区域可能less于或多于要显示的内容。 这是一个场景;

----sheet3------ ------sheet4------- DISPLAY INPUTS Name Val Name Val A8 B8 D8 E8 1 x -1 Oranges 5 2 x -1 Peanutes 2 3 x -1 Peaches 6 4 x -1 Coffee -1 Nuts 6 Corn 10 

如图所示,显示器只能保存总共四个不是-1的值。 我们可以在代码中使这个数字是一个固定的数字。 我有function的地方(countif公式)填充显示先到先得,但需要function,如果msgboxinput名称,如果在显示中没有空间。 -1值表示没有input。 我需要一个消息框来显示无法显示的input名称。 在这种情况下,“玉米”的消息框是唯一不能显示的。 我怎么能这样做,而不是固定的细胞数量的范围呢?

这里是一个非工作pseduo /书面代码的例子,我扔在一起,以获得更好的想法如何用范围做到这一点。 Range1表示D8,而Range2表示D13。

 Dim i As Long, cnt As Long cnt = 1 For i = Worksheets("Sheet4").Range("range1").count To Worksheets("Sheet4").Range("range2").count 'Get all items between. If cnt <= 4 'if less what display can offer If i != -1 then 'val is not nothing cnt = cnt + 1 'increment how many items we have displayed end if else msgbox Sheets("Sheet4").Range("A" & i).Value ' The value of I is incorrect as that is not the true range row number. Can you get the actual row of the range with something like .Rows? end if Next i 

尝试这个。 我改变了它,所以为了简单起见,只有一个命名的范围。 即range1是D8:E13。 (如果你愿意的话,很容易改回它)

 Option Explicit Sub test() Dim i As Long, cnt As Long cnt = 1 For i = Worksheets("Sheet4").Range("range1").Row To Worksheets("Sheet4").Range("range1").Row + Worksheets("Sheet4").Range("range1").Rows.Count - 1 'Get all items between. If cnt <= 4 Then 'if less what display can offer If Worksheets("Sheet4").Range("range1").Cells(i - Worksheets("Sheet4").Range("range1").Row + 1, 2) <> -1 Then 'val is not nothing cnt = cnt + 1 'increment how many items we have displayed End If Else MsgBox Worksheets("Sheet4").Range("range1").Cells(i - Worksheets("Sheet4").Range("range1").Row + 1, 1).Value End If Next i End Sub 

你可以试试这个

 Sub main() Dim cnt As Long Dim cell As Range Dim msgString As String With Worksheets("Sheet4") With .Range("D7", .Cells(.Rows.count, "D").End(xlUp)) .Offset(, 1).AutoFilter field:=1, Criteria1:="<>-1" For Each cell In .Resize(.Rows.count - 1).Offset(1).SpecialCells(xlCellTypeVisible) cnt = cnt + 1 If cnt > 4 Then msgString = msgString & cell.Value & vbCrLf Next cell If msgString <> "" Then MsgBox Left(msgString, Len(msgString) - 1) End With .AutoFilterMode = False End With End Sub