Vollständige Referenzierung usw.
02.08.2009 11:44:16
Erich
Hi Stefan,
zunächst: Mein Code war falsch. Hier eine hoffentlich richtige Version (ungetestet):
Option Explicit
Sub test()
Dim wbQuelle As Workbook
For Each wbQuelle In Application.Workbooks
If wbQuelle.Name Like "Pricecurve_*" Then Exit For
Next
If wbQuelle Is Nothing Then
MsgBox "eine Datei mit dem Namen ""Pricecurve"" ist nicht geöffnet."
Else
Workbooks("Calc.xls").Worksheets("Data").Cells(88, 15).Resize(24) = _
wbQuelle.Sheets("Arkusz1").Cells(3, 4).Resize(24).Value
End If
End Sub
Nun zu deiner Frage1: Wenn du in einem "normalen" Modul schreibst: Cells(1,2), wird damit
B1 auf dem (zufällig gerade) aktiven Blatt angesprochen.
Wenn man B1 auf Sheets(2) braucht, muss man Sheets(2).Cells(1, 2) schreiben.
Sheets(2).Range(Cells(1, 2), Cells(2, 2)) gibt deshalb einen Fehler, wenn Sheets(2) nicht aktiv ist.
(Hier würde man ja versuchen, mit Zellen des aktiven Blatts einen Bereich in Sheets(2) zu bauen.)
Hier müsste man korrekt schreiben:
Sheets(2).Range(Sheets(2).Cells(1, 2), Sheets(2).Cells(2, 2))
Das kann man mit einer With-Klammer verschönern und auch beschleunigen:
With Sheets(2)
.Range(.Cells(1, 2), .Cells(2, 2))
End With
In der Schreibweise Sheets(2).Range("B1:B2") gibt es das Problem nicht.
zu Frage 2:
Workbooks("Pricecurve_*.xls") hätte nur dann evtl. Sinn, wenn es genau ein Workbook gibt,
dessen Name mit Pricecurve_ beginnt.
Was aber, wenn es kein solches Workbook oder gar mehrere gibt?
"Workbooks" ist eine Auflistung. Wenn man auf ein Element dieser Auflistung, also ein Workbook,
zugreifen will, muss man einen Index oder den Namen eines Workbooks angeben:
Workbooks(1) oder Workbooks("abc.xls"). Symbole wie "*" oder "?" sind hier nicht möglich.
Beim Like geht das natürlich - u. a. dafür ist Like da, es ist darauf vorbereitet (siehe VBA-Hilfe zu Like).
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort