Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
796to800
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
796to800
796to800
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Fehler abfangen wenn Tabellenblatt nicht vorhanden

Fehler abfangen wenn Tabellenblatt nicht vorhanden
04.09.2006 21:20:39
Dieter.K
Hallo Forum,
ich muß noch einmal um Eure Hilfe bitten. Irgendwie bekomme ich die Fehlerabfrage nicht "gebacken". Kann mir eventuell jemand erklären wo ich in dem folgenden Code die Frage nach dem zu verknüpfenden Tabellenblatt abfangen kann?
(Wenn das Tabellenblatt "Kundendaten" oder "Info" nicht vorhanden ist, öffnet sich ein Fenster mit der Frage nach dem zu verknüpfenden Tabellenblatt). Genau diese Meldung möchte ausschließen, damit tatsächlich nur Daten aus den Mappen eingelesen werden, die die besagten Tabellenblätter enthalten. Wäre nett, wenn sich diese Problematik einmal jemand anschauen könnte.

Sub Einlesen()
Dim iCounter As Integer, iRow As Integer, i As Integer
Dim sfile As String, sPath As String
iRow = Cells(Rows.Count, 1).End(xlUp).Row + 1
With Application.FileSearch
.LookIn = Range("AA1").Value
.FileType = msoFileTypeExcelWorkbooks
.Execute
For iCounter = 1 To .FoundFiles.Count
sfile = Dir(.FoundFiles(iCounter))
sPath = WorksheetFunction.Substitute(.FoundFiles(iCounter), sfile, "")
For i = 6 To 8
With Cells(iRow, i - 5)
.Formula = "='" & sPath & "[" & sfile & "]Kundendaten'!E" & i
.Value = .Value
End With
Next
For i = 14 To 22
With Cells(iRow, i - 10)
.Formula = "='" & sPath & "[" & sfile & "]Kundendaten'!E" & i
.Value = .Value
End With
Next
With Cells(iRow, 13)
.Formula = "='" & sPath & "[" & sfile & "]Kundendaten'!E24"
.Value = .Value
End With
With Cells(iRow, 14)
.Formula = "='" & sPath & "[" & sfile & "]Kundendaten'!E26"
.Value = .Value
End With
With Cells(iRow, 15)
.Formula = "='" & sPath & "[" & sfile & "]Kundendaten'!F6"
.Value = .Value
End With
With Cells(iRow, 16)
.Formula = "='" & sPath & "[" & sfile & "]Info'!C2"
.Value = .Value
End With
iRow = iRow + 1
Next iCounter
End With
End Sub

Besten Dank im Voraus.
Gruß
Dieter.K

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Fehler abfangen wenn Tabellenblatt nicht vorha
04.09.2006 22:40:16
fcs
Hallo Dieter,
ich habe ich hier mal 2 mögliche Lösungen gebastelt (ungetestet), wobei ich mir nicht sicher bin ob die 2. auch funktioniert.
Bei Lösung 1 wird die Datei kurz geöffnet, das Vorhandensein der beiden Blätter geprüft und die Datei wieder geschlossen.
Bei Lösung 2 werden 2 Zellen testweise mit den Formeln ausgefüllt und dann geprüft, ob das Ergebnis einen Fehlerwert ergibt.
Gruss
Franz

Sub Einlesen()
Dim iCounter As Integer, iRow As Integer, i As Integer
Dim sfile As String, sPath As String, wb As Workbook, wks As Worksheet
Dim Kundendaten As Boolean, Info As Boolean
iRow = Cells(Rows.Count, 1).End(xlUp).Row + 1
With Application.FileSearch
.LookIn = Range("AA1").Value
.FileType = msoFileTypeExcelWorkbooks
.Execute
For iCounter = 1 To .FoundFiles.Count
Kundendaten = False
Info = False
Application.ScreenUpdating = False
Set wb = Workbooks.Open(FileName:=.FoundFiles(iCounter), ReadOnly:=True)
For Each wks In wb.Worksheets
If wks.Name = "Kundendaten" Then Kundendaten = True
If wks.Name = "Info" Then Info = True
Next wks
wb.Close savechanges:=False
Application.ScreenUpdating = True
If Kundendaten = True And Info = True Then
sfile = Dir(.FoundFiles(iCounter))
sPath = WorksheetFunction.Substitute(.FoundFiles(iCounter), sfile, "")
For i = 6 To 8
With Cells(iRow, i - 5)
.Formula = "='" & sPath & "[" & sfile & "]Kundendaten'!E" & i
.Value = .Value
End With
Next
For i = 14 To 22
With Cells(iRow, i - 10)
.Formula = "='" & sPath & "[" & sfile & "]Kundendaten'!E" & i
.Value = .Value
End With
Next
With Cells(iRow, 13)
.Formula = "='" & sPath & "[" & sfile & "]Kundendaten'!E24"
.Value = .Value
End With
With Cells(iRow, 14)
.Formula = "='" & sPath & "[" & sfile & "]Kundendaten'!E26"
.Value = .Value
End With
With Cells(iRow, 15)
.Formula = "='" & sPath & "[" & sfile & "]Kundendaten'!F6"
.Value = .Value
End With
With Cells(iRow, 16)
.Formula = "='" & sPath & "[" & sfile & "]Info'!C2"
.Value = .Value
End With
iRow = iRow + 1
End If
Next iCounter
End With
End Sub
Sub Einlesen()
Dim iCounter As Integer, iRow As Integer, i As Integer
Dim sfile As String, sPath As String, Kundendaten As Boolean, Info As Boolean
iRow = Cells(Rows.Count, 1).End(xlUp).Row + 1
With Application.FileSearch
.LookIn = Range("AA1").Value
.FileType = msoFileTypeExcelWorkbooks
.Execute
For iCounter = 1 To .FoundFiles.Count
sfile = Dir(.FoundFiles(iCounter))
sPath = WorksheetFunction.Substitute(.FoundFiles(iCounter), sfile, "")
Kundendaten = True
Info = True
i = 6
With Cells(iRow, i - 5)
.Formula = "='" & sPath & "[" & sfile & "]Kundendaten'!E" & i
If IsError(.Value) Then Kundendaten = False
.ClearContents
End With
With Cells(iRow, 16)
.Formula = "='" & sPath & "[" & sfile & "]Info'!C2"
If IsError(.Value) Then Info = False
.ClearContents
End With
If Kundendaten = True And Info = True Then
For i = 6 To 8
With Cells(iRow, i - 5)
.Formula = "='" & sPath & "[" & sfile & "]Kundendaten'!E" & i
.Value = .Value
End With
Next
For i = 14 To 22
With Cells(iRow, i - 10)
.Formula = "='" & sPath & "[" & sfile & "]Kundendaten'!E" & i
.Value = .Value
End With
Next
With Cells(iRow, 13)
.Formula = "='" & sPath & "[" & sfile & "]Kundendaten'!E24"
.Value = .Value
End With
With Cells(iRow, 14)
.Formula = "='" & sPath & "[" & sfile & "]Kundendaten'!E26"
.Value = .Value
End With
With Cells(iRow, 15)
.Formula = "='" & sPath & "[" & sfile & "]Kundendaten'!F6"
.Value = .Value
End With
With Cells(iRow, 16)
.Formula = "='" & sPath & "[" & sfile & "]Info'!C2"
.Value = .Value
End With
iRow = iRow + 1
End If
Next iCounter
End With
End Sub

Anzeige
AW: Fehler abfangen wenn Tabellenblatt nicht vorha
04.09.2006 23:01:08
Dieter.K
Hallo Franz,
vielen Dank für Deine Hilfe.
Problem:
bei Lösung 1 erscheint eine Abfrage nach einer anderen verknüpften Datei (PreislisteVersion98.xls)
bei Lösung 2 kommt immer noch die selbe Abfrage, aber nach Klick auf Abbrechen bleibt der Debugger in der Zeile
.Formula = "='" & sPath & "[" & sfile & "]Kundendaten'!E" & i
stehen.
Hast Du noch einen Lösungsvorschlag.
(Die Tabellen die Ausgelesen werden sollen haben alle eine Verknüpfung zur Datei "PreislisteVersion98.xls". Vielleicht ist das relevant für Deine ertse Lösung, denn genau nach dieser Datei wird bei Lösung 1 gefragt)
Gru
Dieter.K
Anzeige
AW: Fehler abfangen wenn Tabellenblatt nicht vorha
04.09.2006 23:59:22
fcs
Hallo Dieter,
die Lösung 2 läuft dann wahrscheinlich nicht, weil die Tabelle nicht vorhanden ist, so dass wir uns hier im Kreis drehen.
Passe in Lösung 1 die Zeile
Set wb = Workbooks.Open ....
wie folgt an:

Set wb = Workbooks.Open(FileName:=.FoundFiles(iCounter), UpdateLinks:=False, ReadOnly:=True)

dann sollte nicht mehr nach der Aktualisierung der Verknüpfung zur Datei
"PreislisteVersion98.xls" gefragt werden.
Ansonsten reicht es evtl. wenn die Datei "PreislisteVersion98.xls" vor dem Start des Makros geöffnet wird, um die lässtigen Rückfragen zu vermeiden.
Gruss
Franz
Anzeige
AW: Fehler abfangen wenn Tabellenblatt nicht vorha
05.09.2006 00:09:10
Dieter.K
Hallo Franz,
Danke. Genau das war's. Super!
Gruß
Dieter.K
AW: Fehler abfangen wenn Tabellenblatt nicht vorha
05.09.2006 00:19:13
Dieter.K
Hallo Franz,
sorry, ich nerve! Gibt es eine Möglichkeit eine MsgBox während der Laufzeit des Makros einzublenden um dem User einen Hinweis zu geben, das z.B. Daten eingelesen werden (je nach Verzeichnis kann sich die Abfrage auf mehrere tausend Dateien beziehen und da diese zur Abfrage nach dem Tabellenblatt ja kurz geöffnet werden, kann das Makro dann schon mal länger laufen)
Gruß
Dieter.K
AW: Fehler abfangen wenn Tabellenblatt nicht vorha
05.09.2006 10:00:57
fcs
Hallo Dieter,
freut mich, dass es geklappt hat. MsgBox einblenden erfordert normalerweise jedes Mal einen Bestätigung des Anwenders.
Suche hier mal unter dem Stichwort "Fortschrittsbalken".
Die einfachste Möglichkeit für den Anwender eine Information bereitzustellen ist eine angepasste Meldung in der Statusleiste.
Gruß
Franz
Makro mit Statusmeldung in Statusleiste:

Sub Einlesen()
Dim iCounter As Integer, iRow As Integer, i As Integer
Dim sfile As String, sPath As String, wb As Workbook, wks As Worksheet
Dim Kundendaten As Boolean, Info As Boolean
iRow = Cells(Rows.Count, 1).End(xlUp).Row + 1
With Application.FileSearch
.LookIn = Range("AA1").Value
.FileType = msoFileTypeExcelWorkbooks
.Execute
For iCounter = 1 To .FoundFiles.Count
Application.StatusBar = "Datei " & iCounter & " von " & .FoundFiles.Count & " wird eingelesen"
Kundendaten = False
Info = False
Application.ScreenUpdating = False
Set wb = Workbooks.Open(Filename:=.FoundFiles(iCounter), UpdateLinks:=False, ReadOnly:=True)
For Each wks In wb.Worksheets
If wks.Name = "Kundendaten" Then Kundendaten = True
If wks.Name = "Info" Then Info = True
Next wks
wb.Close savechanges:=False
Application.ScreenUpdating = True
If Kundendaten = True And Info = True Then
sfile = Dir(.FoundFiles(iCounter))
sPath = WorksheetFunction.Substitute(.FoundFiles(iCounter), sfile, "")
For i = 6 To 8
With Cells(iRow, i - 5)
.Formula = "='" & sPath & "[" & sfile & "]Kundendaten'!E" & i
.Value = .Value
End With
Next
For i = 14 To 22
With Cells(iRow, i - 10)
.Formula = "='" & sPath & "[" & sfile & "]Kundendaten'!E" & i
.Value = .Value
End With
Next
With Cells(iRow, 13)
.Formula = "='" & sPath & "[" & sfile & "]Kundendaten'!E24"
.Value = .Value
End With
With Cells(iRow, 14)
.Formula = "='" & sPath & "[" & sfile & "]Kundendaten'!E26"
.Value = .Value
End With
With Cells(iRow, 15)
.Formula = "='" & sPath & "[" & sfile & "]Kundendaten'!F6"
.Value = .Value
End With
With Cells(iRow, 16)
.Formula = "='" & sPath & "[" & sfile & "]Info'!C2"
.Value = .Value
End With
iRow = iRow + 1
End If
Next iCounter
End With
Application.StatusBar = False
End Sub

Anzeige
AW: Fehler abfangen wenn Tabellenblatt nicht vorha
05.09.2006 13:02:39
Dieter.K
Hallo Franz,
allerbesten Dank. Funktioniert einwandfrei.
Jetzt kann ich diesen Thread wirklich schließen!
Nochmals Danke!
Gruß
Dieter.K

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige