Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1368to1372
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
Inhaltsverzeichnis

UserFormInitialize und UserForm_Activate

UserForm_Initialize und UserForm_Activate
06.07.2014 23:46:11
Christian

Hallo Helfer,
das Thema ist ja schon oft behandelt worden, nur finde ich nicht die passende Lösung.
Dazu habe ich mal eine eher allgemeine Frage.
Ausgangslage:
Userform mit Listbox, 6 Spalten.
Die Daten für die Listbox werden aus verschieden Tabellblättern nach mehren Bedingungen ausgelesen, in ein Tabellenblatt zwischengeschrieben und sortiert und dann in die Listbox geladen. Dass kann bis zu zehn Sekunden dauern, je nach Anzahl der Daten in den verschiedenen Tabellenblättern.
Um jetzt keinen "leeren" Userform anzuzeigen, hatte ich ich den Code erst im UserForm_Initialize Ereignis laufen lassen. Was natürlich nicht optimal war, da ja auch das Unload das UserForm_Initialize wieder aufruft. Also habe ich den Code ins UserForm_Activate geschrieben, was natürlich dann wieder einen "leeren" Userform anzeigt, wenn dieser aufgerufen wird.
Wie kann man diesen "leeren" Userform bei Laden vermeiden? Ist ja nur ne Optische Sache, aber stört halt ein wenig.
Zur Zeit "umgehe" ich die "leere" Anzeige wie folgt:

Private Sub UserForm_Activate()
Dim x As Long
x = x + 1
If x = 1 Then
UserForm2.Show vbModeless
DoEvents
Call Werte_in_Listbox
UserForm2.Hide
End If
End Sub
In der UserForm2 steht nur ein Text.
Da dass ganze ja nicht professioniell ist, meine zwei Fragen:
Warum funktioniert das ohne das x nicht? (zumindest bei mir bleibt das UF2 bis zum Abwinken da und es passiert nichts)
Wie löst man so etwas auf die richtige Art und Weise ohne die komische Anfängerbastelei?
Für Eure Antworten bedanke ich mich im Voraus!
MfG Christian

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: UserForm_Initialize und UserForm_Activate
07.07.2014 08:35:33
Nepumuk
Hallo,
das Initialize-Event wird durch die Unload-Methode doch nur dann aufgerufen, wenn das Userform nicht geladen ist. Das machst du doch nur im Userform selbst und nicht irgendwo auf Verdacht. Oder ?
Gruß
Nepumuk

AW: UserForm_Initialize und UserForm_Activate
07.07.2014 15:10:24
Christian
Hallo Nepumik,
also das Userform(ufmatlieferanten) rufe ich aus einer Userform(ufmatbuchen) auf.
Habe jetzt den Code für die ListBox1 in ufmatlieferanten ins Initialize geschrieben.
Soweit, so gut.
Wenn ich aber per Button zurück ins ufmatbuchen will, dann läuft das Initialize nochmal ab,
aber wenn ich ufmatlieferanten per Kreuz schließe, dann nicht. Das verstehe ich nicht.
An was kann dass liegen, was ist die Ursache und wie kann man dass lösen?
Für Antworten sage ich schon mal Danke!
Der Code zum Schließen/zurück zu ufmatbuchen:
Private Sub CommandButton2_Click()
'# zurück zu Buchung #
Unload Me
ufmatlieferanten.Hide
End Sub
Der Code zum Aufrufen ufmatlieferanten aus ufmatbuchen:
Private Sub CommandButton12_Click()
'# Übersicht Lieferanten anzeigen #
UserForm2.Show vbModeless
DoEvents
Load ufmatlieferanten
UserForm2.Hide
ufmatlieferanten.Show
End Sub
Und das Initialize des ufmatlieferanten:
Private Sub UserForm_Initialize()
'############################################################################################### _
'# Tabellenblätter setzen; Werte aus letzter Rechnung,Kalkulation und Buchung in Tabelle Sort;  _
Listbox1 füllen #
'############################################################################################### _
Set wksKalk = ActiveWorkbook.Worksheets("Kalkulation")
Set wksMatbuch = ActiveWorkbook.Worksheets("Materialbuchung")
Set wksSort = ActiveWorkbook.Worksheets("Sortierblatt")
Set wksLvz = ActiveWorkbook.Worksheets("LVZ")
wksSort.Range("A1:F3750").ClearContents
'#### Händler/Lieferanten aus Tabelle Kalkulation und Tabelle Buchung auslesen,
'#### ins Tabellenblatt Sortierung schreiben, doppelte Händler/Lieferanten entfernen
'Application.ScreenUpdating = False
Dim ispalteK As Long, izeileK As Long, zeilekalk As Long, zeilesort As Long, letztesort As Long
Dim zeilebuch As Long, letztebuch As Long, zeilesortb As Long
zeilekalk = wksKalk.Cells(Rows.Count, 15).End(xlUp).Row
letztebuch = wksMatbuch.Cells(Rows.Count, 10).End(xlUp).Row
For izeileK = 20 To zeilekalk
If wksKalk.Cells(izeileK, 15) <> "" Then
If WorksheetFunction.CountIf(wksKalk.Range(wksKalk.Cells(20, 15), wksKalk.Cells(izeileK, 15)), _
_
wksKalk.Cells(izeileK, 15).Value) = 1 And wksKalk.Cells(izeileK, 15) <> "Händler" _
And wksKalk.Cells(izeileK + 1, 15) <> "Hä _
ndler" Then
zeilesort = zeilesort + 1
wksSort.Cells(zeilesort, 1) = wksKalk.Cells(izeileK, 15)
End If
End If
Next izeileK
letztesort = wksSort.Cells(Rows.Count, 1).End(xlUp).Row
zeilesortb = letztesort
For zeilebuch = 17 To letztebuch
If wksMatbuch.Cells(zeilebuch, 10) <> "" Then
If WorksheetFunction.CountIf(wksMatbuch.Range(wksMatbuch.Cells(17, 10), wksMatbuch.Cells( _
zeilebuch, 10)), _
wksMatbuch.Cells(zeilebuch, 10). _
Value) = 1 Then
zeilesortb = zeilesortb + 1
wksSort.Cells(zeilesortb, 1) = wksMatbuch.Cells(zeilebuch, 10)
End If
End If
Next zeilebuch
wksSort.Columns(1).RemoveDuplicates Columns:=1, Header:=xlNo
Dim zkalk1 As Long, zpos1 As Long, endekalk1 As Long, summemat1 As Double, anfangpos1 As Long,  _
_
endepos1 As Long, endesort1 As Long, xsort1 As Long
endekalk1 = wksKalk.Cells(Rows.Count, 1).End(xlUp).Row
endesort1 = wksSort.Cells(Rows.Count, 1).End(xlUp).Row
For xsort1 = 1 To endesort1
summemat1 = 0
For zkalk1 = 20 To endekalk1
If wksKalk.Cells(zkalk1, 1) <> "" Then
Select Case wksKalk.Cells(zkalk1, 1)
Case "POS"
anfangpos1 = zkalk1
endepos1 = zkalk1 + 15
For zpos1 = zkalk1 To endepos1
If wksKalk.Cells(anfangpos1, 15) = wksSort.Cells(xsort1, 1) Then
summemat1 = summemat1 + (wksKalk.Cells(anfangpos1, 20) * wksKalk.Cells(anfangpos1, 21))
End If
anfangpos1 = anfangpos1 + 1
Next zpos1
Case "UP"
If Application.Index(wksLvz.Columns(17), Application.Match(Left(wksKalk.Cells(zkalk1, 2), _
InStr(wksKalk.Cells(zkalk1, 2), "/") - 1), wksLvz.Columns(18), 0)) = "HP"  _
Then
anfangpos1 = zkalk1
endepos1 = zkalk1 + 15
For zpos1 = zkalk1 To endepos1
If wksKalk.Cells(anfangpos1, 15) = wksSort.Cells(xsort1, 1) Then
summemat1 = summemat1 + (wksKalk.Cells(anfangpos1, 20) * wksKalk.Cells(anfangpos1, 21))
End If
anfangpos1 = anfangpos1 + 1
Next zpos1
End If
End Select
End If
Next zkalk1
wksSort.Cells(xsort1, 2) = VBA.Round(summemat1, 2)
Next xsort1
'#### abgerechnetes Material für Händler/Lieferanten in letzter Rechnung ermitteln
'#### Mengen ins Tabellenblatt Sortierung schreiben, Differenzen zur Kalkulation/Buchung/ _
Abrechnung berechnen
'### Tabellenblatt letzte Rechnung ermitteln
Dim anztabl As Long, zaehlerAr As Long, zaehlerSR As Long, tabrng As String
For anztabl = 1 To Sheets.Count
If Right(Sheets(anztabl).Name, 2) = "AR" Then
zaehlerAr = zaehlerAr + 1
End If
If Right(Sheets(anztabl).Name, 2) = "SR" Then
zaehlerSR = zaehlerSR + 1
End If
Next anztabl
'### Tabellennamen letzte Rechnung setzen
If zaehlerSR = 1 Then
tabrng = "SR"
Else
tabrng = zaehlerAr - 1 & ". AR"
End If
If zaehlerSR = 1 Or zaehlerAr > 1 Then
Set wksletzteAR = ActiveWorkbook.Worksheets(tabrng)
End If
Dim zkalk2 As Long, zpos2 As Long, endekalk2 As Long, summemat2 As Double, anfangpos2 As Long,  _
_
endepos2 As Long, endesort2 As Long, xsort2 As Long, zeilear2 As Long
endekalk2 = wksKalk.Cells(Rows.Count, 1).End(xlUp).Row
endesort2 = wksSort.Cells(Rows.Count, 1).End(xlUp).Row
For xsort2 = 1 To endesort2
If zaehlerSR = 1 Or zaehlerAr > 1 Then
summemat2 = 0
For zkalk2 = 20 To endekalk2
If wksKalk.Cells(zkalk2, 1) <> "" Then
Select Case wksKalk.Cells(zkalk2, 1)
Case "POS"
If IsNumeric(Application.Match(wksKalk.Cells(zkalk2, 2), wksletzteAR.Columns(2), 0)) Then
zeilear2 = Application.Match(wksKalk.Cells(zkalk2, 2), wksletzteAR.Columns(2), 0)
anfangpos2 = zkalk2
endepos2 = zkalk2 + 15
For zpos2 = zkalk2 To endepos2
If wksKalk.Cells(anfangpos2, 15) = wksSort.Cells(xsort2, 1) Then
summemat2 = summemat2 + (wksKalk.Cells(anfangpos2, 19) * wksKalk.Cells(anfangpos2, 21)  _
* wksletzteAR.Cells(zeilear2, 4))
End If
anfangpos2 = anfangpos2 + 1
Next zpos2
End If
Case "UP"
If IsNumeric(Application.Match(Left(wksKalk.Cells(zkalk2, 2), _
InStr(wksKalk.Cells(zkalk2, 2), "/") - 1), wksletzteAR.Columns(2), 0))  _
Then
anfangpos2 = zkalk2
endepos2 = zkalk2 + 15
For zpos2 = zkalk2 To endepos2
If wksKalk.Cells(anfangpos2, 15) = wksSort.Cells(xsort2, 1) Then
summemat2 = summemat2 + (wksKalk.Cells(anfangpos2, 20) * wksKalk.Cells(anfangpos2, 21))
End If
anfangpos2 = anfangpos2 + 1
Next zpos2
End If
End Select
End If
Next zkalk2
Else
summemat2 = 0
End If
wksSort.Cells(xsort2, 3) = VBA.Round(summemat2, 2)
wksSort.Cells(xsort2, 4) = VBA.Round(wksSort.Cells(xsort2, 2) - summemat2, 2)
wksSort.Cells(xsort2, 5) = WorksheetFunction.SumIf(wksMatbuch.Columns(10), wksSort.Cells( _
xsort2, 1), wksMatbuch.Columns(6))
wksSort.Cells(xsort2, 6) = VBA.Round(summemat2, 2) - WorksheetFunction.SumIf(wksMatbuch. _
Columns(10), _
wksSort.Cells(xsort2, 1), wksMatbuch.Columns(6))
Next xsort2
'Application.ScreenUpdating = True
'#### Listbox1 mit Werten aus Tabellenblat Sortierung füllen
letztesort = wksSort.Cells(Rows.Count, 1).End(xlUp).Row
Dim arr() As Variant
Dim iRow As Long, irowU As Long
Me.ListBox1.Clear
If letztesort > 0 Then
For iRow = 1 To letztesort
If wksSort.Cells(iRow, 1) <> "" Then
ReDim Preserve arr(0 To 5, 0 To irowU)
arr(0, irowU) = wksSort.Cells(iRow, 1)
arr(1, irowU) = String(11 - Len(Format(wksSort.Cells(iRow, 2), "##,##0.00")), " ") & Format( _
wksSort.Cells(iRow, 2), "##,##0.00")
arr(2, irowU) = String(11 - Len(Format(wksSort.Cells(iRow, 3), "##,##0.00")), " ") & Format( _
wksSort.Cells(iRow, 3), "##,##0.00")
arr(3, irowU) = String(11 - Len(Format(wksSort.Cells(iRow, 4), "##,##0.00")), " ") & Format( _
wksSort.Cells(iRow, 4), "##,##0.00")
arr(4, irowU) = String(11 - Len(Format(wksSort.Cells(iRow, 5), "##,##0.00")), " ") & Format( _
wksSort.Cells(iRow, 5), "##,##0.00")
arr(5, irowU) = String(11 - Len(Format(wksSort.Cells(iRow, 6), "##,##0.00")), " ") & Format( _
wksSort.Cells(iRow, 6), "##,##0.00")
irowU = irowU + 1
End If
Next iRow
Me.ListBox1.Column = arr
End If
wksSort.Range("A1:F3750").ClearContents
End Sub
Ich steige nicht dahinter, warum dass mit dem Unload nicht so klappt.
MfG Christian

Anzeige
fehler gefunden.....
07.07.2014 15:32:29
Christian
Hallo,
natürlich muss das .Hide vor dem Unload kommen...
grrrrr....
Private Sub CommandButton2_Click()
'# zurück zu Buchung #
ufmatlieferanten.Hide
Unload Me
End Sub
MfG Christian

80 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige