Herbers Excel-Forum - das Archiv

autofill mit vbs

Bild

Betrifft: autofill mit vbs
von: bogi

Geschrieben am: 04.01.2007 19:26:26
Hallo Excel-Community,
erst mal ein gesundes, schöpferisches Jahr 2007. Habe seit einiger Zeit nicht mehr mit VBA/VBS gearbeitet und stehe promt vor einem Problem!
Szenario:
Es müssen über VBS mehrere (ca.3000) Exceldateien aktualisiert werden (hängt mit der MwSt. zusammen).
Dafür ist es erforderlich eine Formel in eine Zelle einzutragen "D17", was auch über VBScript klappt. Weiterhin muß diese Formel dann in weitere Bereiche kopiert werden. ("D18" bis "D37" und "D47" bis "D64")Dies versuchte ich vergebens mit "AutoFill" zu tun. Alle Möglichkeiten, die Definition über Variablen oder direkt mit "Range" oder "Cells" anzugeben endeten in der gleichen Fehlermeldung "24 / 33 Bezeichner erwartet" o. "24 / 33 unbekannter Kompilierungs-fehler".
<.SelectedRange.AutoFill Destination: = Range("D18:D37">
Die Err-Position 33 ist in dem Fall immer vor "Range" nach dem "=". Übrigens, im Excel selber, in einem Modul, funktioniert dieser Code bestens.
Kann man die AutoFill- Methode überhaupt über ein externes Programm(Script) steuern. Was müßte ich tun um das Script zum laufen zu bekommen. Ist es vielleicht besser mit einer Copy- Methode zu arbeiten und durch die Zeilen zu iterieren.
Für etwas Hilfe und einen eventuellen Code-Snippet wäre ich sehr dankbar.
Bild

Betrifft: AW: autofill mit vbs
von: Daniel Eisert

Geschrieben am: 04.01.2007 19:33:06
Hallo
wenn nur darum geht eine Formel einzutragen, ist AUTOFILL nicht erforderlich.
das geht viel einfacher mit
- Range("D17:D37").formula = "Hier dein Formeltext"
damit kannst du alle Zellen gleichzeitig befüllen.
oder, wenn der Formeltext in D17 schon drinsteht
- range("D18:D37").formula = Range("D17").formula
Gruß, Daniel
Bild

Betrifft: AW: autofill mit vbs
von: bogi
Geschrieben am: 04.01.2007 19:43:51
Hallo Daniel,
danke für deine schnelle Reaktion, wenn es so funktioniert..........!
Teste es morgen in der Firma, melde mich dann noch mal.
Danke!
Gruß bogi.
Bild

Betrifft: AW: autofill mit vbs kleine Korrektur
von: Daniel Eisert

Geschrieben am: 04.01.2007 19:55:00
Hallo
habs grad nochmal geprüft
der 2. Teil ist nicht ganz korrekt, richtig ist, wenn sich der Zellbereich direkt anschließt:
- range("D17:D37").formula = Range("D17").formula
wenn die Formel in Zellbereich übernommen werden soll, der sich nicht direkt anschließt, musst du es mit COPY machen
- range("D17").copy destination:=range("D47:D67")
sonst gibts Probleme mit den Relativen bezügen.
Gruß, Daniel
Bild

Betrifft: AW: autofill mit vbs kleine Korrektur
von: bogi

Geschrieben am: 05.01.2007 09:28:54
Guten Morgen Daniel,
der erste Teil hat gut funktioniert, daß hilft mir schon weiter.
Die Kopiermethode ist mit der gleichen Fehlermeldung fehlgeschlagen wie eingangs beschrieben. "range("D17").copy destination:={}range("D47:D67")"
"test.vbs(39, 32) Kompilierungsfehler in Microsoft VBScript: Anweisung erwartet"
Haltepunkt ist die geschweifte Klammerung. Bei AutoFill ist es die gleiche Fehlermeldung. Innerhalb Excel (VB-Editor) funktioniert es. Ich habe momentan keine Idee, an was es liegen könnte. Vielleicht hast Du ja noch ne Idee!?
Bild

Betrifft: AW: autofill mit vbs kleine Korrektur
von: Daniel Eisert

Geschrieben am: 05.01.2007 12:14:12
Hallo
leider kenne ich mich mit VBS nicht aus.
hört sich aber so an als wäre da ein Bug drin, den man irgendiwe umschiffen muß.
d.h. du könntest mal die verschiedenen kopiermethoden ausprobieren:
range("D17").copy
range("D47:D67").pastespecial xlpasteformulas
range("D17").copy
range("D47:D67").select
activesheet.paste
ggf. könnte es auch sein, daß es erforderlich ist, immer den ganzen Objektpfad mit anzugeben, also Workbook.Sheet.Range
noch ne möglichkeit wäre, um die Formel in nichtangrenzende Zellbereiche zu kopieren, folgenden Code zu verwenden, dann sollten auch die Bezüge stimmen:
range("D46:D66").formulaR1C1 = range("D17").formulaR1C1
noch einfacher wärs natürlich, wenn dein gernerierter Formeltext den du in D17 reinschreibst, bereits in der R1C1-Schreibweise vorliegt, dann kannst du ihn auch direkt in alle betroffenen Zellen reinschreiben.
oder du schreibts das ganze so um, daß es innerhalb von Excel funktioniert, dh. du erstelltst eine Exceldatei, die in einer Liste alle umzuwandelnden Dateien enthält und die nacheinander die Dateien öffnet und die Änderungen durchführt. Denn innerhalb von Excel funktionierts ja.
noch ne Mehtode wäre unter umständen möglich, da es sich ja um eine Änderung der Mehrwertsteuer handelt, müsste duch eigentlich nur die 0,16 in der Formel durch 0,19 ersetzt werden, das könnte dann auch einfach mit REPLACE gehen.
Dabei musst du allerding aufpassen, ob die zu ersetzenden Textschnipsel nicht zufälligerweise noch in anderen Abschnitten der Formel vorkommen können, wo ein Ersetzen unerwünscht wäre.
Gruß, Daniel
 Bild