Hallo Rudi,
wozu nach einem Begriff suchen, der ggf. nicht vorhanden?
Du hast doch schon eine Fehlersteuerung in deinem Code, dann benutze es auch.
LG
Sub Import_mit_Dialog()
Dim Mappe As Excel.Workbook
Dim Quelle As Excel.Worksheet, Ziel As Excel.Worksheet
Dim Datei As String, Tabelle As String
'Dialog "Datei öffnen" anzeigen
Datei = Application.GetOpenFilename("Excel-Dateien(*.xlsx),*xlsx")
'Abbrechen falls keine Datei ausgewählt
If Datei = "Falsch" Then
MsgBox "Keine Datei ausgewählt!", , "Abbruch"
Exit Sub
End If
Set Ziel = ThisWorkbook.Worksheets(2) '<-- konstant und hoffentlich vorhanden
'Name der Quelltabelle aus Zelle
Tabelle = ThisWorkbook.Sheets("Tabelle1").Range("B2").Value '<-- anpassen
'Ausgewählte Datei öffnen
Application.ScreenUpdating = False '<-- kein Flackern
Set Mappe = Workbooks.Open(Filename:=Datei) '<-- ist ja ausgewählt
'ab hier kann ein Fehler auftreten
On Error GoTo Fehler
Set Quelle = Mappe.Sheets(Tabelle) '<-- gewähltes Blatt wird definiert als Quelle
'kopieren und einfügen
Quelle.UsedRange.Copy
Ziel.Cells(1, 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
'Fehler auswerten
On Error GoTo 0
Fehler:
Select Case Err.Number
Case 0
'erfolgreich
Case 9
MsgBox Tabelle & " = ungültig/ nicht gefunden"
Case Else
MsgBox "FehlerNr.: " & Err.Number & vbNewLine & vbNewLine _
& "Beschreibung: " & Err.Description _
, vbCritical, "allgemeiner Fehler"
End Select
Mappe.Close False
'Speicher freigeben
Set Mappe = Nothing
Set Quelle = Nothing
Set Ziel = Nothing
Application.ScreenUpdating = True
End Sub
Eleganter mit Excel 2013 und höher:
Sub Version2013()
Dim oDlg As FileDialog
Application.ScreenUpdating = False
Set oDlg = Application.FileDialog(msoFileDialogOpen)
With oDlg
.AllowMultiSelect = False
.Filters.Clear
.Filters.Add "Excel", "*.xlsx", 1
If .Show = -1 Then
.Execute
Else
Exit Sub
End If
End With
On Error GoTo errorhandler
With ActiveWorkbook
.Sheets(ThisWorkbook.Sheets("Tabelle1").Range("B10").Value).UsedRange.Copy
ThisWorkbook.Worksheets(2).Cells(1, 1).PasteSpecial _
Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
End With
On Error GoTo 0
errorhandler:
Select Case Err.Number
Case 0
'
Case 9
MsgBox "Wert in B10 = ungültig/ nicht gefunden"
Case Else
MsgBox "FehlerNr.: " & Err.Number & vbNewLine & vbNewLine _
& "Beschreibung: " & Err.Description _
, vbCritical, "allgemeiner Fehler"
End Select
ActiveWorkbook.Close False
Application.ScreenUpdating = True
End Sub
|