Discussion:
Lesen aus nicht geöffneten Excel-Dateien mit VBA
(zu alt für eine Antwort)
Thomas Neukirch
2006-08-30 08:04:02 UTC
Permalink
Hallo,

ich möchte in VBA Werte aus einem definiert Bereich (RangeC) einer
geschlossenen Excel-Dateien einlesen und in einen Bereich (RangeP) eines
geöffneten Excel-Files übergeben, also ungefähr

Thisworkbook.RangeP.value = GeschlossenesWorkbook.RangeC.value

Nur, wie kann ich geeignet auf die geschlossene Datein zugreifen, ohne sie
vorher öffnen zu müssen?

Für Ideen wäre ich dankbar

Gruss

Thomas
Herbert Taferner
2006-08-30 08:30:53 UTC
Permalink
Hallo Thomas,

schau mal da rein

Thread vom 13.8.2006 21:41
Zugriff auf eine Zelle (A1) einer geschlossenen Exceldatei?

mfg Herbert
Thomas Neukirch
2006-08-30 09:49:01 UTC
Permalink
Hallo Herbert,

danke für den Hinweis, hatte den Thread trotz Suche nicht gefunden. Hatte
es mit dem excel4macro schon vorher mal probiert gehabt, funktionierte bei
mir allerdings nicht.

Gruss

Thomas
Post by Herbert Taferner
Hallo Thomas,
schau mal da rein
Thread vom 13.8.2006 21:41
Zugriff auf eine Zelle (A1) einer geschlossenen Exceldatei?
mfg Herbert
Thomas Ramel
2006-08-30 08:36:52 UTC
Permalink
Grüezi Thomas

Thomas Neukirch schrieb am 30.08.2006
Post by Thomas Neukirch
ich möchte in VBA Werte aus einem definiert Bereich (RangeC) einer
geschlossenen Excel-Dateien einlesen und in einen Bereich (RangeP) eines
geöffneten Excel-Files übergeben, also ungefähr
Thisworkbook.RangeP.value = GeschlossenesWorkbook.RangeC.value
Nur, wie kann ich geeignet auf die geschlossene Datein zugreifen, ohne sie
vorher öffnen zu müssen?
Das ist so prinzipiell nicht machbar - auch für das Auslesen von Werten
muss die Datei zumindest über einen DDE-Kanal geöffnet werden.

So ist es dann allerdings nicht möglich bestimmte Bereiche anzusprechen,
das Range-Objekt nicht zur Verfügung steht; das klappt erst, wenn die Mappe
komplett in Excel geöffnet wurde.

Aus diesem Grunde habe ich mal einen Workaround programmiert, der via
Formeln einen Bezug zur Mappe herstellt und diese dann am Ende durch die
Werte ersetzt.
Du kannst sogar, wie gewünscht den Quell- und Ziel-Bereich angeben.

Kopiere die folgenden Zeilen in ein allgemeines Modul und rufe die Funktion
wie unten geschrieben auf:

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
'© ***@mvps.org

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 HoleDaten3()
Dim Pfad As String
Dim Dateiname As String
Dim Blatt As String

Pfad = "D:\DeinPfad\"
Dateiname = "DeineDatei.xls"
Blatt = "DeinTabellenblatt"

If GetDataClosedWB(Pfad, _
Dateiname, _
Blatt, _
"A5:DZ57", _
Worksheets("Tabelle3").Range("B10")) Then
MsgBox "Daten importiert"
End If
End Sub


Mit freundlichen Grüssen
Thomas Ramel (@work)
--
- MVP für Microsoft-Excel -
[Win XP Pro SP-2 / xl2003 SP-1]
Microsoft Excel - Die ExpertenTipps tinyurl.com/cmned
Thomas Neukirch
2006-08-30 09:46:01 UTC
Permalink
Hallo Thomas,

vielen Dank für den Code, ist eingebaut und funktioniert.

Gruss

Thomas
Post by Thomas Ramel
Grüezi Thomas
Thomas Neukirch schrieb am 30.08.2006
Post by Thomas Neukirch
ich möchte in VBA Werte aus einem definiert Bereich (RangeC) einer
geschlossenen Excel-Dateien einlesen und in einen Bereich (RangeP) eines
geöffneten Excel-Files übergeben, also ungefähr
Thisworkbook.RangeP.value = GeschlossenesWorkbook.RangeC.value
Nur, wie kann ich geeignet auf die geschlossene Datein zugreifen, ohne sie
vorher öffnen zu müssen?
Das ist so prinzipiell nicht machbar - auch für das Auslesen von Werten
muss die Datei zumindest über einen DDE-Kanal geöffnet werden.
So ist es dann allerdings nicht möglich bestimmte Bereiche anzusprechen,
das Range-Objekt nicht zur Verfügung steht; das klappt erst, wenn die Mappe
komplett in Excel geöffnet wurde.
Aus diesem Grunde habe ich mal einen Workaround programmiert, der via
Formeln einen Bezug zur Mappe herstellt und diese dann am Ende durch die
Werte ersetzt.
Du kannst sogar, wie gewünscht den Quell- und Ziel-Bereich angeben.
Kopiere die folgenden Zeilen in ein allgemeines Modul und rufe die Funktion
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
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
MsgBox "Die Quelldatei oder der Quellbereich ist ungültig!", _
vbExclamation, "Get data from closed Workbook"
GetDataClosedWB = False
End Function
Public Sub HoleDaten3()
Dim Pfad As String
Dim Dateiname As String
Dim Blatt As String
Pfad = "D:\DeinPfad\"
Dateiname = "DeineDatei.xls"
Blatt = "DeinTabellenblatt"
If GetDataClosedWB(Pfad, _
Dateiname, _
Blatt, _
"A5:DZ57", _
Worksheets("Tabelle3").Range("B10")) Then
MsgBox "Daten importiert"
End If
End Sub
Mit freundlichen Grüssen
--
- MVP für Microsoft-Excel -
[Win XP Pro SP-2 / xl2003 SP-1]
Microsoft Excel - Die ExpertenTipps tinyurl.com/cmned
Thomas Ramel
2006-08-30 11:23:28 UTC
Permalink
Grüezi Thomas

Thomas Neukirch schrieb am 30.08.2006
Post by Thomas Neukirch
vielen Dank für den Code, ist eingebaut und funktioniert.
Fein; es freut mich, wenn solches so reibungslos klappt :-)

Danke dir auch fürs Feedback.



Mit freundlichen Grüssen
Thomas Ramel (@work)
--
- MVP für Microsoft-Excel -
[Win XP Pro SP-2 / xl2003 SP-1]
Microsoft Excel - Die ExpertenTipps tinyurl.com/cmned
Thomas Neukirch
2007-05-21 09:53:02 UTC
Permalink
Hallo Thomas,

ich komme nochmals auf Dich zurück wegen Datenaustausch mit geschlossenen
Exceldateien. Du hattest mir seinerzeit das Sub GetDataClosedWB geschickt,
was bestens funktioniert. Gibt es auch ein entsprechendes Workaround für
Schreiben in geschlossene Exceldateien?

Gruss+Dank

Thomas
Post by Thomas Ramel
Grüezi Thomas
Thomas Neukirch schrieb am 30.08.2006
Post by Thomas Neukirch
vielen Dank für den Code, ist eingebaut und funktioniert.
Fein; es freut mich, wenn solches so reibungslos klappt :-)
Danke dir auch fürs Feedback.
Mit freundlichen Grüssen
--
- MVP für Microsoft-Excel -
[Win XP Pro SP-2 / xl2003 SP-1]
Microsoft Excel - Die ExpertenTipps tinyurl.com/cmned
Bernd
2007-05-22 12:30:49 UTC
Permalink
Hallo,

Vielleicht hilft Dir dies weiter:
http://www.erlandsendata.no/english/index.php?t=envbafileaccess

HTH,
Bernd
Helmut Weber
2007-05-22 14:28:28 UTC
Permalink
Hallo Thomas,

vielleicht lehne ich mich da etwas weit aus dem Fenster,
aber prinzipiell ist eine Datei geöffnet, wenn in sie geschrieben
oder aus ihr gelesen wird.

Für Word und Excel kann man eine unsichtbare Word-
oder Excel-Instanz verwenden. Da sieht man gar nichts.
Trotzdem werden die Dateien geöffnet.

Theoretisch kann man natürlich an alle Bytes
auf einem Datenträger und im Memory direkt rankommen.
Irgendwas an Software braucht man aber immer,
und wenn es "debug" ist.
Wer schickt schon noch Nullen und Einsen direkt an einen Prozessor.

Wenn man einfach einige Bytes aus einem Speicherbereich
ausliest oder hineinschreibt, könnte man sagen,
die Datei bliebt geschlossen.

Oder?
--
Gruß

Helmut Weber, MVP WordVBA

"red.sys" & chr$(64) & "t-online.de"
Win XP, Office 2003 (US-Versions)
Loading...