Excel Makro -Vereinfachen und leere Zellen fuellen

Hallo,

probiere gerade ein Makro zu schreiben. Sinn des Makros ist es, aus einem Formular verschiedene Werte in eine Uebersicht zu kopieren, damit man das nicht immer manuell machen muss.

Das kopieren funktioniert soweit ganz gut. Es kann jedoch vorkommen, dass in dem Formular ein Wert nicht angegeben ist. Wenn dem so ist, springt er mir mit meinem Makro nicht in die naechste Zeile.

Es gaebe also zwei Moeglichkeiten dem ganzen entgegenzuwirken.

  1. Es wird immer auf einen Wert Bezug genommen (der immer ausgefuellt werden muss) sofern dieser in der Uebersicht dann vorhanden ist, springt er fuer eine Neueingabe automatich in die naechste Zeile.

  2. Die Zellen in dem Formular werden ueberprueft. Sofern kein Wert in der Zelle vorhanden ist, soll ein #NA erscheinen. Anschliessend wird dann kopiert.

Ebenso muss ich dieses Kopiermakro fuer jeden Wert einzeln ausfuehren. Ist im Grunde kein groesseres Problem, nur ne Copy / Paste Geschichte, aber ggf. hat ja wer ne Idee wie man das vereinfachen koennte.

Das Makro wie ich es im Moment habe sieht so aus (ist derzeit auf 3 Werte beschraenkt, sind aber ca. 30 Werte die kopiert werden sollen) :

Sub Macro1()
’ Macro1 Macro

Windows(„X.xlsx“).Activate 'wechseln zum Formular
Range(„K3:L3“).Select '1. Wert auswaehlen
Selection.Copy 'kopieren
Windows(„X Overview.xlsm“).Activate 'in Uebersicht wechseln
Range(„b5“).Select 'in Uebersicht bereich makieren, wo Wert stehen soll
For i = 5 To 5700 'check ob Zeile bereits beschrieben ist, oder nicht
If ActiveCell.Value „“ Then ActiveCell.Offset(1, 0).Select Else Exit For
Next i
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

=False, Transpose:=False 'einfuegen

Windows(„X.xlsx“).Activate
Range(„b8:d8“).Select
Selection.Copy
Windows(„X Overview.xlsm“).Activate
Range(„c5“).Select
For i = 5 To 5700
If ActiveCell.Value „“ Then ActiveCell.Offset(1, 0).Select Else Exit For
Next i
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

=False, Transpose:=False

Windows(„X.xlsx“).Activate
Range(„j8:l8“).Select
Selection.Copy
Windows(„X Overview.xlsm“).Activate
Range(„d5“).Select
For i = 5 To 5700
If ActiveCell.Value „“ Then ActiveCell.Offset(1, 0).Select Else Exit For
Next i
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

=False, Transpose:=False

End Sub

Wuerde mich freuen, wenn mir jemand unter die Arme greifen koennte.

Gruss~~

Marcel

Hallo Hangover,

Das kopieren funktioniert soweit ganz gut. Es kann jedoch
vorkommen, dass in dem Formular ein Wert nicht angegeben ist.
Wenn dem so ist, springt er mir mit meinem Makro nicht in die
naechste Zeile.

Es gaebe also zwei Moeglichkeiten dem ganzen entgegenzuwirken.

  1. Es wird immer auf einen Wert Bezug genommen (der immer
    ausgefuellt werden muss) sofern dieser in der Uebersicht dann
    vorhanden ist, springt er fuer eine Neueingabe automatich in
    die naechste Zeile.

  2. Die Zellen in dem Formular werden ueberprueft. Sofern kein
    Wert in der Zelle vorhanden ist, soll ein #NA erscheinen.
    Anschliessend wird dann kopiert.

dein Code macht ja dreimal das Gleiche. Nehmen wir mal das erste,
also Kopieren von K3:L3 nach B5
Dein Code sucht vor dem Kopieren die erste leere Zelle in B5:Bx
und kopiert dann dort hin.
Wo soll da ein #NA erscheinen und warum?
Oder meinst du eine leere Zelle in K3:L3 ?

Im Code kopierst du erst K3:L3 nach B5, also steht in C5 der Wert
von L3. Danach kopierst du B8:smiley:8 nach C5, also wird L3 in C5 überschrieben!?

Bitte um weitere (Auf-) klärungen.

Gruß
Reinhard

Hallo,

wichtig : ich habe (am Ende) noch ein Problem bei der Übergabe des Range-Objektes. Ich hoffe Reinhard kann da noch was daraus basteln

jedes „activieren“ und „selectieren“ kostet Zeit. Schreibe statt dessen

Wert_in_neuer_Zelle = Wert_aus_alter_Zelle
im Beispiel schreibt er den Wert aus A3 in K3 hinein:

Range(„K3“).Value = Range(„A3“).Value

Da es sich hier um verschiedene Dateien handelt muss diese natürlich auch mit angegeben werden.

Aus Range(„K3“).Value müsste nun Workbooks(„X.xlsx“).ActiveSheet.Range(„K3“).Value werden

Da dies auf Dauer nervt kann man dies abkürzen mit

Set X = Workbooks(„X.xlsx“).ActiveSheet
Set XO = Workbooks(„X Overview.xlsm“).ActiveSheet
XO.Range(„B5“).Value = X.Range(„K3:L3“).Value

Ich gehe jetzt immer davon aus dass die Zellen im aktiven Worksheets sind. Ansonsten müsste man aus „.ActiveSheet“ eben „.Worksheet(“…")" machen.
Nun bleibt das Problem dass du mit „Range“ immer nur einen festen Zellwert eintragen kannst.
Soweit ich das einschätze soll dies nicht so sein sondern er soll in der Übersicht immer in die letzte freie Zeile den neuen Wert schreiben. Dies geht jedoch nur mit „Cells“.

Inhalt = Cells(Zeile, Spalte).Value

Nun bist du flexibel. Die Spalte soll gleich bleiben, können wir also mit „1“ (für Spalte A) oder „2“ (für Spalte B) eintragen. Um die letzte beschriebene Zeile herauszufinden können wir den Befehl

LZeile = XO.Range(„B5“).End(xlDown).Row

benutzen.

Jetzt können wir die unflexible Befehlszeile variabel gestalten:

XO.Cells(LZeile, 2).Value = X.Range(„K3:L3“).Value

In deinem Code möchtest du die nächsten 5695 Zeilen prüfen ob die Zelle leer ist. Dieser Code wird jedoch in dem Stil nix bringen da du immer auf „ActiveCell“ zugreifst. ActiveCell ist aber (in deinem Fall) B5 (da du dies „selectiert“ hast). Somit bringt die ganze Prüfung nix :smile:

Wenn, hättest du prüfen müssen:

If XO.Cells(i, 2).Value „“ Then …

Aber das können wir uns zum Glück ja jetzt komplett sparen.

Deinen Code kann man also bisher so umsetzen:

Set X = Workbooks(„X.xlsx“).ActiveSheet
Set XO = Workbooks(„X Overview.xlsm“).ActiveSheet

’ Eintrag Wert 1
LZeile = XO.Range(„B5“).End(xlDown).Row
XO.Cells(LZeile, 2).Value = X.Range(„K3:L3“).Value

’ Eintrag Wert 2
LZeile = XO.Range(„B5“).End(xlDown).Row
XO.Cells(LZeile, 2).Value = X.Range(„B8:smiley:8“).Value

schon wesentlich übersichtlicher :smile:. Aber immer noch unflexibel. Für jeden Eintrag benötigst du 2 Codezeilen.
Jetzt gibt es zwei Möglichkeiten:

  1. man schreibt alle Ausgangszellen in ein Array (guck mal in die Hilfe). Dann könnte man über eine Schleife alle Werte des Arrays auslesen und als Range eintragen (auf der rechten Seite der „Gleichung“). Somit muss man - wenn später mehr Zellen hinzugefügt werden müssen nur im Array die Werte hinten angetragen werden und fertig. Wird aber mit der Zeilenlänge einfach unübersichtlich.

  2. diese Möglichkeit hat zwar mehr Zeilen, aber dafür ist sie übersichtlicher. Wir stellen fest: jeder Wert Eintrag hat das selbe Schema. Somit eignet es sich gut für eine eigene „Funktion“.

Sub Eintrag(AWert As Range)
Set X = Workbooks(„X.xlsx“).ActiveSheet
Set XO = Workbooks(„X Overview.xlsm“).ActiveSheet
LZeile = XO.Range(„B5“).End(xlDown).Row
XO.Cells(LZeile, 2).Value = X.Range(AWert).Value
End Sub

Jetzt müssen wir - pro Eintrag - noch eine Zeile Code schreiben wo die Ausgangswerte an die „Funktion“ übergeben werden.

Sub Einträge_gesamt()
Call Eintrag(„K3:L3“) ’ Eintrag Wert 1
Call Eintrag(„B8:smiley:8“) ’ Eintrag Wert 2
usw.
End Sub

Rechnen wir zusammen: mit deinem (fehlerhaften) Code benötigst du 9 Zeilen pro Eintrag. Macht 270 Zeilen Code für 30 Einträge.

Mit meinem Code benötigen wir
6 Zeilen „Funktion“
30 Zeilen Call-Befehle
36 Zeilen (+ ein paar mehr was Reinhard hoffentlich korrigiert)

-)

LG Tobi@s

Hallo Tobias,

jedes „activieren“ und „selectieren“ kostet Zeit.

das auch, genauso übel ist daß Selektierei/activecell usw. den
Code unleserlich macht.

Wert_in_neuer_Zelle = Wert_aus_alter_Zelle
im Beispiel schreibt er den Wert aus A3 in K3 hinein:
Range(„K3“).Value = Range(„A3“).Value

Ja, klappt bei einzelnen Zellen.
Range(„A3“).Value = Range(„K3:L3“).Value geht nicht.

Range(„K3:L3“).Copy Range(„A3“) funktioniert aber der Anfrager
will die Werte aus K3:L3 haben und nicht evtl. Formeln.
PS: prehtml klappt nicht bei Vba-darstellung hier. Der pre-Tag
funktioniert.

Da es sich hier um verschiedene Dateien handelt muss diese
natürlich auch mit angegeben werden.
Aus Range(„K3“).Value müsste nun
Workbooks(„X.xlsx“).ActiveSheet.Range(„K3“).Value werden

*hmmh* beim „Mitangeben=referenzieren“ stimme ich dir zu aber ich gebe
auch das Blatt mit an. Workbooks(„X.xlsx“).ActiveSheet ist mir zu
vage.

Nun bleibt das Problem dass du mit „Range“ immer nur einen
festen Zellwert eintragen kannst.
Soweit ich das einschätze soll dies nicht so sein sondern er
soll in der Übersicht immer in die letzte freie Zeile den
neuen Wert schreiben. Dies geht jedoch nur mit „Cells“.

Wieso geht das nur mit Cells? Es mag je nach Fall einfacher erscheinen
Cells oder Range zu benutzen aber funktionieren müßte es mit beiden
Varianten.

Um die letzte beschriebene Zeile herauszufinden
können wir den Befehl

LZeile = XO.Range(„B5“).End(xlDown).Row
benutzen.

Wenn unter B5 nix steht ist dann LZeile 65xxx oder 1xxxxxx.

In deinem Code möchtest du die nächsten 5695 Zeilen prüfen ob
die Zelle leer ist. Dieser Code wird jedoch in dem Stil nix
bringen da du immer auf „ActiveCell“ zugreifst. ActiveCell ist
aber (in deinem Fall) B5 (da du dies „selectiert“ hast). Somit
bringt die ganze Prüfung nix :smile:

? wieso bringt seine Prüfung nix?
Hier ist nochmal sein Code:

Sub tt()
Dim i
Range("b5").Select 'in Uebersicht bereich makieren, wo Wert stehen soll
For i = 5 To 5700 'check ob Zeile bereits beschrieben ist, oder nicht
 If ActiveCell.Value "" Then
 ActiveCell.Offset(1, 0).Select
 Else
 Exit For
 End If
Next i
MsgBox ActiveCell.Address
End Sub

Angenommen B5:B8 haben Zellinhalte, darunter sid leere Zellen so
läuft der Code schon bis selektierter Zelle B9, stellt fest daß sie
leer ist und führt Exit For aus. B9 bleibt dann selektiert.

PS2: was ich noch vom Afrager wissen will ist was es mit diesen 5700
auf sich hat, stehen darunter Daten o.ä.?

Wenn, hättest du prüfen müssen:
If XO.Cells(i, 2).Value „“ Then …

Geht auch.

  1. diese Möglichkeit hat zwar mehr Zeilen, aber dafür ist sie
    übersichtlicher. Wir stellen fest: jeder Wert Eintrag hat das
    selbe Schema. Somit eignet es sich gut für eine eigene
    „Funktion“.

Mit meinem Code benötigen wir
6 Zeilen „Funktion“
30 Zeilen Call-Befehle
36 Zeilen (+ ein paar mehr was Reinhard hoffentlich
korrigiert)

Schau mal bitte meinen nachstehenden ungetesteten Codeansatz.
Zwei Dumme ein Gedanke, ich dachte mir auch den Anfragercode
der quasi dreimal das Gleiche macht anderst zu basteln,
einen Hauptcode der dreimal den gleichen Untercode aufruft.

Gruß
Reinhard

Option Explicit

Sub Test()
Call Kopier("K3:L3", "B5")
Call Kopier("B8:smiley:8", "C5")
Call Kopier("J8:L8", "D5")
End Sub

Sub Kopier(ByVal strQuelle As String, ByVal strZiel As String)
Dim Zei As Long
With Workbooks("X Overview.xlsm").Worksheets("Tabelle1")
 Workbooks("X.xlsx").Worksheets("Tabelle1").Range(strQuelle).Copy
 Zei = Application.Max(.Cells(.Rows.Count, Left(strZiel, 1)).End(xlUp).Row + 1, 5)
 .Range("B" + Zei).PasteSpecial xlPasteValues
 Application.CutCopyMode = False
End With
End Sub

-)

LG Tobi@s

Danke erstmal fuer die Antwort!

Also das eine ist ein Formular. Als Beispiel, es wird ein Datum abgefragt, Kundenname, Adresse, etc.
Jetzt kann es vorkommen, dass zum Beispiel die Adresse vom „Ausfueller“ nicht im Formular eingetragen wurde. Deshalb sollte da dann ein NA stehen. Das Problem was ich habe, wenn ich eine leere Zelle im Formular habe, habe ich auch eine leere Zelle in der Uebersicht. Wo nix ist, kann ja auch nix kopiert werden. Wenn die Zelle also leer ist, springt er mit meinem Code nicht in die naechste Zeile in der Uebersicht.
Wieso ich das auf 5000 irgendwas Zeilen beschraenkt habe, weiss ich auch nicht wirklich. Untendrunter steht nichts. Kann man also beliebig ausweiten.

Die Bereiche, beispielsweise K3:L3 beinhalten immer nur einen Wert. Beispiel Datum. Sprich, mein Wert aus K3:L3 steht am Ende lediglich in B5, B8:smiley:8 dann in C5 usw…

Auch hier danke :smile:

Den Code hab ich mal getested, er bringt mir aber bei der Zeile

Zei = Application.Max(.Cells(.Rows.Count, Left(strZiel, 1)).End(xlUp).Row + 1, 5)
.Range(„B“ + Zei).PasteSpecial xlPasteValues

Ein Type Mismatch. Verstehe auch diese Zeile nicht wirklich. Kannst du mir das ggf etwas erklaeren?

Ok, hab das ganze mal etwas modifiziert. Problem, welches ich jetzt habe ist, dass er mir die Werte die ich kopieren moechte untereinander setzt in der Uebersicht. Diese sollen aber nebeneinander stehen.

Sprich, eine Spalte mit Datum, eine mit Kundenname… Datum unter Datum, Kundenname unter Kundenname. Das ist das Makro wie ichs bislang hab~

Option Explicit

Sub Test()
Call Kopier(„K3:L3“, „B5“)
Call Kopier(„B8:smiley:8“, „C5“)
End Sub

Sub Kopier(ByVal strQuelle As String, ByVal strZiel As String)
Dim Zei As Long
Dim temp As String

With Workbooks(„Demo Overview.xlsm“).Worksheets(„Changwon Demo“)
Workbooks(„X.xlsx“).Worksheets(„Sheet3“).Range(strQuelle).Copy
Zei = Application.Max(.Cells(.Rows.Count, Left(strZiel, 1)).End(xlUp).Row + 1, 5)
.Range(„B“ + CStr(Zei)).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

=False, Transpose:=False

Application.CutCopyMode = False
End With

End Sub

Ok, hab das ganze mal etwas modifiziert. Problem, welches ich
jetzt habe ist, dass er mir die Werte die ich kopieren moechte
untereinander setzt in der Uebersicht. Diese sollen aber
nebeneinander stehen.

Hallo Marcel,

„Type mismatch“ kam wegen dem Pluszeichen in
.Range(Left(„B“ + Zei)…
Da gehört ein & hin.

Und „B“ war ein Fehler, da gehört
.Range(Left(strZiel, 1) & Zei)…
hin. Probiere also diesen Code:

Sub Kopier(ByVal strQuelle As String, ByVal strZiel As String)
Dim Zei As Long
With Workbooks("X Overview.xlsm").Worksheets("Tabelle1")
 Workbooks("X.xlsx").Worksheets("Tabelle1").Range(strQuelle).Copy
 Zei = Application.Max(.Cells(.Rows.Count, Left(strZiel, 1)).End(xlUp).Row + 1, 5)
 .Range(Left(strZiel, 1) & Zei).PasteSpecial xlPasteValues
 Application.CutCopyMode = False
End With
End Sub

Gruß
Reinhard

Hi Reinhard,

vielen Dank nochmals.

Klappt soweit, habe jedoch noch folgendes Problem

wenn ich zb b10:d10 leer lasse im Formular, kopiert er mir natuerlich nichts in die Uebersicht. In dem Fall kopiert er mir einmal h10:l10, was ja soweit auch gut ist. Wenn ich jetzt aber ein weiteres Formular kopiere, bleibt fuellt er die leere Zeile voll.

Option Explicit

Sub Test()
Call Kopier(„K3:L3“, „B5“)
Call Kopier(„B8:smiley:8“, „C5“)
Call Kopier(„J8:L8“, „D5“)
Call Kopier(„B10:smiley:10“, „E5“)
Call Kopier(„H10:L10“, „F5“)
End Sub

Verstehst was ich meine?

Beispiel…
Formular von Kunde 1
Datum 22.2.2222
Name Kunde 1
Adresse (nicht angegeben)
Zeit 2.22 Uhr

Formular von Kunde 2
Datum 11.1.1111
Name Kunde 2
Adresse Adresse Kunde 2
Zeit 1.11 Uhr

Wenn ich also Formular 1 mit dem Makro kopiere, bekomme ich in der 1. Zeile der Uebersicht:

22.2.2222 Kunde 1 ___________ 2.22 Uhr

Wenn ich jetzt das neue Formular kopiere steht in der 1. Zeile

22.2.2222 Kunde 1 Adresse Kunde 2 2.22 Uhr

in der Zeile darunter
11.1.1111 Kunde 2 ___________ 1.11 Uhr

usw usw…

Hmm… Noch ne Idee, wie ich dem vorbeugen kann? Mit ner Eingabe von NA wie ich es im opening Threat angegeben hab? Oder gibts nen simpleren Trick? Ggf. koennte man das Feld Kundenname auch als Referenz fuer das weiterruecken nehmen, sofern das geht?

wenn ich zb b10:d10 leer lasse im Formular, kopiert er mir
natuerlich nichts in die Uebersicht. In dem Fall kopiert er
mir einmal h10:l10, was ja soweit auch gut ist. Wenn ich jetzt
aber ein weiteres Formular kopiere, bleibt fuellt er die leere
Zeile voll.

Hallo Marcel,

in einem anderen Beitrag hast du geschrieben:

„Die Bereiche, beispielsweise K3:L3 beinhalten immer nur einen Wert.
Beispiel Datum. Sprich, mein Wert aus K3:L3 steht am Ende lediglich
in B5, B8:smiley:8 dann in C5 usw…“

Heißt das K2:L3 und die anderen Zellbereiche sind jeweils
verbundene Zellen?

Kannst du mal Beispielmappen hochladen mit dem obersten Link in
FAQ:2606 .

Gruß
Reinhard

Exakt, die Zellen in der Quelldatei sind verbunden, in der Zieldatei nicht.

Ein Beispiel findest du hier:

Uebersicht:
http://www.file-upload.net/download-7445714/X-Overvi…

Formular:
http://www.file-upload.net/download-7445716/X.xlsx.html

Exakt, die Zellen in der Quelldatei sind verbunden, in der
Zieldatei nicht.
Uebersicht:
http://www.file-upload.net/download-7445714/X-Overvi…

Formular:
http://www.file-upload.net/download-7445716/X.xlsx.html

Hallo Marcel,

Option Explicit

Sub Test()
Call Kopier("K3:L3", "B5")
Call Kopier("B8:smiley:8", "C5")
Call Kopier("J8:L8", "D5")
Call Kopier("B10:smiley:10", "E5")
Call Kopier("H10:L10", "F5")
End Sub

Sub Kopier(ByVal strQuelle As String, ByVal strZiel As String)
Dim Zei As Long
With Workbooks("kwX-Overview.xlsm").Worksheets("Sheet1")
 Workbooks("kwX.xlsx").Worksheets("sheet3").Range(strQuelle).Copy
 Zei = Application.Max(.Cells(.Rows.Count, Left(strZiel, 1)).End(xlUp).Row + 1, 5)
 With .Range(Left(strZiel, 1) & Zei).Cells(1, 1)
 .PasteSpecial xlPasteValues
 If .Value = "" Then .Value = "n/a"
 End With
 Application.CutCopyMode = False
End With
End Sub

Gruß
Reinhard

1 Like

Ich glaube das passt. Super, herzlichen Dank!!

Habe jetzt nochmal ein Problem bekommen.

Mein Code sieht folgendermassen aus:

Option Explicit

Sub Test()
Call Kopier(„G47:H47“, „B5“)
Call Kopier(„B8:smiley:8“, „C5“)
Call Kopier(„J8:L8“, „D5“)
Call Kopier(„B10:smiley:10“, „E5“)
Call Kopier(„H10:L10“, „F5“)
Call Kopier(„C12:smiley:12“, „G5“)
Call Kopier(„C14:smiley:14“, „H5“)
Call Kopier(„C16:smiley:16“, „I5“)
Call Kopier(„H12:J12“, „J5“)
Call Kopier(„H14:J14“, „K5“)
Call Kopier(„H16:J16“, „L5“)
Call Kopier(„B19:smiley:19“, „M5“)
Call Kopier(„F24:H24“, „N5“)
Call Kopier(„B28:smiley:28“, „P5“)
Call Kopier(„J28:L28“, „Q5“)
Call Kopier(„G36:H36“, „R5“)
Call Kopier(„K36:L36“, „S5“)
Call Kopier(„B54:smiley:54“, „T5“)
Call Kopier(„J54:L54“, „U5“)
Call Kopier(„B56:smiley:56“, „V5“)
Call Kopier(„B21:smiley:21“, „Y5“)
Call Kopier(„J19:L19“, „Z5“)
Call Kopier(„J21:L21“, „AA5“)

End Sub

Sub Kopier(ByVal strQuelle As String, ByVal strZiel As String)
Dim Zei As Long
With Workbooks(„X Overview.xlsm“).Worksheets(„Sheet1“)
Workbooks(„X.xlsx“).Worksheets(„Sheet3“).Range(strQuelle).Copy
Zei = Application.Max(.Cells(.Rows.Count, Left(strZiel, 1)).End(xlUp).Row + 1, 5)
With .Range(Left(strZiel, 1) & Zei).Cells(1, 1)
.PasteSpecial xlPasteValues
If .Value = „“ Then .Value = „#N/A“
End With
Application.CutCopyMode = False
End With
End Sub

Wenn ich AA abrufe, setzt er mir den kopierten Wert aus J21:L21 nicht in AA5, sondern in A101. In A habe ich eine Durchnummerierung fortlaufende Nummern bis 100 stehen. Wieso er mir das aber in A101 und nicht in AA5 setzt ist mir schleierhaft.

Jemand ne Idee?

Wenn ich AA abrufe, setzt er mir den kopierten Wert aus
J21:L21 nicht in AA5, sondern in A101. In A habe ich eine
Durchnummerierung fortlaufende Nummern bis 100 stehen. Wieso
er mir das aber in A101 und nicht in AA5 setzt ist mir
schleierhaft.

Hallo Marcel,

Left(strZiel,1) klappt nicht bei Zellen rechts von Spalte Z
Left(…) ist ja in Excel-Funktion Links(…)
somit müßtest du erkennen warum aus AA5 nur A gemacht wird.

Sub Kopier(ByVal strQuelle As String, ByVal strZiel As String)
Dim Zei As Long, **Spa**
**Spa** = Split(Range(strZiel).Address(1, 1), "$")(1)
With Workbooks("X Overview.xlsm").Worksheets("Sheet1")
 Workbooks("X.xlsx").Worksheets("Sheet3").Range(strQuelle).Copy
 Zei = Application.Max(.Cells(.Rows.Count, **Spa** ).End(xlUp).Row + 1, 5)
 With .Range( **Spa** & Zei).Cells(1, 1)
 .PasteSpecial xlPasteValues
 If .Value = "" Then .Value = "#N/A"
 End With
 Application.CutCopyMode = False
End With
End Sub

Gruß
Reinhard

1 Like

Mein Held, Danke!!!

Kann man das ganze auch flexibler gestalten und keinen Dateinamen angeben? Sprich, das Makro soll einfach die Werte aus dem bereits geoeffneten Excel Formular in die Uebersicht kopieren, bzw. die Daten aus einem Excel Formular, welches sich im selben Ordner befindet wie das Overview file per Makro synchronisieren…

Jemand eine Idee?