Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
972to976
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
972to976
972to976
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

MsgBox erscheint 2 mal

MsgBox erscheint 2 mal
08.05.2008 06:37:00
Josef
Hallo!
Mit folgendem Code wird eine Userform aufgerufen. Wenn in der darin vorkommenden ListBox Werte eingelesen werden, dann öffnet sich die Userform mit diesen Werten. Sind keine Werte vorhanden dann wird die UserForm nicht geöffnet und die MsgBox wird eingeblendet.
Wenn jedoch die Userform geöffnet wurde, weird nach dem Schliessen der Userform die MsgBox ebenfalls eingeblendet. Das sollte jedoch nicht sein. wie kann ich bitte diesen Fehler umgehen?
Danke
Josef

Sub Start_CODE_SFLB()
On Error GoTo Weiter:
UserForm8.Show
Weiter:
'Unload UserForm8
MsgBox "Keine Subkapitelnummern zum Verarbeiten vorhanden."
End Sub


15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: MsgBox erscheint 2 mal
08.05.2008 06:47:59
Harald
Hallo Josef,
kannst Du das ein wenig entwirren?
"Mit folgendem Code wird eine Userform aufgerufen [hier also UserForm8?]. Wenn in der darin vorkommenden ListBox Werte eingelesen werden, dann öffnet sich die Userform [welche Userform meinst Du?]mit diesen Werten. Sind keine Werte vorhanden dann wird die UserForm [Welche?] nicht geöffnet und die MsgBox wird eingeblendet."
Dein Code
- ruft UserForm8 auf
- blendet die MsgBox ein
Der (entschuldige, alte Schule) "Spaghetticode" mit Goto hat gar keine Wirkung, denn nach der Zeile UserForm8.Show wird auf jeden Fall die MsgBox aufgerufen.
Ich würde das so angehen:
Prüfen, ob Werte vorhanden sind (wie, das weißt Du besser als ich)
Wenn ja, Userform anzeigen
wenn nein, Fehlermeldung anzeigen
Pseudocode:
If WerteVorhanden() Then
UserForm8.Show
Else
Msgbox "Fehlermeldung"
End if
Gruß Harald

Anzeige
AW: MsgBox erscheint in jedem Fall
08.05.2008 06:56:54
Erich
Hallo Josef,
"On error" hilft dir hier wohl nicht, das würde ich weglassen.
Entweder machst du das so wie Harald vorgeschlagen hat, oder:
Im Code der UserForm8 (vielleicht im Activate oder Initialize) stellst du fest, dass keine Daten vorhanden sind,
gibst dort die MsgBox aus und beendest.
Das hat den Vorteil, dass du die Daten für die ListbBox nicht zweimal gelesen werden müssen.
In der aufrufenden Routine steht dann nur noch eine Zeile: UserForm8.Show
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

AW: MsgBox erscheint in jedem Fall
08.05.2008 08:58:04
Josef
Hallo Harald! Hallo Erich!
Ich habe jetzt folgenden Code:

Private Sub UserForm_Initialize()
If UserForm8.ListBox4.Value = True Then
Call Josef
Else
MsgBox "Keine Subkapitelnummern zum Verarbeiten vorhanden."
Unload Me
End If
End Sub


Leider bekomme ich jetzt eine Fehlermeldung : Objektvariable oder Withvariable nicht festgelegt.
Josef

Anzeige
AW: MsgBox erscheint in jedem Fall
08.05.2008 09:48:00
Erich
Hallo Josef,
in welcher Codezeile tritt der Fehler auf?
Wird dann ein Wort im Code markiert?
Was meinst du mit UserForm8.ListBox4.Value? Nach der VBA-Hilfe ist das:
"Der Wert in der BoundColumn-Eigenschaft der momentan ausgewählten Zeilen."
Kann das True sein?
Woher bekommt die ListBox4 ihre Einträge? Ist eine RowSource zugewiesen?
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

AW: MsgBox erscheint in jedem Fall
08.05.2008 09:58:59
Josef
Hallo Erich!
Die Werte werden über diesen Code in die Userform eingelesen:

Private Sub Josef()
Dim bereich As Range
Dim rng As Range
Dim wks As Worksheet
Set wks = Workbooks("Masterfile.xls").Worksheets("Tabelle1")
Sheets("Tabelle1").Activate
ListBox4.Visible = True
ListBox4.Clear
With wks
Set bereich = .Range("H2:H" & .Range("H65536").End(xlUp).Row)
End With
For Each rng In bereich
If rng.Offset(0, 25) = "" Then
ComboBox2.AddItem
ComboBox2.List(ComboBox2.ListCount - 1) = rng
End If
Next 'rng
'ComboBox2.ListIndex = 0
Dim Bereich2 As Range
Dim rng1 As Range
ListBox4.Clear
With wks
Set Bereich2 = .Range("H2:H" & .Range("H65536").End(xlUp).Row)
End With
For Each rng1 In Bereich2
If rng1.Offset(0, 25) = "" Then
ListBox4.AddItem ComboBox2
ListBox4.List(ListBox4.ListCount - 1) = rng1
End If
Next 'rng
ListBox4.ListIndex = 0
Exit Sub
End Sub


Josef

Anzeige
AW: MsgBox erscheint in jedem Fall
08.05.2008 15:46:05
Erich
Hallo Josef,
meine letzte Frage (Datenherkunft der Listbox) hast du mit dem Code beantwortet.
Magst du auch meine anderen Fragen noch beantworten?
Im Code ist mir aufgefallen, dass "ComboBox2" in der Zeile
ListBox4.AddItem ComboBox2
wohl kaum etwas zu suchen hat.
Ist das vielleicht die fehlerhafte Zeile?
Probier jedenfalls mal im VBA-Menü: Debuggen - Kompilieren von (VBAProject oder was anderes)
Da zeigen sich schon manche Fehler, BEVOR der Code gestartet wird.
Noch was: In "Jürgen" wird die ListBox4 gefüllt.
In "UserForm_Initialize" fragst du aber schon den Zustand von Listbox4 irgendwie ab,
bevor "Jürgen" überhaupt gelaufen ist. Das scheint mir nicht sinnvoll zu sein.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: MsgBox erscheint in jedem Fall
09.05.2008 09:04:00
Josef
Hallo Erich!
Zu
in welcher Codezeile tritt der Fehler auf.
wird dann ein Wert im Code markiert.
Nein es wird kein Code markiert. Es erscheint nur die Fehlermeldung "Objektvariable oder Withvariable nicht festgelegt.
Zu Was meinst Du mit Userform8.ListBox4.........
Da hatte ich nur einen Testversuch gestartet. Ist aber nichts dabei rausgekommen.
Zu
Im Code ist mir aufgefallen, dass "ComboBox2" in der Zeile
ListBox4.AddItem ComboBox2
wohl kaum etwas zu suchen hat.
Ist das vielleicht die fehlerhafte Zeile?
Der Code in den ComboBox2 vorkommt. ist eigentlich nicht fehlerhaft. Es wird auch kein fehlerhadfte Zeile angezeigt.
Zu
Noch was: In "Jürgen" wird die ListBox4 gefüllt.
Ich finde den Wert "Jürgen" in meinem Code leider nicht.
Ich wollte eigentlich nur eines erreichen.
1.) Sind in der Tabelle1 in der Spalte H Werte zum einlesen vorhanden wird die Userform geöffnet und diese Werte erscheinen in der ListBox.
2.) Sind in der Tabelle1 in der Spalte H keine Werte zum Einlesen vorhanden dann wird die Userform nicht geöffnet.
Das einzige was ich nicht schaffe ist, dass wenn die UserForm nicht geöffnet wird, die MSGBox Meldung erscheinen soll.
Josef

Anzeige
AW: MsgBox erscheint in jedem Fall
09.05.2008 10:26:36
Erich
Hallo Josef,
vieles an deinem Code kann ich nicht so recht nachvollziehen.
Beim Namen der Routine hatte ich mich vertan: Sie heißt nicht "Jürgen", sondern "Josef".
Was ich dazu gesagt habe, stimmt aber weiterhin...
Die Zeile
ListBox4.AddItem ComboBox2
kann syntaktisch richtig sein, aber ist "ComboBox2" da irgendwie sinnvoll?
Was soll das neue Item beinhalten? In der nächsten Zeile belegst du es mit einem Wert:
ListBox4.List(ListBox4.ListCount - 1) = rng1
Hier hat "ComboBox2" wohl wirklich nichts zu suchen.
Versuchs mal (ganz ohne "Josef") damit:

Private Sub UserForm_Initialize()
Dim bereich As Range
Dim rng As Range
With Worksheets("Tabelle1")
.Activate ' ist das nötig?
ListBox4.Visible = True
ListBox4.Clear
ComboBox2.Clear
Set bereich = .Range(.Cells(2, 8), .Cells(.Cells(.Rows.Count).End(xlUp).Row), 8)
For Each rng In bereich
If rng.Offset(0, 25) = "" Then
ListBox4.AddItem rng
ComboBox2.AddItem rng
End If
Next rng
ListBox4.ListIndex = 0
End With
End Sub


Und die UF kannst du - bedingt - so aufrufen:


Sub Start_CODE_SFLB()
With Worksheets("Tabelle1")
If WorksheetFunction.CountA( _
.Range(.Cells(2, 8), .Cells(.Cells(.Rows.Count).End(xlUp).Row), 8)) > 0 Then
UserForm8.Show
Else
MsgBox "Keine Subkapitelnummern zum Verarbeiten vorhanden."
End If
End Sub

Das ist natürlich ungetestet - ich habe deine Umgebung nicht nachgebaut.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: MsgBox erscheint in jedem Fall
09.05.2008 10:55:52
Josef
Hallo Erich!
Habe jetzt alles umgebaut und einen Testversuch gemacht.
Beim Aufrufen der UF bekomme ich die Fehlermeldung :
"Falsche Anzahl an Argumenten oder ungültige Zuweisung zu einer Eigenschaft
und die Zeile
Set bereich = .Range(.Cells(2, 8), .Cells(.Cells(.Rows.Count).End(xlUp).Row), 8)
wird gelb markiert.
Josef

AW: MsgBox erscheint in jedem Fall
09.05.2008 13:13:00
Erich
Hi Josef,
ja, da ist ein Schreibfehler drin, sorry!
Versuch mal
Set bereich = .Range(.Cells(2, 8), .Cells(.Cells(.Rows.Count).End(xlUp).Row, 8))
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: MsgBox erscheint in jedem Fall
09.05.2008 15:53:27
Josef
Hallo Erich!
Bin jetzt schon zu Hause. Werde mich am Dienstag wieder melden.
Josef

AW: MsgBox erscheint in jedem Fall
13.05.2008 05:59:00
Josef
Hallo Erich!
Habe jetzt den Code getestet und bekomme hier einen Fehler:
If WorksheetFunction.CountA( _
.Range(.Cells(2, 8), .Cells(.Cells(.Rows.Count).End(xlUp).Row), 8)) > 0 Then
Falsche Anzahl an Argumenten oder ungültige Zuweisung zu einer Eigenschaft
Josef

AW: MsgBox erscheint in jedem Fall
13.05.2008 06:52:00
Erich
Hi Josef,
das ist eben der Nachteil, wenn man ohne Beispielmappe arbeitet.
Ich hatte oben geschrieben: "Das ist natürlich ungetestet - ich habe deine Umgebung nicht nachgebaut."
Nun also nochmal sorry! Hier eine neue Version:

'Die UF kannst du - bedingt - so aufrufen:
Sub Start_CODE_SFLB()
Dim bereich As Range
With Worksheets("Tabelle1")
Set bereich = .Range(.Cells(2, 8), _
.Cells(.Cells(.Rows.Count, 8).End(xlUp).Row, 8))
If WorksheetFunction.CountA(bereich) > 0 Then
UserForm8.Show
Else
MsgBox "Keine Subkapitelnummern zum Verarbeiten vorhanden."
End If
End With
End Sub
' Statt Initalize würde ich das Activate-Ereignis nutzen:
Private Sub UserForm_Activate()
Dim bereich As Range, rng As Range
With Worksheets("Tabelle1")
'     .Activate               ' vermutlich überflüssig
ListBox4.Visible = True
ListBox4.Clear
ComboBox2.Clear
Set bereich = .Range(.Cells(2, 8), _
.Cells(.Cells(.Rows.Count, 8).End(xlUp).Row, 8))
For Each rng In bereich
If rng.Offset(0, 25) = "" Then
ListBox4.AddItem rng
ComboBox2.AddItem rng
End If
Next rng
ListBox4.ListIndex = 0
End With
End Sub

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: MsgBox erscheint in jedem Fall
13.05.2008 13:55:00
Josef
Hallo Erich!
Ich beomme jetzt folgenden Fehler:
Eigenschaft ListIndex konnte bnicht gesetzt werden. Ungültiger Eigenschaftswert.
Ich habe jetzt aber eine kleine Mustermappe geschnitzt.
https://www.herber.de/bbs/user/52312.xls
Josef

AW: UserForm bedingt aufrufen
13.05.2008 15:52:57
Erich
Hi Josef,
die Beispielmape half sofort! Probier mal

Option Explicit
Sub Start_CODE_SFLB()
Dim bereich As Range
With Worksheets("Tabelle1")
Set bereich = .Range(.Cells(2, 8), _
.Cells(.Cells(.Rows.Count, 8).End(xlUp).Row, 8))
If WorksheetFunction.CountA(bereich.Offset(0, 25)) 

Dann ist sicher, dass Listbox4 mindestens einen Eintrag bekommt - und der ListIndex kann gesetzt werden.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige