Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 宏范围/特定单元格消息框_Excel_Vba_Macros_Msgbox - Fatal编程技术网

Excel 宏范围/特定单元格消息框

Excel 宏范围/特定单元格消息框,excel,vba,macros,msgbox,Excel,Vba,Macros,Msgbox,你能帮我学宏吗?我有一个3代码,它只在特定值时显示消息框。但是不要为我工作我不知道为什么。有些错误,我想让所有的范围和后显示我msgbox时,值被履行。有人认识吗 现在我只有一个错误,请看图片 Public Sub found(worksheets) Dim found As Boolean Dim c As Range found = False For Each c In worksheets("data").Range("D155,D456,D757,D1058,D1359,D16

你能帮我学宏吗?我有一个3代码,它只在特定值时显示消息框。但是不要为我工作我不知道为什么。有些错误,我想让所有的范围和后显示我msgbox时,值被履行。有人认识吗

现在我只有一个错误,请看图片

Public Sub found(worksheets)

Dim found As Boolean
Dim c   As Range

found = False
For Each c In worksheets("data").Range("D155,D456,D757,D1058,D1359,D1660,D1961:D1964,D36811,D36813,D38015,D38617,D39219,D39821,D40423,D41025,D52576,D53178,D54984,D55586,D56790,D57392,D58897")

    If c.Value = 8 Then
        found = True
        c.Value = -1
    End If
Next
If found Then MsgBox ("    ZAHLASTE BALENÍ !!!") & vbCrLf & ("BALÍCÍ MNOŽSTVÍ JE 15 KS")

found = False
For Each c In worksheets("data").Range("D29,D31,D33,D35,D37,D39,D41,D43,D45,D47,D49,D51:D57,D59,D61,D63,D65,D67:D83,D85,D87,D89,D91:D95,D97:D101,D103,D105,D107,D109,D110:D111,D41944,D42246:D42250,D45263,D45265,D45267,D45269,D45271,D45273,D45275,D45277,D45279,D45280,D45581,D45882,D46183,D46484,D46785,D47086,D47387")

    If c.Value = 5 Then
        found = True
        c.Value = -1
    End If
Next
If found Then MsgBox ("    ZAHLASTE BALENÍ") & vbCrLf & ("BALÍCÍ MNOŽSTVÍ JE 6 KS")

found = False
For Each c In worksheets("data").Range("D3165,D3466,D3767,D4068,D4369,D4670,D4971,D5272,D5573,D5874,D6175:D10088,D10389,D10690,D41643,D41945,D42251,D42552,D42853,D43154,D43455,D43755,D44057,D44357,D44658,D44959,D48892,D49193,D49494,D49795,D50097,D50397,D50698,D50999,D51308:D51339")

    If c.Value = 8 Then
        found = True
        c.Value = -1
    End If
Next
If found Then MsgBox ("    ZAHLASTE BALENÍ") & vbCrLf & ("BALÍCÍ MNOŽSTVÍ JE 9 KS")

End Sub
在下一页中,我调用
调用模块1。检查(工作表)

这部分代码向我显示错误。

除了应用上述注释(尤其是使用
“D155”
而不是
“D155:D155”
等)

以下是如何在每个操作完成后仅显示一次msgbox:

Dim found as Boolean

found = false
For Each c In worksheets("data").Range(...)
    If c.Value = 8 Then
        found = True
        c.Value = -1
    End If
Next
If found then MsgBox ("    ZAHLASTE BALENÍ !!!") & vbCrLf & ("BALÍCÍ MNOŽSTVÍ JE 15 KS")

found = false
For Each c In worksheets("data").Range(...)
    If c.Value = 5 Then
        found = True
        c.Value = -1
    End If
Next
If found then MsgBox ("    ZAHLASTE BALENÍ") & vbCrLf & ("BALÍCÍ MNOŽSTVÍ JE 6 KS")

found = false
For Each c In worksheets("data").Range(...)
    If c.Value = 8 Then
        found = True
        c.Value = -1
    End If
Next
If found then MsgBox ("    ZAHLASTE BALENÍ") & vbCrLf & ("BALÍCÍ MNOŽSTVÍ JE 9 KS")
编辑:下一个问题

如果提交的字符串长度太长,超过255个字符,则方法
Range
将失败。您可以通过将范围的规范分为两部分来解决此问题:

Dim r As Range
Set r = worksheets("data").Range("D29,D31,D33,D35,D37,D39,D41,D43,D45,D47,D49,D51:D57,D59,D61,D63,D65,D67:D83,D85,D87,D89,D91:D95,D97:D101,D103,D105,D107,D109,D110:D111,D41944,D42246:D42250,D45263,D45265,D45267,D45269,D45271,D45273")
Set r = Union(r, worksheets("data").Range("D45275,D45277,D45279,D45280,D45581,D45882,D46183,D46484,D46785,D47086,D47387"))
For Each d in r  ' <-- Proceed from here
Dim r As范围
集合r=工作表(“数据”)。范围(“D29、D31、D33、D35、D37、D39、D41、D43、D45、D47、D49、D51:D57、D59、D61、D63、D65、D67:D83、D85、D87、D89、D91:D95、D97:D101、D103、D105、D107、D109、D110:D111、D41944、D42246:D42250、D45263、D45265、D45267、D45269、D45277、D45279、D5273”)
集合r=联合(r,工作表(“数据”)。范围(“D45275、D45277、D45279、D45280、D455881、D45882、D46183、D46484、D46785、D47086、D47387”))

对于r'中的每个d,将
.Range(“D155:D155”、“D456:D456”、“D757:D757”、“D1058:D758”、…)
修改为`.Range(“D155、D456、D757、D1058”…)`。您需要确保
Range
有效。
位于括号的开头和结尾
()
如果您的
工作表
参数是实际的
工作表
工作簿对象的集合,那么您最好将
工作簿
对象(即:
公共子检查(wb作为工作簿)
)传递给函数,然后对wb.工作表(“数据”)中的每个c使用
,只是为了不弄乱内置对象的名称OK我尝试更改,代码的第一部分很好,但第二部分显示了这一部分中的错误:对于工作表中的每个c(“数据”)。范围(“D29、D31、D33、D35、D37、D39、D41、D43、D45、D47、D49、D51:D57、D59,请编辑问题以发布更新的代码,并准确地说明错误消息。请查看下面我编辑的答案的最后部分。谢谢您的工作完美!!现在消息框位于后台,请单击,然后在前台显示我如何仅在前台执行msgbox?[链接]不客气,很高兴它起到了作用。对于新问题,我认为它的性质完全不同,因此我建议自己问一个问题(背景是Excel VBA msgBox pops),希望有人遇到过同样的问题,并能给你一个解决方案。