Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema Frame
BildScreenshot zu Frame Frame-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Image
BildScreenshot zu Image Image-Seite mit Beispielarbeitsmappe aufrufen

Hide <-> Unload

    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
      


    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


      


    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


      


    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


      


    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


      


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




      


    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


      


    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


      


    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???

    Grußformel

    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/



      


    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