ich habe folgendes Problem: Ich möchte in Excel per VBA aus einer nicht
geöffneten Excel-Datei Werte auslesen und in einer anderen (geöffneten
Datei) weiterverarbeiten... Ich hab mir das irgendwie so gedacht:
Open "C:\Temp\Test.xls" For Input As #1
Get #1, Worksheets("Ausw5").Cells(1, 1), Wert
MsgBox Wert
ende:
- aber ich kann natürlich schlecht auf ein Sheet oder Cells zugreifen... Wie
geht das?
Danke für Hilfe
Markus
Markus Eckel schrieb:
Mit Hilfe einer 'alten' Excel4Makro-Anweisung klappt das wie folgt:
Public Function GetValue(path$, file$, sheet$, range_ref$)
'Holt einen Wert aus einer _geschlossenen_ Arbeitsmappe
'Nur in VBA zu gebrauchen; nicht aus einer Tabellenzelle heraus
'© John Walkenbach / Übersetzt von Thomas Ramel
'Die GetValue-Funktion, benötigt die vier unten angeführten Arugmente:
'path: Das Laufwerk und den Pfad der geschlossenen Datei (z.B. "C:\Daten")
'file: Der Dateiname der Arbeitsmappe (z.B. "MeineDatei.xls")
'sheet: Der Name des TabellenblattesThe worksheet name (z.B. "Tabelle1")
'ref: Der Zellbezug (z.B. "A1")
Dim arg As String
'Sicherstellen, dass die Datei exisiert
If Right(path, 1) <> "\" Then path = path & "\"
If Dir(path & file) = "" Then
GetValue = "Datei nicht gefunden"
Exit Function
End If
'Den Aufruf-String zusammenstellen
arg = "'" & path & "[" & file & "]" & sheet & "'!" & _
Range(range_ref).Range("A1").Address(, , xlR1C1)
'Ausführen des XL4-Makros
GetValue = ExecuteExcel4Macro(arg)
End Function
Public Sub HoleWert()
Dim rngZelle As Range
Application.ScreenUpdating = False
For Each rngZelle In ActiveSheet.Range("A1:C10")
rngZelle = GetValue("\\Pfad\", "Datei.xls", "Tabelle1", _
rngZelle.Address)
Next rngZelle
Application.ScreenUpdating = True
End Sub
--
Mit freundlichen Grüssen
Thomas Ramel
- MVP für Microsoft-Excel -
[Win 2000Pro SP-4 / xl2000 SP-3]
--
Gruß Alexander (- Antworten bitte nur in die Newsgroup -)
Markus Eckel <Markus...@Nexgo.de> schrieb in im Newsbeitrag:
ePexgeFe...@TK2MSFTNGP12.phx.gbl...
Danke für die schnelle Antwort
Markus
"Thomas Ramel" <t.r...@mvps.org> schrieb im Newsbeitrag
news:3F605CCB...@mvps.org...
Ich hab es mit
Sub Makro1()
For Each rngZelle In ActiveSheet.Range("A1:C10")
rngZelle.FormulaR1C1 = "='C:\Temp\[Test.xls]Test1'!" & "R" & Column
& "C" & Row
Next rngZelle
End Sub
probiert - funktioniert! Aber ist das nun die besser/inteligentere Variante
als die von Thomas Ramel im Thread? Nun, in dieser Variante bekomme ich
Bezüge in der anderen Variante Werte. Gibt es noch andere Unterschiede???
Gruß
Markus
"Alexander Wolff" <cfa...@gmx.de> schrieb im Newsbeitrag
news:bjpmnm$luqgq$1...@ID-89721.news.uni-berlin.de...
> Sub Makro1()
> For Each rngZelle In ActiveSheet.Range("A1:C10")
> rngZelle.FormulaR1C1 = "='C:\Temp\[Test.xls]Test1'!" & "R" &
Column
> & "C" & Row
rngZelle = rngZelle.Value
> Next rngZelle
> End Sub
--
Gruß Alexander (- Antworten bitte nur in die Newsgroup -)
Markus Eckel <Markus...@Nexgo.de> schrieb in im Newsbeitrag:
3f6073a6$0$25837$9b4e...@newsread4.arcor-online.net...
also, die Variante mit den Verknüpfungen dauert bei mir bei 4000 Zellen 7,7
Sekunden.
Die Variante mit den Werten dauert 9,7 Sekunden.
Jeweils Application.ScreenUpdating = False gesetzt. Alles klar?
Gruß
Markus
"Alexander Wolff" <cfa...@gmx.de> schrieb im Newsbeitrag
news:bjptir$lh17l$1...@ID-89721.news.uni-berlin.de...
Markus Eckel <Markus...@Nexgo.de> schrieb in im Newsbeitrag:
#kLEm7Ge...@TK2MSFTNGP10.phx.gbl...
Gruß
Markus
"Alexander Wolff" <cfa...@gmx.de> schrieb im Newsbeitrag
news:bjq1fb$lt93v$1...@ID-89721.news.uni-berlin.de...
Markus Eckel <Markus...@Nexgo.de> schrieb in im Newsbeitrag:
3f609212$0$3272$9b4e...@newsread2.arcor-online.net...
Alexander Wolff schrieb:
> Interessant! Wahrscheinlich liegts an dem sehr ausführlichen und
> sorgfältigen Code von Thomas' Quelle ... Du setzt bei Dir z.B. den Pfad
> nicht jedesmal neu zusammen ... das spart Zeit!
> Also: wahrscheinlich Gleichstand.
Ich vermute auch; die Funktion hat den 'Vorteil', dass sie individuell
einsetzbar ist.
Aber der eigentliche Aufruf lässt sich auch herausschälen und direkt einbinden.
Aber eine interessante Betrachtung wars allemal.