1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Ich danke allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben. Ich bin weiterhin für euch erreichbar unter tti(bei)pcwelt.de.
    Dismiss Notice

UserForm

Discussion in 'Office-Programme' started by moritz20010, Nov 5, 2009.

Thread Status:
Not open for further replies.
  1. Hallo Excel-User,
    für Eintragungen in ein Tabellenblatt habe ich eine „UserForm“ mit mehreren Text- und ComboBox Objekten erstellt.
    In die ComboBox-Objekte können Daten aus mehreren Tabellenblättern ausgewählt werden.
    Beim anschließenden Übertragen in die Ausgangstabelle werden aber nicht alle Einträge aus der „UserForm“ übernommen.
    Wo liegt hier ein Fehler?
    Kann mir jemand Helfen?
     
  2. Urs2

    Urs2 Megabyte

    Hallo Moritz,

    Kopiere den Code des UserForms hier ins Forum, Fehler erahnen und aufzählen bringt nichts...
    ...Fehlermöglichkeiten gibt es in Hülle und Fülle...

    Betreffen die Fehler nur Eingaben in die Combos, oder auch in Textboxen ?

    Gruss Urs
     
  3. Hallo Urs2
    hier die Kopie des Makro´s

    Private Sub cmdÜbernehmen_Click() 'Werte nach "Eingabe" übernehmen
    Dim Eingabe As Worksheet
    Set Eingabe = Worksheets("Eingabe")
    Dim Zuschlag1 As Currency
    Dim Zuschlag2 As Currency
    Dim Endreinigung As Currency
    Dim Kurtaxe As Currency

    On Error Resume Next
    Worksheets("Eingabe").Activate
    With Kataloge
    Eingabe.Cells(10, 8) = .ComboBox1.Value
    Eingabe.Cells(10, 19) = .ComboBox3.Value
    Eingabe.Cells(10, 24) = .ComboBox17.Value
    Eingabe.Cells(16, 8) = .TextBox31.Value

    Eingabe.Cells(6, 28) = .TextBox3.Value
    Eingabe.Cells(6, 31) = .TextBox4.Value
    If .TextBox5.Value <> 0 Then
    Zuschlag1 = .TextBox5.Value
    Eingabe.Cells(6, 40) = Zuschlag1
    End If
    Eingabe.Cells(9, 28) = .TextBox7.Value
    Eingabe.Cells(9, 31) = .TextBox8.Value
    If .TextBox9.Value <> 0 Then
    Zuschlag2 = .TextBox9.Value
    Eingabe.Cells(9, 40) = Zuschlag2
    End If

    Eingabe.Cells(4, 28) = .ComboBox5.Value
    Eingabe.Cells(4, 32) = .TextBox2.Value
    Eingabe.Cells(24, 27) = .ComboBox6.Value

    If .TextBox32.Value > "" Then
    Eingabe.Cells(16, 28) = "Endreinigung"
    Endreinigung = .TextBox32.Value
    Eingabe.Cells(16, 40) = Endreinigung
    End If
    If .TextBox30.Value > "" Then
    Eingabe.Cells(20, 28) = "Kurtaxe"
    Kurtaxe = .TextBox30.Value
    Eingabe.Cells(20, 40) = Kurtaxe
    End If
    Cells(14, 40).Select
    End With
    Me.Hide
    Unload Me
    Sheets("Eingabe").Select
    End Sub
     
  4. Urs2

    Urs2 Megabyte

    Hallo Moritz,

    Vorweg >>> die Zeile "On Error Resume Next" verhindert, dass wegen einem belanglosen Fehler das Makro blockiert.
    Zum Testen musst Du diese Zeile aber auskommentieren, dann willst und musst Du die echten Fehler ja sehen können.

    Zum Testen >>> Setze einen Haltepunkt am Anfang des Codes, starte das Makro... dann hält es dort an.
    Lass das Lokal-Fenster anzeigen, dort siehst Du die Werte der Variablen... ob sie überhaupt einen haben...
    Dann gehe das Makro im Schrittmodus durch (immer Taste F8 oder Click auf das Symbol)
    Wenn die Maus über den Namen einer Combo- oder Textbox fährt, wird deren Inhalt eingeblendet.
    Vielleicht ist ja auch eine Zelle gesperrt, wo das Makro hinschreiben sollte...

    Hoffentlich habe ich das richtig verstanden >
    - auf einem Blatt ist ein Button, der das UserForm aufruft und initialisiert. Der User macht seine Eingaben.
    - auf dem UserForm ist ein Button "Berechnen" oder so, der einen Code "hinter" dem UserForm aufruft, die Berechnung macht und das Resultat im Form anzeigt.
    - auf dem Form ist auch Button "Uebertragen" mit seinem Code auch "hinter" dem Form >>> das ist der Code hier
    (ein Abbrechen-Button ist nicht drauf?)
    Richtig ?

    Etwas habe ich nicht begriffen > Was ist "Katalog"? Heisst das UserForm so?
    With Katalog
    xxxxxxxx = .TextBox3
    ...musst Du dem Code nicht sagen, er kennt nur dieses UserForm, sonst nichts. Er steht ja in diesem Form...
    ...oder hätte ich da etwas Falsches angenommen ?

    .Value ist die Default-Eigenschaft der Combo- und Textboxen, also kannst Du es schreiben oder weglassen.

    Testen kann ich es nicht, aber so müsste es gehen >
    Code:
    Private Sub cmdÜbernehmen_Click()       'Werte nach "Eingabe" übernehmen
    
            'das braucht es nicht
    'Dim Eingabe As Worksheet
    'Set Eingabe = Worksheets("Eingabe")
    Dim Zuschlag1 As Currency
    Dim Zuschlag2 As Currency
    Dim Endreinigung As Currency
    Dim Kurtaxe As Currency
    
            'zum Testen auskommentieren
    'On Error Resume Next
    
    Worksheets("Eingabe").Activate
    
    With Sheets("Eingabe")
        .Cells(10, 8) = ComboBox1
        .Cells(10, 19) = ComboBox3
        .Cells(10, 24) = ComboBox17
        .Cells(16, 8) = TextBox31
        .Cells(6, 28) = TextBox3
        .Cells(6, 31) = TextBox4
        If TextBox5 <> 0 Then
            Zuschlag1 = TextBox5
            .Cells(6, 40) = Zuschlag1
        End If
        .Cells(9, 28) = TextBox7
        .Cells(9, 31) = TextBox8
        If TextBox9 <> 0 Then
            Zuschlag2 = TextBox9
            .Cells(9, 40) = Zuschlag2
        End If
        .Cells(4, 28) = ComboBox5
        .Cells(4, 32) = TextBox2
        .Cells(24, 27) = ComboBox6
        If .TextBox32 > "" Then
            .Cells(16, 28) = "Endreinigung"
            Endreinigung = TextBox32
            .Cells(16, 40) = Endreinigung
        End If
        If TextBox30 > "" Then
            .Cells(20, 28) = "Kurtaxe"
            Kurtaxe = TextBox30
            .Cells(20, 40) = Kurtaxe
        End If
        Cells(14, 40).Select
    End With
    
            'Dieser Befehl ist falsch und sinngemäss erst noch unnötig
    'Me.Hide
    
    Unload Me
    Sheets("Eingabe").Select
    End Sub

    Gruss Urs
     
  5. Hallo Urs,
    danke für die Tipp´s
    Nach dem auskommentieren der Zeile "On Error Resume Next" wurde der Fehler sofort angezeigt (einige gesperrte Zellen).

    Auch die anderen Ratschläge waren sehr hilfreich
    Gruss Moritz
     
  6. Urs2

    Urs2 Megabyte

    Uebrigens... erst jetzt aufgefallen...

    ...die 4 Variablen As Currency könntest Du weglassen, indem Du den Wert der TextBox direkt in Currency wandelst, zB >>>

    ...hier mit nur einem Einzeiler
    If TextBox5 <> 0 Then .Cells(6, 40) = CCur(TextBox5)

    ...oder hier so
    If .TextBox32 <> "" Then
    .Cells(16, 28) = "Endreinigung"
    .Cells(16, 40) = CCur(TextBox32)
    End If

    Wenn ein Schlauberger anstatt Zahlen Buchstaben in die TextBox tippt, kommt dann so oder so ein Laufzeitfehler.
    Falls das von Interesse sein sollte, müsstest Du es vorher prüfen und gegebenenfalls abfangen...

    Gruss Urs
     
  7. Hallo Urs,

    danke auch für diesen Tipp

    Gruss Moritz
     
Thread Status:
Not open for further replies.

Share This Page