758 Aufrufe
Gefragt in Tabellenkalkulation von
Hallo VBA-Leute,
ich habe ein kleines Problem mit einem Makro, welches ich selbst “aufgezeichnet“ habe.
So sieht es aus:

Sub Test()
Workbooks.Open Filename:= _
"\\Info06\daten\Center\03 Kosten\04 Controlling - Cost Accounting\07_Reports (Monat)\01_Test\Vorlagen\(Gesellschaft)_RCD_009_Personal CO_JJJJMM.xlsm"
Range("E18:E25").Select
Selection.Copy
Windows( _
"(Gesellschaft)_RCD_002_Personal CO final_JJJJMM.xlsm") _
.Activate
Range("B8").Select
ActiveSheet.Paste
Windows("(Gesellschaft)_RCD_009_Personal CO_JJJJMM.xlsm ").Activate
ActiveWindow.Close
End Sub


Bei der Aufzeichnung gab es kein Problem, doch beim Testen später doch.
Es wurde lediglich die Datei:
(Gesellschaft)_RCD_009_Personal CO_JJJJMM.xlsm
geöffnet, mehr nicht. Kein Kopieren, kein hinzufügen, kein schließen.
Habt ihr eine Idee, woran es liegt?

Vielleicht hat einer von Euch eine sauberere Lösung?

Danke im Voraus.

Max

11 Antworten

0 Punkte
Beantwortet von
hi Max ^^

Teste mal!

Gruss Nighty

Sub DateiLesen()
Workbooks.Open Filename:=Application.GetOpenFilename("Dateien(*.*), *.*", , "Datei auswählen", , False)
Workbooks(2).Worksheets(1).Range("E18:E25").Copy ThisWorkbook.Worksheets(1).Range("B8")
Workbooks(2).Close
End Sub


Namen der Tabellen bzw Index ist anzupassen
0 Punkte
Beantwortet von
Hallo Nighty,
Vielen Dank für Deine schnelle Hilfe, habe ich nicht wirklich erwartet.
Nun kurz zum Verständnis, was Tabellennamen bzw. Indexes angeht.

(Dateien(*.*), *.* ist was genau gemeint, etwa diesen Pfad:
"\\Info06\daten\Center\03 Kosten\04 Controlling - Cost Accounting\07_Reports (Monat)\01_Test\Vorlagen\

“Dateien auswählen” meist Du das:
(Gesellschaft)_RCD_009_Personal CO_JJJJMM.xlsm

Workbook(2) =
(Gesellschaft)_RCD_009_Personal CO_JJJJMM.xlsm

Worksheets(1) =
Tabellenname der Datei:
(Gesellschaft)_RCD_009_Personal CO_JJJJMM.xlsm

Worksheets(1).Range(„B8“) =[b]
(Gesellschaft)_RCD_002_Personal CO final_JJJJMM.xlsm")

Ist das korrekt,
ich muss irgendwo einen Fehler gemacht haben.
Bist Du so nett und ordnest Du für mich die Variablen zu.
Schon jetzt vielen Dank für die Hilfe

Gruß
Max
0 Punkte
Beantwortet von
hi Max ^^

Der code läuft auch per Index :-)

Folgendes macht der Code

Workbook 1 ist geöffnet
Start des Makros
Auswahl der Datei über einen Filedialog
Workbook 2 wird geöffnet
Der Range Bereich aus Workbook 2 / Worksheet 1 wird kopiert
Der kopierte Bereich in Workbook 1 / Worksheet 1 eingefügt
Workbook 2 geschlossen

Per Index werden keine namen benötigt

Oder die Worksheets werden neu positioniert

Teste mal den code und berichte uns .-)

Dann können wir bei bedarf die Namen noch einfügen

Gruss Nighty
0 Punkte
Beantwortet von
Hi Max :-)

Zur Verdeutlichung eines Index!

Angenommen du hast ein Workbook offen
Dann haben wir einen Workbookindex,die 1
Hast du zwei Workbooks offen dann hätten wir Index 1 und 2

Mit den Worksheets genauso
Angenommen du hast drei Woksheets,dann hätten wir Index 1 und 2 und 3

So lassen sich Workbooks wie auch Worksheets per Index ansprechen

Sollten sich allerdings die Positionen der Worksheets ändern(Hin und herschieben)
kommt die Reihenfolge des Indexes durcheinander und es müssen die Namen angesprochen werden

Gruss Nighty
0 Punkte
Beantwortet von
hi Max :-)

Drei Varianten!

Gruss Nighty

Per index mit filedialog

Sub DateiLesen1()
Workbooks.Open Filename:=Application.GetOpenFilename("Dateien(*.*), *.*", , "Datei auswählen", , False)
Workbooks(2).Worksheets(1).Range("E18:E25").Copy ThisWorkbook.Worksheets(1).Range("B8")
Workbooks(2).Close
End Sub

Per Name mit filedialog

Sub DateiLesen2()
Dim WksQuelle As String, WksZiel As String, DDatei As String
WksQuelle = "Tabelle1" 'Von der Datei die geöffnet werden soll,dessen Worksheetname
WksZiel = "Tabelle1" 'Von der Datei die befüllt wird,dessen Worksheetname
DDatei = Application.GetOpenFilename("Dateien(*.*), *.*", , "Datei auswählen", , False)
Workbooks.Open Filename:=DDatei
Workbooks(Mid(DDatei, InStrRev(DDatei, "\") + 1)).Worksheets(WksZiel).Range("E18:E25").Copy ThisWorkbook.Worksheets(WksQuelle).Range("B8")
Workbooks(Mid(DDatei, InStrRev(DDatei, "\") + 1)).Close
End Sub

Per Worksheetname und Workbookname und festen Pfad

Sub DateiLesen3()
Dim WksQuelle As String, WksZiel As String, DDatei As String
WksQuelle = "Tabelle1" 'Von der Datei die geöffnet werden soll,dessen Worksheetname
WksZiel = "Tabelle1" 'Von der Datei die befüllt wird,dessen Worksheetname
DDatei = "D:\Temp\test.xls" 'Hier dein Pfad mit Dateiname
Workbooks.Open Filename:=DDatei
Workbooks(Mid(DDatei, InStrRev(DDatei, "\") + 1)).Worksheets(WksZiel).Range("E18:E25").Copy ThisWorkbook.Worksheets(WksQuelle).Range("B8")
Workbooks(Mid(DDatei, InStrRev(DDatei, "\") + 1)).Close
End Sub
0 Punkte
Beantwortet von
Hallo Nighty,
vielen Dank für Deine Vorschläge. Ich habe mich für Vorschlag 3 entschieden, da ich immer noch nicht richtig begriffen habe, wie die Vorschläge 1 und 2 arbeiten. Es liegt aber definitiv an mir !!!
So sieht das von mir veränderte Makro bei mir aus:

Dim WksQuelle As String, WksZiel As String, DDatei As String
WksQuelle = "Personalkosten"
WksZiel = "Reporting"
DDatei = "\\Info06\daten\Center\03 Kosten\04 Controlling - Cost Accounting\07_Reports (Monat)\01_Test\Vorlagen\(Gesellschaft)_RCD_009_Personal CO_JJJJMM.xlsx "

Workbooks.Open Filename:=DDatei
Workbooks(Mid(DDatei, InStrRev(DDatei, "\") + 1)).Worksheets(WksQuelle).Range("E18:E25").Copy ThisWorkboo.Worksheets(WksZiel).Range("B8")
Workbooks(Mid(DDatei, InStrRev(DDatei, "\") + 1)).Close

Ich bekomme jedoch eine Fehlermeldung mit "Laufzeitfehler ‚424‘ – Objekt erforderlich".
Hier nochmals und es zu verstehen.

1. Die Datei (Gesellschaft)_RCD_009_Personal CO_JJJJMM.xlsx wird geöffnet.
2. In dieser Datei gibt es ein Tabellenblatt mit dem Namen „Personalkosten“
3. Hier werden die Werte aus den Zellen E18 bis E25 kopiert (gemeint ist entnommnen).
4. In der Datei (wo das Makro gestartet wird) im Tabellenblatt „Reporting“ ab Zelle B8 die Werte hinzugefügt werden.

Höchstwahrscheinlich habe ich irgendwo einen kleinen Fehler eingebaut. Würdest Du es Dir bitte anschauen?
Ferner, soweit es möglich ist, sollten nicht nur die Werte, sondern auch die Formate übernommen werden, kann man dies auch einbauen.

Schon jetzt vielen Dank.
Gruß
Max
0 Punkte
Beantwortet von
hi Max .-)

Bei Netzwerken muss ich passen!
Da hab ich keine Praxiskenntnisse!

Vielleicht können andere User da Tips geben!

Gruss Nighty
0 Punkte
Beantwortet von
Hi Nighty,

kannst Du mir aber bestätigen, dass bis auf dem Pfad, ich alles richtig eingetragen habe?

Danke und Gruß
Max
0 Punkte
Beantwortet von
Hallo Max .-)

Soweit ist alles ok!
Die Syntax des Pfades und Dateiaufruf ist mit dem NetzwerkAdmin abzusprechen
In einem Netzwerk hat der Admin das sagen ,mit entsprechenden sicherheitsmechanismen

Gruss Nighty
0 Punkte
Beantwortet von
hi Max :-)

Wähle eine Datei an gewünschter Position (Falls du Zugriffsrechte hast)
Der Pfad wird in A1 angezeigt,diesen dann im Code eintragen

Sub Pfadanzeige()
Cells(1, 1) = Application.GetOpenFilename("Dateien(*.*), *.*", , "Datei auswählen", , False)
End Sub


Gruss Nighty
...