Hide <-> Unload

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
Frame
Bild

Betrifft: Hide <-> Unload
von: Franz W.
Geschrieben am: 04.10.2003 09:45:17

Hallo Forum,

bin gleich noch mal mit einer anderen Frage da:

Option Explicit

Public result As Boolean


Private Sub btnOK_Click()
    result = True
    Hide
End Sub



Private Sub btnAbbruch_Click()
    result = False
    Hide
End Sub


Klappt auch ganz gut. Wenn ich diese UF aber erneut aufrufe, stehen in den Textfeldern noch die Werte drin, die ich bei der vorherigen Benutzung eingetragen habe.

Selbstverständlich kann ich die Textfelder vor erneutem Aufruf einzeln leeren lassen (txtName = "" usw).Damit aber die Textfelder alle bei erneutem Aufruf automatischleer sind, habe ich jetzt mal "Hide" gegen "Unload" ausgetauscht. Jetzt kann ich aber beim Drücken des OK-Buttons die Werte nicht mehr abfragen, sie stehen nicht mehr zur Verfügung, weil die UF schon entladen ist.

Wie kann ich das bitte lösen, kann ich da einen Tipp bekommen?

Vielen Dank im Voraus

Grüße
Franz
Bild


Betrifft: AW: Hide <-> Unload
von: Ramses
Geschrieben am: 04.10.2003 09:48:04

Hallo Franz

wenn du die UF schliesst und das ERgebnis brauchst, definiere die Variable "Result" als "Public Result As Boolean" in einem Modul.
Dann steht sie dir auch zur Verfügung wenn die UF geschlossen ist.

Gruss Rainer


Bild


Betrifft: AW: Hide <-> Unload
von: Franz W
Geschrieben am: 04.10.2003 09:55:45

Hallo Rainer,

vielen Dank für Deine Hilfe. Hab das " Public result As Boolean " jetzt in ein Standardmodul. Jetzt kommt aber "Fehler beim Kompilieren: Methode oder Datenobjekt nicht gefunden." bei:

.
.
.
If dlgKdAendern.result = False Then
Exit Sub
Else
.
.
.

... und unterlegt ist " .result "

Da muss ich jetzt wohl auch noch was ändern ?!? :-). Krieg ihc noch mal Deine Hilfe, bitte?

Grüße
Franz


Bild


Betrifft: AW: Hide <-> Unload
von: Ramses
Geschrieben am: 04.10.2003 09:57:10

Hallo Franz,

die Variable ist Public !! d.h. öffentlich und steht überall zur Verfügung :-)

If Result = False Then

Das reicht.

Gruss Rainer


Bild


Betrifft: AW: Hide <-> Unload
von: Franz W.
Geschrieben am: 04.10.2003 10:11:35

Hallo Rainer,

ich glaub, ich schreib als Level wieder "mäßig" ... ich verzweifel grad ein bissl:

Das mit der Variablen hab ich jetzt kapiert, dieser Unterschied zwischen den Modulen war mir noch nicht klar. Jetzt klappt aber mein bisheriger Code nicht mehr *seufz*: die obere Hälfte brauchst Du nicht anschauen.




Sub NeuenKundenEingeben()
KdBildPfad = Sheets("Help").[D26]
Smly = Worksheets("Help").[C18]
    'Dateinamen von Bildern einlesen:
    With Application.FileSearch
       .LookIn = KdBildPfad
       .Filename = "*.jpg"
       .Execute
       dlgKdAendern.cmbBilderNamen.Clear
       For intCounter = 1 To .FoundFiles.Count
          komplett = .FoundFiles(intCounter)
          'In der folgenden Schleife wird der einzlesende und auszugebende Dateiname _
            von hinten her Buchstabe für Buchstabe zusammengesetzt.
          'Dies würde eigentlich bei i = 0 losgehen.
          'Die "4", damit die Extension nicht mit angezeigt wird, _
            weil die letzten 4 Zeichen abgezogen werden:
          For i = 4 To Len(komplett)
             'Sobald von hinten her ein "\" erreicht wird, is genug. _
                Damit wird nur der Dateiname ausgegeben ohne Pfad:
             If Mid(komplett, Len(komplett) - i, 1) = "\" Then Exit For
             pctName = Mid(komplett, Len(komplett) - i, 1) & pctName
          Next i
          dlgKdAendern.cmbBilderNamen.AddItem pctName
         pctName = ""
       Next
    End With
'Neue Kundennummer einlesen, restliche Felder leer machen:
With dlgKdAendern
    .Caption = "Kunden eingeben"
    .bezAenderKunde.Caption = "Kundendaten eingeben:"
        .txtKdNr = Format(Worksheets("Help").Cells(2, 2) + 1, "000")
'        .txtTitel = ""
'        .txtNName = ""
'        .txtVName = ""
'        .txtco = ""
'        .txtStrasse = ""
'        .txtPLZ = ""
'        .txtOrt = ""
'        .txtObjekt = ""
'        .txtKtoNr = ""
'        .txtBLZ = ""
'        .txtBank = ""
'        .txtNotiz = ""
        .Image1.Picture = LoadPicture(Smly)
Beep
    'Dialog aufrufen:
    dlgKdAendern.txtTitel.SetFocus
    dlgKdAendern.Show
End With
Application.ScreenUpdating = False
    If result = False Then
        Exit Sub
    Else
        Worksheets("Help").Cells(2, 2) = Format(dlgKdAendern.txtKdNr, "0")
        With Sheets("Daten")
            .Unprotect
            .Range("DatenTabelle").Select
            iHilf = Selection.Row + Selection.Rows.Count - 1
            .Rows(iHilf - 1).Select
            Selection.Copy
            Selection.Insert Shift:=xlDown
            ActiveSheet.Paste
            Application.CutCopyMode = False
                .Cells(iHilf, 2) = Format(dlgKdAendern.txtKdNr, "0")
                .Cells(iHilf, 3) = dlgKdAendern.txtTitel
                .Cells(iHilf, 4) = dlgKdAendern.txtNName
                .Cells(iHilf, 5) = dlgKdAendern.txtVName
                .Cells(iHilf, 6) = dlgKdAendern.txtco
                .Cells(iHilf, 7) = dlgKdAendern.txtStrasse
                .Cells(iHilf, 8) = dlgKdAendern.txtPLZ
                .Cells(iHilf, 9) = dlgKdAendern.txtOrt
                .Cells(iHilf, 10) = dlgKdAendern.txtObjekt
                .Cells(iHilf, 11) = dlgKdAendern.txtKtoNr
                .Cells(iHilf, 12) = dlgKdAendern.txtBLZ
                .Cells(iHilf, 13) = dlgKdAendern.txtBank
                If dlgKdAendern.cmbBilderNamen = "" Then
                    Cells(iHilf, 59) = ""
                Else
                    Cells(iHilf, 59) = dlgKdAendern.cmbBilderNamen
                End If
                dlgKdAendern.cmbBilderNamen.Clear
                .Cells(iHilf, 60) = dlgKdAendern.txtNotiz
            strAusgabe = ""
            For intSpalte = 61 To 71
                ' Fehlerbehandlung, weil es einen Fehler gibt, wenn kein Kommentar eingetragen ist _
                    und in Cells(r, 72) "#WERT!" steht:
                On Error Resume Next
                If Cells(iHilf, intSpalte) <> "" Then
                    strAusgabe = strAusgabe & Cells(iHilf, intSpalte) & Chr(10)
                End If
                On Error GoTo 0
            Next
'Den letzten Zeilenumbruch, nach dem kein Text mehr folgt, löschen:
                If Right(strAusgabe, 1) = vbLf Then
                    strAusgabe = Left(strAusgabe, Len(strAusgabe) - 1)
                End If
                If dlgKdAendern.txtNotiz <> "" Then
                    Set cmt = Cells(iHilf, 4).AddComment _
                        (Text:=(Trim(dlgKdAendern.txtTitel & " " & dlgKdAendern.txtVName & " " & dlgKdAendern.txtNName & ":") _
                        & Chr(10) & strAusgabe))
                    With cmt.Shape
                        .TextFrame.AutoSize = True
                        With .TextFrame.Characters(1, InStr(1, cmt.Text, Chr(10)) - 1)
                            .Font.Bold = True
                            .Font.Underline = True
                        End With
                    End With
                End If
                Range("DatenTabelle").WrapText = False 'Kein Zeilenumbruch im Datenbereich
             .Protect
        End With
   End If
Application.ScreenUpdating = True
Call Sortieren_nach_Namen
ActiveWorkbook.Save
End Sub



Was er noch macht, ist die neue Zeile einfügen. Aber Werte trägt er keine mehr ein. Ich kriege nur eine neue leere Zeile.

(Denselben Dialog mit ähnlichem Code - am Anfang werden vorhandene Daten eingelesen - nehme ich auch her, um Daten eines bereits existierenden Kunden zu ändern. Auch das klappt jetzt nicht mehr. Betätige ich nach Aufruf der UF den Ok-Button, löscht er sämtliche Inhalte der Zeile und lässt nur die leere ZEile stehen!)

Verzweifelte Grüße
Franz


Bild


Betrifft: Mit Hide statt Unload.Me klappt wieder alles
von: Franz W.
Geschrieben am: 04.10.2003 10:18:22




Bild


Betrifft: Zusätzlich Infos nötig
von: Ramses
Geschrieben am: 04.10.2003 10:26:58

Hallo Franz.

Das hat aber nichts mit der Variablenabfrage zu tun :-)
Wenn dein Makro noch eine Leerzeile einfügt, bedeutet das ja, dass die Variable richtig erkannt und verarbeitet wird.

Ich weiss jetzt nicht wo du die Variable "Result" vorher überall verwendest um eine Aktion auszuführen, aber werden die Felder in der UF überhaupt gefüllt, oder steht da was drin ?

Damit komme ich überhaupt nicht klar

With dlgKdAendern
Hier änderst du die Beschriftung und die Button Beschriftung
.Caption = "Kunden eingeben"
.bezAenderKunde.Caption = "Kundendaten eingeben:"
.txtKdNr = Format(Worksheets("Help").Cells(2, 2) + 1, "000")
' .txtTitel = ""
' .txtNName = ""
' .txtVName = ""
' .txtco = ""
' .txtStrasse = ""
' .txtPLZ = ""
' .txtOrt = ""
' .txtObjekt = ""
' .txtKtoNr = ""
' .txtBLZ = ""
' .txtBank = ""
' .txtNotiz = ""
.Image1.Picture = LoadPicture(Smly)
Beep
'Dialog aufrufen:
hier setzt du den Focus
dlgKdAendern.txtTitel.SetFocus
und hier rufst du den Dialog erst auf !!
Klappt das tatsächlich bei dir ?

dlgKdAendern.Show
End With


Gruss Rainer


Bild


Betrifft: Dann hat es sich ja erledigt :-)
von: Ramses
Geschrieben am: 04.10.2003 10:36:10

Hallo Franz

ich habe vorausgesetzt du hast die UF entladen.
Damit ist deine erste Frage aber überflüssig nach der Variablen.
Dann kannst du die UF ja immer direkt abfragen ;-)

Gruss Rainer


Bild


Betrifft: AW: Hide <-> Unload
von: Hajo_Zi
Geschrieben am: 04.10.2003 09:48:48

Hallo Franz

es gibt nur Sekt oder Selter entweder alle Werte behalten (Hide) oder alle löschen (unload) ein zwischending gibt es nicht.

Welcher Ok Button???



Falls Code vorhanden wurde dieser getestet unter Betriebssystem XP Pro und Excel Version XP SBE.
Bitte kein Mail, Probleme sollen im Forum gelöst werden.

Microsoft MVP für Excel

Das Forum lebt auch von den Rückmeldungen.

http://home.media-n.de/ziplies/



Bild


Betrifft: Der Ok-Button der UF
von: Franz W.
Geschrieben am: 04.10.2003 09:59:07

Hallo Hajo,

des geht um den Ok-Button einer UF. Der obige Code steht in dem Modulfenster zur Eingabe der Ereignisprozedur, das hinter der UF liegt.

Grüße
Franz


 Bild

Beiträge aus den Excel-Beispielen zum Thema " Wochentag ermitteln"