Hallo zusammen,
nachdem meine eigenen Recherchen und Versuche alle im Sande verlaufen sind, wenn ich mich nun ans Forum, in der Hoffnung hier Hinweise, neue Impulse oder gar eine Lösung zu erhalten.
Folgendes Problem bereitet mir Schwierigkeiten:
Ich habe ein Datenblatt, in dem untereinander insg. sechs definierte Tabellen eingefügt sind.
Da mehrere Personen mit dem Blatt arbeiten, wurde es gegen unbeabsichtigte Veränderungen geschützt.
Um bei aktivem Blattschutz dennoch Zeilen hinzufügen oder entfernen zu können, hab ich einen passende UserForm mit einer ListBox und zwei CommandButtons aufgebaut.
Wird die UserForm geöffnet, wird der Inhalt der ausgewählten definierten Tabelle in die ListBox geladen. Nun kann man sich in der ListBox die Zeile anwählen welche gelöscht oder unter der eine neue Zeile eingefügt werden soll.
Klappt alles wie geplant, aber… nur solange man ein Datenblatt auf hat.
Öffnet man zwei solcher Datenblätter gleichzeitig erhalte ich bei der Aktion „Zeile einfügen über UserForm“ folgende Fehlermeldung woraufhin Excel im Nachgang komplett abstürzt:
"Forms.Form1 – Programmabbruch.-2147024882 – Eigenschaft RowSource konnte nicht gesetzt werden. Für diesen Vorgang sind nicht genügend Speicherressourcen verfügbar."
Merkwürdig ist auch, dass der Fehler nur bei einer der beiden offenen Datei auftritt. Die zweite lässt sich wie vorgesehen bearbeiten.
Da alle Tabellen in den offenen Datenblätter die gleiche Namen haben (tab_1, tab_2, tab_3, etc) und diese Namen dann doppelt vorhanden sind (einmal je Datei), hatte ich hier das Problem vermutet. Eine Umbenennung brachte jedoch keinen Erfolg.
Auch eine Umbenennung der UserForms in UF1 und UF2 hatte null positive Auswirkung.
Als Fehler wird die Zeile 57
- Me.ListBox1.RowSource = ThisWorkbook.ActiveSheet.ListObjects(strName)
im Abschnitt 'Listbox aktualisieren in meinem Code angegeben.
Hier die Gesamtübersicht:
Spoiler anzeigen
Hat jemand von Euch eine Ahnung, wie ich hier die Kuh vom Eis kriege?
Sagt bescheid, wenn Ihr die Datei benötigt.
Vielen Dank im Voraus für Eure Unterstützung.
Bei evtl. Fragen stehe ich gerne zur Verfügung.
nachdem meine eigenen Recherchen und Versuche alle im Sande verlaufen sind, wenn ich mich nun ans Forum, in der Hoffnung hier Hinweise, neue Impulse oder gar eine Lösung zu erhalten.
Folgendes Problem bereitet mir Schwierigkeiten:
Ich habe ein Datenblatt, in dem untereinander insg. sechs definierte Tabellen eingefügt sind.
Da mehrere Personen mit dem Blatt arbeiten, wurde es gegen unbeabsichtigte Veränderungen geschützt.
Um bei aktivem Blattschutz dennoch Zeilen hinzufügen oder entfernen zu können, hab ich einen passende UserForm mit einer ListBox und zwei CommandButtons aufgebaut.
Wird die UserForm geöffnet, wird der Inhalt der ausgewählten definierten Tabelle in die ListBox geladen. Nun kann man sich in der ListBox die Zeile anwählen welche gelöscht oder unter der eine neue Zeile eingefügt werden soll.
Klappt alles wie geplant, aber… nur solange man ein Datenblatt auf hat.
Öffnet man zwei solcher Datenblätter gleichzeitig erhalte ich bei der Aktion „Zeile einfügen über UserForm“ folgende Fehlermeldung woraufhin Excel im Nachgang komplett abstürzt:
"Forms.Form1 – Programmabbruch.-2147024882 – Eigenschaft RowSource konnte nicht gesetzt werden. Für diesen Vorgang sind nicht genügend Speicherressourcen verfügbar."
Merkwürdig ist auch, dass der Fehler nur bei einer der beiden offenen Datei auftritt. Die zweite lässt sich wie vorgesehen bearbeiten.
Da alle Tabellen in den offenen Datenblätter die gleiche Namen haben (tab_1, tab_2, tab_3, etc) und diese Namen dann doppelt vorhanden sind (einmal je Datei), hatte ich hier das Problem vermutet. Eine Umbenennung brachte jedoch keinen Erfolg.
Auch eine Umbenennung der UserForms in UF1 und UF2 hatte null positive Auswirkung.
Als Fehler wird die Zeile 57
- Me.ListBox1.RowSource = ThisWorkbook.ActiveSheet.ListObjects(strName)
im Abschnitt 'Listbox aktualisieren in meinem Code angegeben.
Hier die Gesamtübersicht:
Visual Basic-Quellcode
- Private Sub CommandButton2_Click() 'erweitern
- On Error GoTo ENDE
- Dim wks As Object: Set wks = ThisWorkbook.ActiveSheet
- Dim strName As String
- 'Welche Tabelle ist aktiv?
- strName = ActiveCell.ListObject.Name
- Dim tbl As ListObject: Set tbl = wks.ListObjects(strName)
- 'Zeilen
- 'erste
- Dim EZ As Integer
- EZ = tbl.ListRows(1).Range.Row
- 'letzte
- Dim LZ As Integer
- Dim adrZ As String
- adrZ = Split(tbl.Range.Address, ":", -1, vbTextCompare)(1)
- LZ = wks.Range(adrZ).Row
- 'Spalten
- 'erste
- Dim ES As Integer
- ES = tbl.ListColumns(1).Range.Column
- 'letzte
- Dim LS As Integer
- Dim adrS As String
- adrS = Split(tbl.Range.Address, ":", -1, vbTextCompare)(1)
- LS = wks.Range(adrS).Column
- 'Blatt entsperren
- wks.Unprotect
- 'Tabelle anpassen
- If Me.ListBox1 + 1 > LZ Then
- 'Zeile einfügen
- Rows(Me.ListBox1 + 1).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
- 'Tabellengröße anpassen
- tbl.Resize Range(wks.Cells(EZ - 1, ES), wks.Cells(LZ + 1, LS))
- Else
- 'Zeile einfügen
- Rows(Me.ListBox1 + 1).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
- End If
- 'Listbox aktualisieren
- Me.ListBox1.RowSource = ThisWorkbook.ActiveSheet.ListObjects(strName)
- 'Me.ListBox1.RowSource = tbl.DataBodyRange.Address
- ENDE:
- 'Fehlermeldung anzeigen
- If Err.Number <> 0 Then
- MsgBox _
- Err.Number & _
- " - " & _
- Err.Description & Chr(13) & Chr(13) & _
- "Fehler Makro CommandButton2_Click.", , _
- Err.Source & " - Programmabbruch."
- End If
- 'Blatt sperren
- wks.Protect
- 'Aufräumen
- Set wks = Nothing
- Set tbl = Nothing
- Set oListZ = Nothing
- Set oListS = Nothing
- End Sub
Hat jemand von Euch eine Ahnung, wie ich hier die Kuh vom Eis kriege?
Sagt bescheid, wenn Ihr die Datei benötigt.
Vielen Dank im Voraus für Eure Unterstützung.
Bei evtl. Fragen stehe ich gerne zur Verfügung.
Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Marco123“ ()