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

geschlossene Arbeitsmappen ansprechen

geschlossene Arbeitsmappen ansprechen
Joachim
Hallo,
ich habe von einigen Wochen die Frage angesprochen, wie ich geschlossene Arbeitsmappen ansprechen kann. Hajo hat mir dazu ein VBA-Code zur Verfügung gestellt.
Siehe hier:
Option Explicit
Public Function GetDataClosedWB(SourcePath As String, _
SourceFile As String, sourceSheet As String, _
SourceRange As String, TargetRange As Range) As Boolean
'Holt einen Bereich aus einer _geschlossenen_ Arbeitsmappe
'Nur in VBA zu verwenden; nicht aus einer Tabellenzelle heraus
'© t.ramel@mvps.org
' wird durch die HoleDaten aufgerufen
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:
MsgBox "Die Quelldatei oder der Quellbereich ist ungültig!", vbExclamation, "Get data from   _
_
_
closed Workbook"
GetDataClosedWB = False
End Function
Public Sub HoleDaten()
' Die Funktion arbeitet mit der obrigen GetDataClosedWB zusammen
Dim Pfad            As String
Dim Dateiname       As String
Dim Blatt           As String
Dim Bereich         As String
Dim Ziel            As Range
Pfad = "L:\Eigene Dateien\Hajo\Internet\Test\2009\"
Dateiname = "Beispiel Forum 30.xlsm" ' aus welcher Datei soll er holen?
Blatt = "Tabelle1"  ' von welcher Tabelle soll er holen?
Bereich = "A1:B9"   ' aus welchem Bereich soll er holen?
Set Ziel = ActiveSheet.Range("A1")  ' in welchen Bereich soll er kopieren? Genauer gesagt:   _
_
_
Bei welcher Zelle soll er anfangen, Datein reinzukopieren? Bsp: ActiveCell geht auch
If GetDataClosedWB(Pfad, Dateiname, Blatt, Bereich, Ziel) Then
MsgBox "Daten importiert"
End If
End Sub

Dieser Code funktioniert sehr gut. Nur habe ich damit trotzdem ein Problem.
Ich will keine Bereiche kopieren im Format "A1:B9" sondern ich will benannte Bereiche kopieren.
Und in dem Fall bekomme ich die Fehlermeldung beim Kompilieren: Argumenttyp ByRef unverträglich.
Kann mir jemand sagen, wie ich den Code abändern muß, damit ich benannte Bereiche kopieren kann.
Vielen Dank.
Gruß
Joachim

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: geschlossene Arbeitsmappen ansprechen
12.08.2011 15:16:29
Josef

Hallo Joachim,
das könnte man so lösen.
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Public Sub getDataADO()
  Dim objADO As Object
  Dim strFile As String, strRef As String
  
  strFile = "E:\Forum\indirekt_test.xlsx"
  
  strRef = "_Test1" 'Bereichsname Globale Gültigkeit
  
  Set objADO = ExcelTable(strFile, strRef)
  Range("A2").CopyFromRecordset objADO 'Zielbereich anpassen!
  objADO.Close
  
  strRef = "Tabelle2$_Test4" 'Bereichsname mit Lokaler Gültigkeit $ beachten!
  
  Set objADO = ExcelTable(strFile, strRef)
  Range("A12").CopyFromRecordset objADO
  objADO.Close
  
  strRef = "Tabelle1$D6:L15" 'normale Bereichsangabe unbedingt MIT Tabellenname & $-Zeichen
  
  Set objADO = ExcelTable(strFile, strRef)
  Range("A22").CopyFromRecordset objADO
  objADO.Close
  
End Sub




Public Function ExcelTable(ByRef Path As String, ByRef SourceRange As String) As Object
  Dim SQL As String
  Dim Con As String
  
  SQL = "select * from [" & SourceRange & "]"
  
  If Mid(Path, InStrRev(Path, ".") + 1) = "xls" Then
    Con = "Provider=Microsoft.Jet.OLEDB.4.0;" _
      & "Extended Properties=Excel 8.0;" _
      & "Data Source=" & Path & ";"
  ElseIf Mid(Path, InStrRev(Path, ".") + 1) Like "xls?" Then
    Con = "Provider=Microsoft.ACE.OLEDB.12.0;" _
      & "Extended Properties=""Excel 12.0;HDR=YES"";" _
      & "Data Source=" & Path & ";"
  Else
    Exit Function
  End If
  Set ExcelTable = CreateObject("ADODB.Recordset")
  ExcelTable.Open SQL, Con, 3, 1
End Function



« Gruß Sepp »

Anzeige
AW: geschlossene Arbeitsmappen ansprechen
12.08.2011 15:57:26
fcs
Hallo Joachim,
die folgende Anpassung funktioniert für Bereichsnamen, die sich auf Namen beziehen, die für die gesamte Arbeitsmappe definiert sind.
Namen, die lokal für ein bestimmtes Tabellenblatt festgelegt sind benötigen eine andere Syntax für strQuelle.
Dann muss der Mappenname in eckige Klammern gesetzt werden und der Tabellenname vor dem Ausrufzeichen stehen. Ähnlich wie im Code für "normale" Zellbereiche.
Gruß
Franz
Public Sub HoleDatenName()
' Die Funktion arbeitet mit der obrigen GetDataClosedWB_Name zusammen
Dim Pfad            As String
Dim Dateiname       As String
Dim BereichName     As String
Dim Ziel            As Range
Pfad = "L:\Eigene Dateien\Hajo\Internet\Test\2009\"
Dateiname = "Beispiel Forum 30.xlsm" ' aus welcher Datei soll er holen?
BereichName = "MyData"               ' aus welchem Bereich soll er holen?
Set Ziel = ActiveSheet.Range("A1")  ' in welchen Bereich soll er kopieren? Genauer gesagt:  _
_
Bei welcher Zelle soll er anfangen, Datein reinzukopieren? Bsp: ActiveCell geht auch
If GetDataClosedWB_Name(Pfad, Dateiname, BereichName, Ziel) Then
MsgBox "Daten importiert"
End If
End Sub
Public Function GetDataClosedWB_Name(SourcePath As String, _
SourceFile As String, SourceRange As String, TargetRange As Range) As Boolean
'Holt einen Bereich aus einer _geschlossenen_ Arbeitsmappe
'Nur in VBA zu verwenden; nicht aus einer Tabellenzelle heraus
'© t.ramel@mvps.org - modified by f.sielck
' wird durch die HoleDaten aufgerufen
Dim strQuelle       As String, strFormel As String
Dim Zeilen          As Long
Dim Spalten         As Byte
On Error GoTo InvalidInput
strQuelle = "'" & SourcePath & SourceFile & "'!" & SourceRange
With TargetRange
strFormel = "=Rows(" & strQuelle & ")"
.Formula = strFormel
.Calculate
Zeilen = .Value
strFormel = "=COLUMNS(" & strQuelle & ")"
.Formula = strFormel
.Calculate
Spalten = .Value
.ClearContents
End With
With TargetRange.Cells(1, 1).Resize(Zeilen, Spalten)
.FormulaArray = "=IF(" & strQuelle & "="""",""""," & strQuelle & ")"
.Calculate
.Value = .Value
End With
GetDataClosedWB_Name = True
Exit Function
InvalidInput:
MsgBox "Die Quelldatei oder der Quellbereich ist ungültig!", vbExclamation, _
"Get data from closed Workbook"
GetDataClosedWB_Name = False
End Function

Anzeige

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige