Registriert seit: 24.11.2017
Version(en): 2016
Hallo, ich mal wieder  Folgende Function: Code: Public Function GetDataClosedWB(SourcePath As String, _ SourceFile As String, sourceSheet As String, _ SourceRange As String, TargetRange As Range) As Boolean
Dim strQuelle As String Dim Zeilen As Long Dim Spalten As Byte On Error GoTo InvalidInput
strQuelle = "'" & SourcePath & "[" & SourceFile & "]" & sourceSheet & "'!" & Range(SourceRange).Cells(1, 1).Address(0, 0) Zeilen = Range(SourceRange).Rows.Count Spalten = Range(SourceRange).Columns.Count With TargetRange.Cells(1, 1).Resize(Zeilen, Spalten) .Formula = "=IF(" & strQuelle & "="""",""""," & strQuelle & ")" .Value = .Value End With GetDataClosedWB = True Exit Function InvalidInput: GetDataClosedWB = False MsgBox "Die Quelldatei oder der Quellbereich ist ungültig!", vbExclamation, "Get data from closed Workbook" End Function
Sub test() ..
If GetDataClosedWB(Pfad, _ Dateiname, _ Blatt, _ Zellen, _ Ziel) Then End If End Sub
Wie kann ich einen Test einbauen, ob das SourceSheet in der externen Datei vorhanden ist? Ist es nämlich nicht vorhanden, bekomme ich die Aufforderung in Excel ein Tabellenblatt auszusuchen. Da dieses aber dann in der Datei nicht vorhanden ist, klicke ich auf Abbrechen und bekomme #BEZUG! - Das würde ich gerne durch die Abfrage vorher verhindern. Grüße
Registriert seit: 06.12.2015
Version(en): 2016
Hallo, ungeprüft: Code: if [not(isref(Total!a1))] then
Vor dem Sheet-Namen (hier: Total) muss noch das Workbook eingetragen werden. mfg
Registriert seit: 24.11.2017
Version(en): 2016
puhh.. wo genau meinst? Also auf anhieb klappt es nicht..
Registriert seit: 06.12.2015
Version(en): 2016
In einem kleinen Test mit LO ergab das WAHR: Code: =ISTBEZUG('file:///C:/Users/User/AppData/Local/Temp/133677.xlsx'#$Tabelle1.C7)
Wenn ich deinen gezeigten Code richtig verstanden habe, setzt du die Adresse des geschl. Workbooks zusammen. In der Formel (=ISTBEZUG) bzw VBA [isref()] wird die Existenz geprüft.
Registriert seit: 24.11.2017
Version(en): 2016
Das ist richtig. Geschieht in der Function hier:
strQuelle = "'" & SourcePath & "[" & SourceFile & "]" & sourceSheet & "'!" & Range(SourceRange).Cells(1, 1).Address(0, 0)
Allerdings verstehe ich noch nicht ganz wo ich demnach:
If [not(isref(sourceSheet))] Then
einbringen soll....
Registriert seit: 06.12.2015
Version(en): 2016
ungeprüft !!!!! Ein Prüfung, ob das SHEET existiert: Code: Public Function GetDataClosedWB(SourcePath As String, _ SourceFile As String, sourceSheet As String) As Boolean
strQuelle = "'" & SourcePath & "[" & SourceFile & "]" & sourceSheet & "'!A1" GetDataClosedWB = [isref(strQuelle)]
End Function
Registriert seit: 24.11.2017
Version(en): 2016
Ich verstehe langsaml nur noch Bahnhof ..
GetDataClosedWB = [isref(strQuelle)]
erledigt rein gar nichts :(
Registriert seit: 11.04.2014
Version(en): Office 2007
Hallo, ungetestet Code: Private Function WorkSheetExists(SourceFile As String, sName As String) As Boolean On Error GoTo notfound: WorkSheetExists = Not Workbooks(SourceFile).Worksheets(sName) Is Nothing notfound: End Function Public Function GetDataClosedWB(SourcePath As String, _ SourceFile As String, sourceSheet As String, _ SourceRange As String, TargetRange As Range) As Boolean
Dim strQuelle As String Dim Zeilen As Long Dim Spalten As Byte If Not WorkSheetExists(SourceFile, sourceSheet) Then MsgBox "Tabellenblatt nicht vorhanden": Exit Function On Error GoTo InvalidInput
strQuelle = "'" & SourcePath & "[" & SourceFile & "]" & sourceSheet & "'!" & Range(SourceRange).Cells(1, 1).Address(0, 0) Zeilen = Range(SourceRange).Rows.Count Spalten = Range(SourceRange).Columns.Count With TargetRange.Cells(1, 1).Resize(Zeilen, Spalten) .Formula = "=IF(" & strQuelle & "="""",""""," & strQuelle & ")" .Value = .Value
End With GetDataClosedWB = True Exit Function InvalidInput: GetDataClosedWB = False MsgBox "Die Quelldatei oder der Quellbereich ist ungültig!", vbExclamation, "Get data from closed Workbook" End Function
Gruß Stefan Win 10 / Office 2016
Registriert seit: 24.11.2017
Version(en): 2016
hmmm.
leider noch nicht. Er erkennt GAR KEIN Blatt..
00202
Nicht registrierter Gast
Hallo, :19: so: :21: Code: Option Explicit Sub Main() Const strPath As String = "C:\Temp\" Const strFile As String = "Daten.xlsx" Const strSheetName As String = "Tabelle1" Const strRange As String = "A2:C4" Const strDestination As String = "B2" If ADOSheet(strPath & strFile, strSheetName) = True Then If GetDataClosedWB(strPath, strFile, strSheetName, strRange, Range(strDestination)) Then MsgBox "OK!" Else MsgBox "MIST!" End If Else MsgBox "Sheet nicht vorhanden!" End If End Sub Private Function ADOSheet(ByVal strFileName As String, strSheet As String) As Boolean Dim objConn As Object Dim objCat As Object Dim objTab As Object On Error GoTo Fin Set objConn = CreateObject("ADODB.Connection") With objConn .CursorLocation = 3 .Provider = "Microsoft.ACE.OLEDB.12.0;" & "Extended Properties=""Excel 12.0;HDR=YES"";" & "Data Source=" & strFileName & ";" .Open End With Set objCat = CreateObject("ADOX.Catalog") Set objCat.ActiveConnection = objConn For Each objTab In objCat.Tables If objTab.Name = strSheet & "$" Then ADOSheet = True: Exit Function Else ADOSheet = False: Exit Function End If Next objTab Fin: Set objCat = Nothing If Not objConn Is Nothing Then If objConn.State = 1 Then objConn.Close End If Set objConn = Nothing End Function Public Function GetDataClosedWB(SourcePath As String, _ SourceFile As String, sourceSheet As String, _ SourceRange As String, TargetRange As Range) As Boolean
Dim strQuelle As String Dim Zeilen As Long Dim Spalten As Byte On Error GoTo InvalidInput
strQuelle = "'" & SourcePath & "[" & SourceFile & "]" & sourceSheet & "'!" & Range(SourceRange).Cells(1, 1).Address(0, 0) Zeilen = Range(SourceRange).Rows.Count Spalten = Range(SourceRange).Columns.Count With TargetRange.Cells(1, 1).Resize(Zeilen, Spalten) .Formula = "=IF(" & strQuelle & "="""",""""," & strQuelle & ")" .Value = .Value
End With GetDataClosedWB = True Exit Function InvalidInput: GetDataClosedWB = False MsgBox "Die Quelldatei oder der Quellbereich ist ungültig!", vbExclamation, "Get data from closed Workbook" End Function
|