Listobject zuweisen - Error 9
16.03.2020 08:17:36
Stefan
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