Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1744to1748
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

Listobject zuweisen - Error 9

Listobject zuweisen - Error 9
16.03.2020 08:17:36
Stefan
Hallo Forumsgemeinde,
wieder mal sehe ich den Wald vor lauter Bäumen nicht und bitte um Hilfe.
Die folgende sub gibt mir einen Laufzeitfehler 9 (Indesx außerhalb des gültigen Bereichs), die auslösende Zeile habe ich fett / kursiv markiert.
Zur Erläuterung:
lo_Protokoll befindet sich in einer bereits geöffneten Mappe, lo_Historie befindet sich in der Mappe "Adr_Historie" die aber direkt vor dem set-befehl geöffnet wird.
Die Zuweisung von lo_Protokoll funktioniert anstandslos, die von lo_Historie nicht......
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
' -> prüft, ob protokollierte Änderungen vorliegen und sichert diese
' -> prüft, ob die Arbeitsmappe im schreibgeschützten Modus geöffnet ist
' -> Speicherung der Arbeitsmappe nur, wenn kein schreibgeschützter Modus vorliegt
Dim dateiname As String
Dim wkb_historie As String    'Pfad zu Mappe "Adr_Historie"
Dim lo_Protokoll As ListObject
Dim lo_Historie As ListObject
wkb_historie = "S:\Adr_Historie.xlsm"
Set lo_Protokoll = Sheets("Protokoll").ListObjects("Protokoll")
SaveAsUI = False
'suche neue Protokolleinträge
With lo_Protokoll
If .ShowAutoFilter = False Then .ShowAutoFilter = True
'Nach Kriterium Zeit (Spalte A) filtern
.Range.AutoFilter field:=1, Criteria1:=">" & startzeit
'kopieren von Protokolldaten nur wenn der Filter ein Ergebnis beinhaltet
If Not .DataBodyRange Is Nothing Then
'Mappe Adr_Historie öffnen
Application.ScreenUpdating = False
Workbooks.Open Filename:=wkb_historie
    Set lo_Historie = Workbooks("Adr_Historie.xlsm").Sheets("Historie").ListObjects(" _
Historie")
'Mappe "Adressen.xlsm" wieder aktivieren
ThisWorkbook.Activate
'kopieren der gefilterten Protokolldaten in Mappe "Adr_Historie" an das Tabellenende anfü _
gen
.DataBodyRange.Copy Destination:=lo_Historie.ListRows.Add.Range
Workbooks("Adr_Historie.xlsm").Save
Workbooks("Adr_Historie.xlsm").Close
'gesetzten Filter löschen
.Range.AutoFilter field:=1
'Protokolldaten löschen
.DataBodyRange.Delete
startzeit = Now    'Startzeit zurücksetzen auf aktuelles Speicherdatum
Application.ScreenUpdating = True
Else
'keine Speicherung, gesetzten Filter löschen
.Range.AutoFilter field:=1
End If
End With
' Speicherung der Arbeitsmappe nur, wenn kein schreibgeschützter Modus vorliegt
' Die "cancel"-Voreinstellung ist "false" -> Speicherung findet am Ende dieser sub statt
' Wird cancel auf "true" gesetzt erfolgt keine Speicherung
'Fall 1a: die Mappe ist als schreibgeschützte Kopie geöffnet
If ActiveWorkbook.ReadOnly = True Then
Cancel = True      'Speicherung unterdrücken
Else
'Fall 1b: die Mappe ist im Original geöffnet und wird gespeichert
'keine Aktion notwendig, cancel ist standardmäßig = false gesetzt -> Speicherung erfolgt  _
automatisch
End If
End Sub

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Listobject zuweisen - Error 9
16.03.2020 08:20:59
Torsten
Hallo Stefan,
da in diesem Moment dieses Workbook nach dem Oeffnen das aktive Workbook ist, versuchs doch mal so:

Set lo_Historie = ActiveWorkbook.Sheets("Historie").ListObjects("Historie")

Vielleicht hilfts.
Gruss Torsten
AW: Listobject zuweisen - Error 9
16.03.2020 14:23:39
Stefan
@ Torsten:
Leider hilft´s nicht. Gleiche Fehlermeldung gleiche Zeile.....
AW: Listobject zuweisen - Error 9
16.03.2020 14:33:58
Torsten
Hallo,
aslo ich hab das gerade mal durchgespielt bei mir. Es funktioniert ohne Probleme. Ich kann mir nur noch vorstellen, dass es das Listenobjekt mit dem Namen in dem Workbook nicht gibt. Vielleicht nur ein Tippfehler. Oder das Oeffnen der Datei dauert zu lange, das Workbook ist noch nicht geoeffnet und der Code sucht nach dem Listenobjekt, kann es aber nicht finden, da Datei noch nicht offen.
Mal eine Pause einbauen nach den Workbook.Open.
Gruss Torsten
Anzeige
AW: Listobject zuweisen - Error 9
16.03.2020 15:26:45
Stefan
Ich bin jetzt eine Erkenntnis weiter.... aber habe immer noch ein Fragezeichen auf der Stirn.
Zur Erkenntnis:
ich habe 2 subs´s laufen
- workbook_beforeclose
- workbook_beforesave
Der Fehler kommt nicht wenn ich die Mappe speichere - respektive: wenn direkt workbook_beforesave abgearbeitet wird.
Schließe ich aber meine Mappe ohne vorher zu speichern, aktiviert dies erst workbook_beforeclose und in dieser sub dann durch die darin enthaltene Anweisung activeworkbook.save die zweite sub workbook_beforesave
Und schwupps - hab ich meinen Fehler.
Nachfolgend nochmal beide subs. Aber wo ist der Fehler?
Private Sub Workbook_BeforeClose(CClose As Boolean)
'vor dem Schließen prüfen auf erforderliche Speicherung (nur wenn die Datei nicht als  _
schreibgeschützt geöffnet ist)
'vor dem Schließen prüfen, ob Änderungsdatei vorhanden sind und diese vor dem Speichern und  _
Schließen verarbeiten
'nur wenn Datei nicht als schreibgeschützt geöffnet ist
'die "cancel"-Voreinstellung ist "false" -> Die Arbeitsmappe wird ohne Speicherung geschlossen
Dim dateiname As String
'Fall 1: Änderungen in der Mappe sind noch nicht gesichert
If ActiveWorkbook.Saved = False Then
ActiveWorkbook.Save   'dies aktiviert die "workbook_beforeSave" - Routine
Else
'Fall 2: keine Änderungen vorhanden, kein Speichern erforderlich
CClose = False
End If
End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, CSave As Boolean)
' -> prüft, ob protokollierte Änderungen vorliegen und sichert diese
' -> prüft, ob die Arbeitsmappe im schreibgeschützten Modus geöffnet ist
' -> Speicherung der Arbeitsmappe nur, wenn kein schreibgeschützter Modus vorliegt
' Die "cancel"-Voreinstellung ist "false" -> Speicherung findet am Ende dieser sub statt
' Wird cancel auf "true" gesetzt erfolgt keine Speicherung
' "saveasUI"-Voreinstellung ist ?
' saveasUI = true -> die saveAS - Dialogbox wird angezeigt
Dim dateiname As String
Dim wkb_historie As String    'Pfad zu Mappe "Adr_Historie"
Dim lo_Protokoll As ListObject
Dim lo_Historie As ListObject
wkb_historie = "S:\Adr_Historie.xlsm" 'der Pfad sollte zu einem späteren Zeitpunkt besser aus  _
einem Dateiverzeichnis geholt werden
Set lo_Protokoll = Sheets("Protokoll").ListObjects("Protokoll")
SaveAsUI = False
'suche neue Protokolleinträge
With lo_Protokoll
If .ShowAutoFilter = False Then .ShowAutoFilter = True
'Nach Kriterium Zeit (Spalte A) filtern
.Range.AutoFilter field:=1, Criteria1:=">" & startzeit
'kopieren von Protokolldaten nur wenn der Filter ein Ergebnis beinhaltet
If Not .DataBodyRange Is Nothing Then
'Mappe Adr_Historie öffnen
Application.ScreenUpdating = False
' Workbooks.Open (wkb_historie)
Workbooks.Open Filename:="S:\Adr_Historie.xlsm"
' Workbooks.Open Filename:=wkb_historie
Set lo_Historie = ActiveWorkbook.Sheets("Historie").ListObjects("Historie")
'Mappe "Adressen.xlsm" wieder aktivieren
ThisWorkbook.Activate
'kopieren der gefilterten Protokolldaten in Mappe "Adr_Historie" an das Tabellenende anfü _
gen
.DataBodyRange.Copy Destination:=lo_Historie.ListRows.Add.Range
Workbooks("Adr_Historie.xlsm").Save
Workbooks("Adr_Historie.xlsm").Close
'gesetzten Filter löschen
.Range.AutoFilter field:=1
'Protokolldaten löschen
.DataBodyRange.Delete
startzeit = Now    'Startzeit zurücksetzen auf aktuelles Speicherdatum
Application.ScreenUpdating = True
Else
'keine Speicherung, gesetzten Filter löschen
.Range.AutoFilter field:=1
End If
End With
' Speicherung der Arbeitsmappe nur, wenn kein schreibgeschützter Modus vorliegt
' Die "cancel"-Voreinstellung ist "false" -> Speicherung findet am Ende dieser sub statt
' Wird cancel auf "true" gesetzt erfolgt keine Speicherung
'Fall 1a: die Mappe ist als schreibgeschützte Kopie geöffnet
If ActiveWorkbook.ReadOnly = True Then
CSave = True      'Speicherung unterdrücken
Else
'Fall 1b: die Mappe ist im Original geöffnet und wird gespeichert
'keine Aktion notwendig, cancel ist standardmäßig = false gesetzt -> Speicherung erfolgt  _
automatisch
End If
End Sub

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige