Anzeige
Archiv - Navigation
1936to1940
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

Anlegen

Anlegen
11.07.2023 17:11:38
Hans
Hallo ihr Helfenden,

Bräuchte da mal eure Hilfe.
Mit der Userform Anlegen Uf wird das Blatt Vorlage kopiert und eingefügt. Das neue Blatt bekommt nun den Namen der in der UF eingegeben wurde. Dieser wird außerdem dem Listobject auf dem neuem Blatt zugewiesen. Die Blätter werden sortiert. Der Name des neuen Blatts wird in das entsprechende Listobject auf dem Blatt Eintragung hinzugefügt.

Problem 1:
Werden nun die kompletten Tabellenzeilen eines Listobjects gelöscht, wird der neue Name nicht in die erste freie Zeile des Listobjects geschrieben sondern darunter (da ich +1 angebe). In diesem fall soll in die erste freie Zeile des entsprechenden Listobjects geschrieben werden. Ansonsten immer unter die letzte beschriebene Zeile des entsprechenden Listobjects.

Problem 2:
Ist das Blatt schon mit dem eingegebenen Namen vorhanden soll eine MSG box erscheinen mit dem Text "Name schon vergeben" und es soll kein neues Blatt angelegt werden.

mfg Hans

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Anlegen
11.07.2023 20:45:25
ralf_b
probier mal
die leere Zeile in einer leeren Intelligenten Tabelle ist die Insertrowrange und keine Listrow
der Code hier fügt eine neue Listrow an die intelligente Tabelle an.


Private Sub Name_Bestätigen_Click()
    Dim i As Integer
    Dim j As Integer
    Dim Anzahl As Integer
    Dim Auszug$
  
  On Local Error Resume Next
  With Worksheets(Anl_Neu_Name.Value)
  End With
  If Err = 0 Then
    MsgBox "Der Name: '" & Anl_Neu_Name.Value & "' existiert schon", vbOKOnly + vbCritical, "Fehlermeldung"
    Exit Sub
  Else
   Err.Clear
  End If

    ' Neues Blatt wird mit eingegebenen Namen angelegt
    Worksheets("Vorlage").Copy After:=Sheets(ThisWorkbook.Worksheets.Count)
    ActiveSheet.Name = Anl_Neu_Name.Value 'Dem aktiven Blatt wird der neue Name vergeben

    'Alle Blätter_Sortieren
    Anzahl = ActiveWorkbook.Worksheets.Count
    For i = 1 To Anzahl
        For j = i To Anzahl
            If Worksheets(j).Name  Worksheets(i).Name Then
                Worksheets(j).Move before:=Worksheets(i)
            End If
        Next j
    Next i

    Worksheets(Anl_Neu_Name.Text).ListObjects(1).Name = Anl_Neu_Name.Text
    
     With ActiveWorkbook.Worksheets("Eintragung")
        'Unter letzten Eintrag in Tabelle (Listobject) schreiben
        With .ListObjects("Tbl_" &  Left(Anl_Neu_Name.Text, 2) ).ListRows.Add
            .Range(1) = Anl_Neu_Name.Text
        End With
    End With

End Sub

Anzeige
AW: Anlegen
12.07.2023 17:43:39
Hans
Dankeschön ralf_b und GerdL, beide Lösungen funktionieren einwandfrei.
Die Variante von ralf_b nutze ich da es eine Komplett Lösung darstellt.

Evtl. könnt ihr mir nochmal bei einem ähnlichem Problem helfen.
Über eine userform listbox soll der ausgewählte Inhalt in der richtigen zeile des listobjects Tbl_Freigabe in spalte ID / Name geändert oder gelöscht werden. Wollte die zeile aus der listbox über den listindex +1 in einer Variable übergeben. Wird aber kurz nach dem übergeben wieder als Leer angezeigt. Die geänderten Einträge werden zwar geschrieben, jedoch an falscher position.

Neu: https://www.herber.de/bbs/user/159920.xlsm

mfg Hans

Anzeige
AW: Anlegen
12.07.2023 20:03:59
ralf_b
du benutzt rowsource. Deshalb kann man nicht in die .List() schreiben.
Eine Änderung der Zellen wird direkt in die List übernommen.
Die Variable IndexSpeicher muß gobal definiert werden. Zumindest im Kontext der Userform.
Kenntnis über Sichtbarkeit /Gültigkeit von Variablen ist ein Muß beim Programmieren.

Dim IndexSpeicher&
Dim bChange As Boolean


' Geänderten Namen in Tbl_Freigabe (ID / Name) an richtige stelle schreiben
Private Sub Übernehmen_Click()

    With Tabelle3.ListObjects("Tbl_Freigabe")
        bChange = True
        .ListRows(IndexSpeicher + 1).Range(1) = ID_Box
        .ListRows(IndexSpeicher + 1).Range(2) = Name_Box
        bChange = False
    End With
End Sub


' ID / Name mit auswahl listbox befüllen

Private Sub ListBox1_Change()

    If ListBox1.ListIndex = -1 Then Exit Sub
    If bChange Then Exit Sub

    IndexSpeicher = ListBox1.ListIndex

    ID_Box = ListBox1.List(ListBox1.ListIndex, 0)
    Name_Box = ListBox1.List(ListBox1.ListIndex, 1)

End Sub

Anzeige
AW: Anlegen
14.07.2023 18:19:14
Hans
Danke nochmal ralf_b,
auch das hat funktioniert.

Außerdem hab ich mir nun mal die Sichtbarkeit / Gültigkeit von Variablen angeschaut.
Es kommt immer mehr dazu.

mfg Hans

AW: Anlegen
11.07.2023 21:44:24
GerdL
Tja nun?
',,,,,,,,,,,,,,,,,,,,,,,,,,
With .ListObjects("Tbl_" & Left(Anl_Neu_Name.Text, 2))
    If .Range(2) = "" Then
        .Range(2) = Anl_Neu_Name.Text
    Else
        With .ListRows.Add
        .Range(1) = Anl_Neu_Name.Text
        End With
    End If
End With
'..................
Gruß Gerd

Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige