Warnung durch MsgBox

Hallo,
Ich möchte gerne das eine MsgBox als Warnung erscheint,
wen im Range H2:H35 ein Wert unter 1000 steht.
Zelle mit einem Wert unter 1000 wird farblich hinterlegt, ist sonst weiß.
(Bedingte Formatierung).
Text MsgBox:
„Achtung! Bestand Rollenware unter 1 To.“
Wenn es geht mit rotem Warnkreuz.(vbCritical=richtig???)
Wenn die MsgBox geschlossen wurde, soll sie erst wieder erscheinen wenn
ein weiterer Wert im Range H2:H35 unter 1000 auftritt.
Die Werte kommen aus einem anderen Workbook .(Excel 2000)

Public Sub Kopieren()
 Workbooks("Bestand Rollenware\_Lager.xls").Sheets("Lager").Range("B2:I35").Copy
 Workbooks("Bestand Rollenware\_Einkauf.xls").Sheets("Einkauf").Range("B2").PasteSpecial xlPasteValues
 Application.CutCopyMode = False
End Sub

Ich hoffe ich habe alles verständlich erklärt.
Für jede Hilfe bedanke ich mich schon mal im voraus.

Gruß Skaletti!

Hi Skaletti,

ich würde es so machen, bestimmt gibt es noch ne bessere Möglichkeit, also lasse ich gerne Berichtigungen zu :smile:

Sub pruefen()

 Dim x As Integer
 Dim y As Integer
 Dim int\_begin\_x As Integer
 Dim int\_end\_x As Integer
 Dim int\_begin\_y As Integer
 Dim int\_end\_y As Integer

 'Variablen um den Bereich auszuwählen. (Hier bitte die Werte der Anfangs und der Endposition für jede Koordinate eintragen.):
 '##########################################################################################
 int\_begin\_x = 1
 int\_end\_x = 2

 int\_begin\_y = 1
 int\_end\_y = 5
 '##########################################################################################


 For x = int\_begin\_x To int\_end\_x
 For y = int\_begin\_y To int\_end\_y

 If Cells(y, x).Value 
klein-artur

ich würde es so machen, bestimmt gibt es noch ne bessere
Möglichkeit, also lasse ich gerne Berichtigungen zu :smile:

Hallo Artur,

drei Dinge fallen mir sofort auf.

Schau mal in die Hilfe zu Address.
Dann kommst du auf sowas:
Msgbox range(„A1“).Adress
Msgbox range(„A1“).Adress(0,0)

Du setzt in der If-Schleife bestimmte Zellen auf Rot. Du mußt aber vor der For-Schleife erstmal alle Zellen im Bereich auf Weiß setzen.
Sonst hast du noch Alt-Rote Zellen die größer 1000 sind.

Zeielen und Spalten immer als Long deklarieren, ob Integrer ausreichen würde ist belanglos. Es geht um Schnelligkeit.
Cells() wandelt die Werte die es bekommt sowieso in Long um, diese Umwandlungszeit sparst du dir.

Gruß
Reinhard

Sub pruefen()

Dim x As Integer
Dim y As Integer
Dim int_begin_x As Integer
Dim int_end_x As Integer
Dim int_begin_y As Integer
Dim int_end_y As Integer

'Variablen um den Bereich auszuwählen. (Hier bitte die
Werte der Anfangs und der Endposition für jede Koordinate
eintragen.):

'##########################################################################################
int_begin_x = 1
int_end_x = 2

int_begin_y = 1
int_end_y = 5

'##########################################################################################

For x = int_begin_x To int_end_x
For y = int_begin_y To int_end_y

If Cells(y, x).Value
klein-artur

Hallo Artur,
erstmal Danke für deine Antwort, Danke auch an Reinhard.
Es funktioniert so weit, das die Zelle mit dem Wert unter 1000
rot wird und die MsgBox meldet sich.
Es bleiben „Alte rote Zellen“.
Bei einem Wert über 1000 müsste die Zelle wieder weiss werden.
Gruß Skaletti!

Sub Warnung()
Dim x As Long
 Dim y As Long
 Dim int\_begin\_x As Long
 Dim int\_end\_x As Long
 Dim int\_begin\_y As Long
 Dim int\_end\_y As Long

 'Variablen um den Bereich auszuwählen. (Hier bitte die Werte der Anfangs und der Endposition für jede Koordinate eintragen.):
 int\_begin\_x = 8
 int\_end\_x = 8

 int\_begin\_y = 2
 int\_end\_y = 35

 For x = int\_begin\_x To int\_end\_x
 For y = int\_begin\_y To int\_end\_y

 If Cells(y, x).Value 

Ich möchte gerne das eine MsgBox als Warnung erscheint,
wen im Range H2:H35 ein Wert unter 1000 steht.
Zelle mit einem Wert unter 1000 wird farblich hinterlegt, ist
sonst weiß.
(Bedingte Formatierung).
Text MsgBox:
„Achtung! Bestand Rollenware unter 1 To.“
Wenn es geht mit rotem Warnkreuz.(vbCritical=richtig???)
Wenn die MsgBox geschlossen wurde, soll sie erst wieder
erscheinen wenn
ein weiterer Wert im Range H2:H35 unter 1000 auftritt.

Hallo Skaletti,

Public Sub Kopieren()
Dim Zei As Long
Workbooks("Bestand Rollenware\_Lager.xls").Sheets("Lager").Range("B2:I35").Copy
With Workbooks("Bestand Rollenware\_Einkauf.xls").Sheets("Einkauf")
 .Range("B2").PasteSpecial xlPasteValues
 Application.CutCopyMode = False
 .Range("H2:H35").Interior.ColorIndex = xlNone
 For Zei = 2 To 35
 If .Cells(Zei, 8).Value 

Gruß
Reinhard

Public Sub Kopieren()
Dim Zei As Long
Workbooks(„Bestand
Rollenware_Lager.xls“).Sheets(„Lager“).Range(„B2:I35“).Copy
With Workbooks(„Bestand
Rollenware_Einkauf.xls“).Sheets(„Einkauf“)
.Range(„B2“).PasteSpecial xlPasteValues
Application.CutCopyMode = False
.Range(„H2:H35“).Interior.ColorIndex = xlNone
For Zei = 2 To 35
If .Cells(Zei, 8).Value

Gruß
Reinhard

Hallo Reinhard,
ich muss dir erstmal wieder ein Kompliment wie schnell du
sowas hinkriegst.
Es funzt soweit, nur der Code läuft durch und sagt in jeder Zelle
ist der Wert unter 1000. Werden nicht rot wenn Wert über 1000.
Ist der Wert unter 1000 wird die Zelle Rot.
Ich muss den Ablauf unterbrechen.
Next Zei = Gelb

Gruß Skaletti!

Es funzt soweit, nur der Code läuft durch und sagt in jeder
Zelle
ist der Wert unter 1000. Werden nicht rot wenn Wert über 1000.
Ist der Wert unter 1000 wird die Zelle Rot.
Ich muss den Ablauf unterbrechen.

Hallo Skaletti,

okay, hatte ich einen kleinen Fehler drinnen:

Public Sub Kopieren()
Dim Zei As Long
Workbooks("Bestand Rollenware\_Lager.xls").Sheets("Lager").Range("B2:I35").Copy
With Workbooks("Bestand Rollenware\_Einkauf.xls").Sheets("Einkauf")
 .Range("B2").PasteSpecial xlPasteValues
 Application.CutCopyMode = False
 .Range("H2:H35").Interior.ColorIndex = xlNone
 For Zei = 2 To 35
 If .Cells(Zei, 8).Value 

Gruß
Reinhard

Hallo Reinhard,
es funzt bestens!
Vielen Dank, und schönes Wochenende.
Gruß Skaletti!

Dann machst du einfach in der If Abfrage einen else Block in dem du die Weiße farbe definierst. Würde ich jetzt so machen.

Sub Warnung()
Dim x As Long
 Dim y As Long
 Dim int\_begin\_x As Long
 Dim int\_end\_x As Long
 Dim int\_begin\_y As Long
 Dim int\_end\_y As Long

 'Variablen um den Bereich auszuwählen. (Hier bitte die Werte der Anfangs und der Endposition für jede Koordinate eintragen.):
 int\_begin\_x = 8
 int\_end\_x = 8

 int\_begin\_y = 2
 int\_end\_y = 35

 For x = int\_begin\_x To int\_end\_x
 For y = int\_begin\_y To int\_end\_y

 If Cells(y, x).Value Else
 Cells(y, x).Interior.Color = -4142
 End If
 Next y
 Next x

End Sub

Hier ist jetzt die Farbe „Transparent“ makiert. Die ID hab ich mir auch nur rausgegoogled.

Artur