Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Per VBA: Wenn Zwei Bedingungen erfüllt, dann...

Forumthread: Per VBA: Wenn Zwei Bedingungen erfüllt, dann...

Per VBA: Wenn Zwei Bedingungen erfüllt, dann...
19.04.2004 23:00:15
Rainer
Hi,
ich möchte, wenn eine Zahl im Bereich C53:AC53 eingeben wird und in B53 noch keine Zahl steht, eine MsgBox erscheint.
For Each c In Worksheets("Montag").Range("C53:AC53")
If c <> "" And Cells("B53") = "" Then
MsgBox "Es wurde noch kein Preis für " & Cells("A53") & " eingegeben."
End If
Dieser Code bringt aber die Fehlermeldung
Laufzeitfehler 13: Typen unverträglich.
Was mach ich falsch?
Gruß Rainer
Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Per VBA: Wenn Zwei Bedingungen erfüllt, dann...
19.04.2004 23:19:37
K.Rola
Hallo,
Option Explicit

Sub leer()
Dim c As Range
If Worksheets("Montag").[B53] <> "" Then
For Each c In Worksheets("Montag").Range("C53:AC53")
If c = "" Then
MsgBox "Es wurde noch kein Preis in " & c.Address(0, 0) & " eingegeben."
Exit For
End If
Next
End If
End Sub

Gruß K.Rola
Anzeige
Beantwortet die Frage nicht
19.04.2004 23:25:54
Jörg Gradert
Hallo K.Rola,
die Frage war "Was mach ich falsch".
Gruss Jörg
Hallo Rainer,
Cells(Rowindex, Columnindex)
also statt Cells("A53") Cells(53,1) statt Cells("B53") Cells(53,2)
Gruss Jörg
AW: Beantwortet die Frage nicht
19.04.2004 23:31:56
K.Rola
Hallo,
das meinst du jetzt aber nicht ganz ernst, oder?
Wenn doch, dann überleg, was da noch so falsch ist, da ist es
einfacher, eine Alternative anzubieten.
Gruß K.Rola
Anzeige
AW: Beantwortet die Frage nicht
19.04.2004 23:36:58
Beni
Hallo Rainer,
füge diesen Code in das Tabellenmodul ein.
Gruss Beni

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Range("C53:AC53"), Target) Is Nothing Then
If Cells(53, 2) = "" Then
MsgBox "Es wurde noch kein Preis für " & Cells(53, 1) & " eingegeben."
End If
End If
End Sub

Anzeige
AW: Ich würde es aber so machen...
19.04.2004 23:43:11
FP
Hallo Beni,
... denn Rainer wird doch sicher nicht nur in Zeile 53 Artikeldaten eingeben wollen, oder ???
Ich glaube sein Aufbau sieht so aus:
A - Artikelbezeichnung
B - Preis
C bis AC diverse Artikeldaten

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
With Target
If .Column > 2 And .Column < 30 Then
If Cells(.Row, 2) = "" Then
MsgBox "Es wurde noch kein Preis für " & Cells(.Row, 1) & " eingegeben!"
Cells(.Row, 2).Select
End If
End If
End With
End Sub

Servus aus dem Salzkammergut
Franz
Anzeige
War als Hinweis für den Lernenden gedacht
19.04.2004 23:51:51
Jörg Gradert
Hallo K.Rola,
ich habe lediglich versucht mich in die Lage des Lernenden zu versetzen, der auch gern wissen will, warum sein Code einen Fehler auswirft.
Deine Alternative ist sicherlich gut, mir schien es nur zu schwer für Level VBA nein, zu erkennen, was die Ursache für die genannte Fehlermeldung war, das wollte ich herausstellen. War nicht böse gemeint, ich schätze deine Lösungen und lerne selbst daraus.
Gruss Jörg

Anzeige
AW: War als Hinweis für den Lernenden gedacht
20.04.2004 00:22:27
K.Rola
Hallo,
ja ok, so gesehen hast du natürlich Recht, nur, wie weit soll man da
gehen? Soll man übersehen, dass keine Variablen deklariert sind, oder
sind sie ja vielleicht deklariert, nur nicht mitgepostet? Oder wie
im konkreten Fall, soll man übersehen, dass er alle Zellen abfragt,
obwohl er schon bei der ersten leeren Zelle aussteigen müsste?
Gruß K.Rola
Anzeige
Danke für neue Lösung m. T.
20.04.2004 09:49:13
Rainer
Hallo K.Rola,
habe Deinen Code probiert. Haut hin, danke. Habe nur [B53] <> "" ändern müssen in [B53] = ""
Danke
Gruß Rainer
Danke an alle, m. T.
20.04.2004 09:55:31
Rainer
Hallo,
danke für die rasche Hilfe. Habe alle Lösungen probiert und an meine Bedürfnisse angepasst. Mit jeder Lösung komme ich zum Ziel. Habe viel dazu gelernt. Dafür möchte ich mich bedanken.
Gruß Rainer
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige

Infobox / Tutorial

VBA: Bedingungen in Excel prüfen und MsgBox anzeigen


Schritt-für-Schritt-Anleitung

Um in Excel VBA eine MsgBox anzuzeigen, wenn zwei Bedingungen erfüllt sind, kannst du den folgenden Code verwenden. Dieser überprüft, ob in einem bestimmten Bereich (C53:AC53) eine Zahl eingegeben wird und ob in B53 noch keine Zahl steht.

  1. Öffne das Excel-Dokument und gehe zu dem Arbeitsblatt, in dem du den Code verwenden möchtest.
  2. Drücke ALT + F11, um den VBA-Editor zu öffnen.
  3. Füge den folgenden Code in das Modul für das Arbeitsblatt ein:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Range("C53:AC53"), Target) Is Nothing Then
        If Cells(53, 2) = "" Then
            MsgBox "Es wurde noch kein Preis für " & Cells(53, 1) & " eingegeben."
        End If
    End If
End Sub
  1. Schließe den VBA-Editor und gehe zurück zu deinem Excel-Blatt.
  2. Teste den Code, indem du eine Zahl im Bereich C53:AC53 eingibst und sicherstellst, dass B53 leer bleibt.

Häufige Fehler und Lösungen

  • Laufzeitfehler 13: Typen unverträglich: Dieser Fehler tritt auf, wenn du versuchst, unterschiedliche Datentypen miteinander zu vergleichen. Stelle sicher, dass du beim Vergleich in Cells(53, 2) keinen Text mit einer Zahl vergleichst.

  • MsgBox erscheint nicht: Überprüfe, ob der Code im richtigen Arbeitsblattmodul eingefügt wurde und dass die Range korrekt angegeben ist.

  • Keine Reaktion auf Änderungen: Der Code wird nur aktiv, wenn eine Änderung im definierten Bereich erfolgt. Achte darauf, dass du in C53:AC53 Änderungen vornimmst.


Alternative Methoden

Es gibt verschiedene Wege, um in Excel VBA mit mehreren Bedingungen zu arbeiten. Eine alternative Methode ist die Verwendung von If...ElseIf-Strukturen, um komplexere Logik zu implementieren.

Beispiel:

If Cells(53, 2) = "" Then
    If Application.WorksheetFunction.CountA(Range("C53:AC53")) > 0 Then
        MsgBox "Es wurde noch kein Preis für " & Cells(53, 1) & " eingegeben."
    End If
End If

Diese Methode ermöglicht es dir, zusätzliche Bedingungen hinzuzufügen, falls nötig.


Praktische Beispiele

Hier sind einige Szenarien, in denen du den VBA-Code anpassen kannst:

  1. Mehrere Zeilen überwachen: Ändere den Code so, dass er auch andere Zeilen (z.B. 54, 55) überwacht, indem du die Schleife For Each verwendest.

  2. Zusätzliche Bedingungen: Du kannst weitere Bedingungen hinzufügen, um die MsgBox nur unter bestimmten Umständen anzuzeigen.

If Cells(.Row, 2) = "" And Target.Value > 0 Then
    MsgBox "Es wurde noch kein Preis für " & Cells(.Row, 1) & " eingegeben!"
End If

Tipps für Profis

  • Variablen deklarieren: Nutze Option Explicit am Anfang deines Moduls, um sicherzustellen, dass du alle Variablen deklarierst. Dies reduziert Fehler und verbessert die Lesbarkeit deines Codes.

  • Fehlerbehandlung: Implementiere Fehlerbehandlung, um mit unerwarteten Situationen umzugehen. Dies kann durch On Error Resume Next oder On Error GoTo erreicht werden.

  • Code optimieren: Vermeide überflüssige Berechnungen, indem du den Code so schreibst, dass er nur dann ausgeführt wird, wenn es nötig ist.


FAQ: Häufige Fragen

1. Wie kann ich den Code für mehrere Spalten anpassen? Du kannst die Range in der Intersect-Funktion erweitern, um mehrere Spalten zu überwachen. Zum Beispiel Range("C53:Z53").

2. Was tun, wenn die MsgBox immer erscheint? Überprüfe die Bedingungen in deinem Code. Stelle sicher, dass die Zellen korrekt referenziert sind und die Logik stimmt. Achte darauf, dass Cells(53, 2) wirklich leer ist.

3. Wie kann ich den Code für andere Arbeitsblätter verwenden? Du musst den Code in das entsprechende Arbeitsblattmodul kopieren und sicherstellen, dass die Bereichsangaben an das neue Arbeitsblatt angepasst sind.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige