VBA Wenn eine Zelle mehrerer Spalten leer dann msgbox?
Hallo zusammen,
ich habe vor in mehreren Spalten zu kontrollieren, ob sich eine leere Zelle befindet. Wenn ja soll eine Msgbox angezeigt werdne und der Sub soll beendet werden. Wenn nicht soll er fortfahren. Allerdings kommt es bei mir zu einer Fehlermeldung "Typen unverträglich". Wo hat sich der Fehler eingeschlichen? End If befindet sich weiter unten.
Sub SendMeetingRequest_2()
Dim Bereich As Range
Set Bereich = Range("F2:H41", "B2:B41") 'Zellbereich
With Application.WorksheetFunction
Dim objOL As Object 'As Outlook.Application
Dim objAppt As Object 'As Outlook.AppointmentItem
'Const olAppointmentItem = 1
Const olMeeting = 1
Dim ReminderTime As Long
Dim lfdnr As Integer
lfdnr = 2
'Überprüfung erstellen falls Aufgaben leer sind
'lfdnr = 4
If Bereich.Value = "" Then
MsgBox "Bitte fehlende Daten eintragen"
Call Leere_zellen_hervorheben
Exit Sub
Else
Danke für eure Hilfe!
2 Antworten
Hallo,
es fehlt ein "End With" ist mir grade aufgefallen.
ich kann gern nochmal nachschauen ob ich noch was finde. (denke aber da wird Suboptimierer schon schneller gewesen sein ;) )
Gruß
Dennis
achso meiner Meinung nach solltest du erstmal die Programmstukur in griff griegen. Denn sowas mit dem end with kommt eigentlich gleich nach dem With. Sprich: With Range("A1") bla bla end with. Aber dies ist nur ein Tipp :)
an deiner Stelle würde ich auch eine Schleife machen, wenn Du den Anwender dazu "zwingen" möchtest, dass er alles ausfüllt.
das heißt: Eine schleife die in einem Bereich (z.b.Range("A:C")) JEDE Zelle durläuft und schaut ob diese leer oder befüllt ist. wenn diese NICHT befüllt ist kommt eine meldung und und und. danach weiter lesen bis man an der letzten Zelle ist.
hat 2 Vorteile:
1. Die Programm übersicht ist besser.(falls da jemand nach ein oder zwei jahren nochmal ran muss)
2. du gehst sicher das ALLE Zellen befüllt sind.
hinzu kommt das du noch eine extra Sub brauchst mit einer weiteren Schleife die im hintergrund ausgeführt wird und wartet, bis der Anwender in dieser Zelle was eingegeben hat. Dann geht es weiter.
Du kannst mit dem Debugger Schritt für Schritt bis zu der Fehlerzeile debuggen. Hast du das schon gemacht?
Mir fällt nichts Ungewöhnliches auf, außer dass ich leere Klammern hinter
"Call Leere_zellen_hervorheben" setzen würde.
Das With ergibt in der Sub keinen Sinn. Kannste meine ich streichen. Ich würde sowieso auf With-Anweisungen verzeichten. Besser, du definierst dir kurze, knackige Variablen.
Ja das habe ich schon. Er schlägt dann Alarm bei der Zeile mit "If Bereich.Value = "" Then" mit der Fehlermeldung Typen unverträglich
Dann weiß er nicht, wie er den Vergleich auf mehrere Zellen anwenden soll, beziehungsweise Bereich.Value ist schon nicht eindeutig.
Du kannst die Application.WorksheetFunctions verwenden, z. B. CountBlank oder andere Count-Funktionen.
https://docs.microsoft.com/de-de/office/vba/api/excel.worksheetfunction.countblank
Oder du gehst den Bereich zufuß durch:
Dim Zelle As Range
For Each Zelle in Bereich
If Zelle.Value = "" Then
...
Exit For
End If
Next
Ich kann auch nicht immer zugegen sein. ;) Das wird sicherlich nicht die letzte Excelfrage gewesen sein.
Das Ent With steht weiter unten im Code. Ich habe nicht den ganzen Code angefügt, nur den eigentlich relevanten Teil.