2016-12-15 5 views
1

Können Sie mir bitte mit Makro helfen? Ich habe einen 3-Code, der mir msg-Box nur anzeigt, wenn - bestimmter Wert. Aber arbeite nicht für mich. :/Ich weiß nicht warum. einige fehler, ich möchte alle bereiche machen und nachher zeige mir msgbox wenn value erfüllt werden soll. Jemand bekannt?Makrobereich/spezifische Zellen msg-Feld

Jetzt habe ich aber zeigt ERROR SEE IMAGE

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 

Im nächsten Blatt nennen i Call Module1.check(worksheets)

dieser Teil des Codes zeigt mir Fehler. enter image description here

+1

ändern Sie Ihre '.Range ("D155: D155", "D456: D456", "D757: D757", "D1058: D758" , ....) '' '' .Range ("D155, D456, D757, D1058" ....) '. Sie müssen sicherstellen, dass Ihre 'Range's gültig sind. Die '' 'sind am Anfang und das Ende der Klammern'() ' –

+0

, wenn Ihre'Arbeitsblätter' -Argument tatsächlichen' Worksheets' Sammlung von 'Workbook' Objekt, dann übergeben Sie Ihre Funktion ein' Arbeitsmappen' -Objekt (zB: 'Public Sub check (wb Als Arbeitsmappe)') und dann 'For Each c In wb.Worksheets (" data ")', nur nicht mit eingebauten Objektnamen zu vermasseln – user3598756

+0

ok ich versuche zu ändern, erster Teil der Code ist gut, aber der zweite Teil zeigt mir Fehler in diesem Teil: Für jeden c In Arbeitsblättern ("Daten"). Bereich ("D29, D31, D33, D35, D37, D39, D41, D43, D45, D47, D49, D51: D57, D59, –

Antwort

2

Zusätzlich zu den obigen Kommentare zu Anwendung (vor allem verwenden "D155" statt "D155:D155", etc,

Hier ist, wie Sie die msgbox anzeigen kann nur einmal nach der Vollständigkeit jeder Operation:

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") 

EDIT: das nächste Problem

Die Methode Range wird fehlschlagen, wenn die le ngth der gesendeten Zeichenfolge ist zu lang, mehr als 255 Zeichen. Sie können es umgehen, indem Sie die Spezifikation des Bereichs in zwei Teile aufgeteilt:

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 
+0

Danke funktioniert perfekt !! Jetzt ist das Meldungsfeld auf dem Hintergrund und warte, um zu klicken, zeig mir dann im Vordergrund, wie kann ich Mache msgbox nur im Vordergrund? [link] https://postimg.org/image/gf567vsnz/ –

+0

Sie sind willkommen, froh, dass es geholfen hat. Für das neue Problem, ich denke, dass es von einer völlig anderen Natur ist, so schlage ich vor, eine Frage selbst zu stellen (Excel VBA msgBox erscheint im Hintergrund) hoffnungsvoll jemand hat das gleiche Problem konfrontiert und wird Ihnen eine Lösung geben. –

Verwandte Themen