Freigeben über

userform.show vbmodeless

Anonym
2013-10-30T14:15:35+00:00

hallo,

nach dem motto dumme fragen gibt es nicht. hier also meine.

ich starte meine userform mit userform.show vbmodeless.

klappt auch ganz gut. die dahinterliegende tabelle ist erreichbar und kann bearbeitet werden.

nun kommt es aber vor, dass eine zweite, dritte tabelle geöffnet werden müssen.

ändere ich nun etwas in der userform und möchte dieses änderung speichern (per button in der userform) stürzt mir mein excel ab.

laufzeitfehler 91. objektvariable ode with-blockvariable nicht festgelegt.

na ja. warum auch immer.

mein gedachter lösungsansatz: ich klicke ja die userform an. also aktiviere ich sie ja auch wieder. im zuge dessen sollte dann auch die zugehörige tabelle wieder aktiviert werden. doch irgendwie scheint das nicht zu klappen. woran mag es liegen?

habt ihr eine ahnung?

danke.

berthold

Microsoft 365 und Office | Excel | Für Zuhause | Windows

Gesperrte Frage. Diese Frage wurde aus der Microsoft-Support-Community migriert. Sie können darüber abstimmen, ob sie hilfreich ist, aber Sie können keine Kommentare oder Antworten hinzufügen oder der Frage folgen.

0 Kommentare Keine Kommentare

27 Antworten

Sortieren nach: Am hilfreichsten
  1. Anonym
    2013-10-31T08:41:01+00:00

    hallo claus,

    ich hoffe ich vergesse nun keine antwort auf deine fragen.

    leeren:

    Private Sub Leeren()

        TextBox1.Text = ""

        TextBox2.Text = ""

        TextBox3.Text = ""

        TextBox4.Text = ""

        TextBox5.Text = ""

        TextBox6.Text = ""

        TextBox7.Text = ""

        TextBox8.Text = ""

        TextBox9.Text = ""

        TextBox10.Text = ""

        TextBox11.Text = ""

        TextBox12.Text = ""

        TextBox13.Text = ""

        TextBox14.Text = ""

        TextBox15.Text = ""

        TextBox16.Text = ""

        TextBox17.Text = ""

        TextBox18.Text = ""

        TextBox19.Text = ""

        TextBox20.Text = ""

        TextBox21.Text = ""

        TextBox22.Text = ""

        TextBox23.Text = ""

        TextBox24.Text = ""

        TextBox25.Text = ""

        TextBox26.Text = ""

        TextBox27.Text = ""

        UserForm_initialize

    End Sub

    füllen:

    Private Sub Füllen()

    Dim lngSuch

    Dim i As Integer

    Dim LRow As Long

    Dim rngC As Range

    LRow = Cells(Rows.Count, 1).End(xlUp).Row

    lngSuch = Me.TextBox4.Value

    Set rngC = Range("A2:A" & LRow).Find(lngSuch, Range("A" & LRow), xlValues)

    With UserForm1

       If Not rngC Is Nothing Then

          .TextBox1 = Cells(rngC.Row, 2)

          .TextBox2 = Cells(rngC.Row, 4)

          .TextBox3 = Cells(rngC.Row, 3)

         '.TextBox4 = Cells(rngC.Row, 4)

          .TextBox5 = Cells(rngC.Row, 5)

          .TextBox6 = Cells(rngC.Row, 6)

          .TextBox7 = Cells(rngC.Row, 7)

          .TextBox8 = Cells(rngC.Row, 8)

          .TextBox9 = Cells(rngC.Row, 9)

          .TextBox10 = Cells(rngC.Row, 10)

          .TextBox11 = Cells(rngC.Row, 11)

          .TextBox12 = Cells(rngC.Row, 12)

          .TextBox13 = Cells(rngC.Row, 13)

          .TextBox14 = Cells(rngC.Row, 14)

          .TextBox15 = Cells(rngC.Row, 15)

          .TextBox16 = Cells(rngC.Row, 16)

          .TextBox17 = Cells(rngC.Row, 17)

          .TextBox18 = Cells(rngC.Row, 18)

          .TextBox19 = Cells(rngC.Row, 19)

          .TextBox20 = Cells(rngC.Row, 20)

          .TextBox21 = Cells(rngC.Row, 21)

          .TextBox22 = Cells(rngC.Row, 22)

          .TextBox23 = Cells(rngC.Row, 23)

          .TextBox24 = Cells(rngC.Row, 24)

          .TextBox25 = Cells(rngC.Row, 25)

          .TextBox26 = Cells(rngC.Row, 26)

          .TextBox27 = Cells(rngC.Row, 27)

       Else

          Meldung ' nummer ist noch nicht vorhanden. anlegen? ja oder nein.

       End If

    End With

    End Sub

    dieses wird alles in einer mappe / tabellenblatt ausgeführt. also eigentlich nur eine art eingabehilfe um nicht immer von zelle zu zelle springen zu müssen, sondern die eingaben per userform in die tabelle schreiben zu lassen bzw. auszulesen. die textbox4 dient dazu die richtige zeile anzuspringen, in der sich die benötigten daten befinden.

    es ist ein wenig kompliziert und sicher auch nicht sauber gelöst von mir. aber es funktioniert. wenigstens der grösste teil davon.

    gruss.

    berthold

    War diese Antwort hilfreich?

    0 Kommentare Keine Kommentare
  2. Anonym
    2013-10-31T08:22:57+00:00

    Hallo Berthold,

    noch eine Nachfrage.

    Wenn Trim(TextBox4.Text) = "" ist, dann ist die Textbox doch schon leer. Warum dann noch "Leeren". Bzw. anders herum, wenn sie schon befüllt ist, warum dann noch füllen?

    Mit freundlichen Grüßen

    Claus

    War diese Antwort hilfreich?

    0 Kommentare Keine Kommentare
  3. Anonym
    2013-10-31T07:38:45+00:00

    Hallo Berthold,

    auf welchem Blatt bzw. Welcher Mappe wird Call_Erste_leere_Zelle ausgeführt? Warum musst du in diese Zelle springen. Werte kannst du auch direkt zuweisen oder auslesen, ohne diese Zelle anzuspringen.

    Von welcher Mappe bzw. welchem Blatt wird "Füllen" ausgeführt?

    Mit freundlichen Grüßen

    Claus

    War diese Antwort hilfreich?

    0 Kommentare Keine Kommentare
  4. Anonym
    2013-10-31T06:43:03+00:00

    hallo claus,

    danke das du dich der sache annimmst.

    so öffne ich die userform:

    Private Sub Workbook_Open()

       UserForm1.Show vbModeless

        With UserForm1.TextBox4

            .SetFocus               ' textbox wird angesprungen für die erste eingabe 

        End With

        Call erste_leere_zelle ' ich springe in die erste leere zelle in spalte a

    End Sub

    und ja ich öffne weitere "arbeitsmappen" wobei meine userform im vordergrund stehen bleibt.

    verändere ich  nun einen wert in textbox4 sucht mein code im aktiven tabellenblatt, welches nun im vordergrund steht. und nicht in dem es eigentlich suchen sollte.

    Private Sub textbox4_exit(ByVal Cancel As MSForms.ReturnBoolean)

        If Trim(TextBox4.Text) = "" Or Trim(TextBox4.Text) = "" Then

            Leeren     ' textboxen werden geleert

        Else

            Füllen      ' zeile finden und text rechts davon in textboxen schreiben 

        End If

    End Sub

    oder aber ich beende mit beenden bzw. abbrechen die tabellenbearbeiteung.

    Private Sub CommandButton6_Click()  ' beenden

        Unload UserForm1

        ThisWorkbook.Save

        ThisWorkbook.Close

    End Sub 

    oder

    Private Sub CommandButton5_Click()  ' abbrechen

        ThisWorkbook.Close SaveChanges:=False

    End Sub

    beides führt dann zum absturz.

    und nun kommst du.

    danke.

    berthold

    War diese Antwort hilfreich?

    0 Kommentare Keine Kommentare
  5. Anonym
    2013-10-30T20:10:09+00:00

    Hallo Berthold,

    was verstehst du unter 2. oder 3. Tabelle? Weitere Arbeitsmappen?

    Poste mal den Code für den CommandButton, denn ich denke, dass du dort nicht richtig referenziert hast und beim Öffnen weiterer Mappen oder selektieren anderer Blätter dann dieser Fehler kommt.

    Mit freundlichen Grüßen

    Claus

    War diese Antwort hilfreich?

    0 Kommentare Keine Kommentare