Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1420to1424
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

mein Makro bezieht sich auf falsche Zellen

mein Makro bezieht sich auf falsche Zellen
10.04.2015 11:54:29
Jenny
Hallo alle zusammen,
habe mir am ende stehendes Makro aufgezeichnet.
Ich habe folgendes vor.
Vor dem ausführen mache ich folgendes:
1. Ich kopiere ich einen Text in die erste freie Zeile in Tabelle 1 , in Spalte A und B.
2. ich kopiere einen Text mit beliebig vielen Zeilen in Tabelle2!A:C
3. ich kopiere einen Text mit genauso vielen Zeilen wie in Tabelle2 in Tabelle3!A:D
Das Makro soll nun folgendes machen
1. Den Inhalt von Tabelle2 Spalte B ans Ende von Tabelle1 Spalte C kopieren. Ich habe mich im Makro auf die selektierten Zellen festgelegt, aber wie gesagt, die Anzahl variiert jedes mal, genauso wie die Zeile wo es eingefügt werden soll, mit jedem Ausführen sich nach unten verschiebt.
2. Den Inhalt von Tabelle3 Spalte E ans Ende von Tabelle1 Spalte D kopieren und hierbei die Werte einfügen. Dabei selbes Problem wie in Punkt 1.
Hierbei ist es auch so, dass wenn ich z.B. 20 Zeilen eingefügt habe, ab Zeile 21 bis Zeile 1000 durch eine Formel #WERT! ausgegeben wird und nur in den ersten 20 Zeilen eine Zahl, mir geht es natürlich nur um die Zahlen.
3. Den zuvor eingefügte Inhalt in Tabelle1 Spalten A und B bis in die nun letzte Zeile mit Inhalt herunterkopieren. Hierbei natürlich auch das Problem, dass sich die Zeile in der ich das eingefüge nach jedem Ausführen des Makros nach unten verschiebt.
4. Tabelle 1 nach Spalte D nach Alter aufsteigend sortieren. Auch hier ist es natürlich so, dass es nach jedem Ausführen mehr als die 550 Zeilen im Makro werden.
5. die Inhalte in Tabelle2!A:C und Tabelle3!A:D löschen, auch (auch wenn es bislang im Makro fehlt) die Bilder, die mit in Tabelle3 Spalte B kopiert wurden.
Ich weiß es ist vieles zu ändern, aber bitte helft mir

Sub Makro4()
' Makro4 Makro
' Tastenkombination: Strg+i
Sheets("Tabelle2").Select
Selection.Copy
Sheets("Tabelle1").Select
ActiveSheet.Paste
Sheets("Tabelle3").Select
Selection.Copy
Sheets("Tabelle1").Select
Range("D538").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("A538:B538").Select
Selection.Copy
Range("A538:B550").Select
ActiveSheet.Paste
Sheets("Tabelle2").Select
Columns("A:C").Select
Selection.ClearContents
Sheets("Tabelle3").Select
Columns("A:D").Select
Selection.ClearContents
Sheets("Tabelle1").Select
Range("A1:D550").Select
Range("A538").Activate
ActiveWorkbook.Worksheets("Tabelle1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Tabelle1").Sort.SortFields.Add Key:=Range("D1:D550") _
, SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Tabelle1").Sort
.SetRange Range("A1:D550")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
.SortMethod = xlPinYin
.Apply
End With
End Sub
LG
Jenny

17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: mein Makro bezieht sich auf falsche Zellen
11.04.2015 00:50:32
Rudolf
Ich versuche es jetzt noch mal Jenny, deine Beschreibung denkt sich nicht mit dem Code. Könntest du die Datei hoch landen.

AW: mein Makro bezieht sich auf falsche Zellen
12.04.2015 16:54:35
Jenny
Hallo Rudolf,
sorry bin ganz kurzfristig übers Wochenende verreist, jetzt bin ich auf dem Geburtstag meines Vaters, habe jetzt mal eine ganz simple Datei erstellt.
Das Makro soll folgendes machen,
ich hab jetzt mal ein ganz einfaches Beispiel gemacht, Ziel ist das aus Tabelle1 die Tabelle Ziel wird, und Excel sich die Daten aus der Tabelle 2 und 3 nimmt.
Dabei ist es jedesmal eine andere Anzahl an Werten in Tabelle 2 und 3 (in meinem Beispiel sinds 35) und natürlich stehen bei jedem Ausführen mehr Einträge bereits in Tabelle 1.
Da Tabelle3 Spalte E aus Formeln berechnet wird, sollten die Werte in Tabelle1 eingefügt werden.
dazu noch der Text den ich mit B gekennzeichnet habe bis in die dann letzte Zeile kopiert werden.
Dazu soll noch die Tabelle2!A:C und Tabelle3!A:D (nicht Spalte E) vom Makro gelöscht werden (auch vorhandene Bilder in Tabelle3 Spalte B) und die Tabelle1 nach Spalte C absteigend sortiert werden.
Hoffe jetzt ist es nachvollziehbarer.
VG
Jenny
PS: Die #NV! in Tabelle3 sind so gewollt, damit ich nicht jedesmal den Zellbereich in dem die Formel steht anpassen muss, wenn eine andere Anzahl in Spalte 3 eingefügt wird als beim Einfügen zuvor.
PPS: Die Buchstaben sind so gewählt dass ihr seht was zu was gehört, im Original steht in jeder Zelle ein anderer Text und es sind auch deutlich mehr Zeilen.
https://www.herber.de/bbs/user/97039.xlsx

Anzeige
Lösungsansatz
13.04.2015 16:59:38
Michael
Hi Jenny,
ich hab mir Deine Tabelle mal angesehen und ein Makro erstellt, das tun sollte, soweit ich die Aufgabenstellung begriffen habe.
Dabei ist zu beachten: ich habe mir das Blatt "Ziel" gespart und schreibe in Tabelle1, da Du das in Deinem Makroentwurf ja auch so gemacht hast.
Außerdem löscht das Makro *alle* Grafiken in Tabelle3. Wenn Du das nicht willst, solltest Du die Zeilen auskommentieren (Foreach Grafiken bis einschließlich next).
Ich habe bei Problemstellungen in diesem Stil (Deine Tabelle war etwas arg abstrakt) immer das Gefühl, man könnte besser helfen, wenn man mehr wüßte. Ich vermute mal, Du kopierst Webseiten zunächst in Excel, um dann einzelne Daten abzugreifen (wo sonst hat man das Problem mit überschüssigen Grafiken?) und in die gewünschte Tabelle zu kopieren. Das alles ließe sich unter Umständen auch insgesamt lösen, incl. Internetzugriff, wenn die Geschichte etwas konkreter beschrieben wäre, ohne Stunden mit der Programmierung einer "halben" Lösung zu vertun.
Also gut, Datei anbei: https://www.herber.de/bbs/user/97056.xlsm
Ach so, klicke "Jenny's Delight" an.
Happy Exceling,
Michael

Anzeige
AW: Lösungsansatz
13.04.2015 22:55:14
Jenny
Hallo Michael,
du liegst in deiner Vermutung mit den Webseiten richtig, aber ich denke mal es wird nicht möglich sein, auch die Abfrage per Makro zu automatisieren, da ich die Webseiten selbst noch am googlen bin und wenn ich eine hab sie direkt in Excel einfüge. Aber danke für das Angebot. Werde dann mal testen und mich wieder melden.
LG
Jenny

AW: Lösungsansatz
13.04.2015 23:05:14
Jenny
Hallo Michael,
danke ertmal.
Wenn ich auf Jenny's Delight klicke, kommt Das Makro 97056.xlsm!SpaltenKopieren kann nicht ausgeführt werden. DAs Makro ist möglicherweise in dieser Arbeitsmappe nicht verfügbar oder alle Makros wurden deaktiviert.
Aktiviert hab ichs beim Öffnen der Datei.
Zu deiner Anmerkung in dem Makro mit Spalte E in Tabelle3,
im Original stehen die zu kopierenden Daten in Spalte E, wenn sie im Beispiel in Spalte D stehen hab ich mich im Beispiel vertan, sorry.
LG
Jenny

Anzeige
Sorry
14.04.2015 18:14:37
Michael
Hi Jenny,
was ist mir denn da passiert?
Abgesehen davon, daß ich kein X365 habe, ist es (zum Glück!) bei mir auch nicht gegangen.
Anbei die geänderte Datei (da war noch Makro-Müll drin, den hab ich entfernt und den Jenny-Button nochmal "richtig" zugewiesen): https://www.herber.de/bbs/user/97076.xlsm
Sieh Dir bitte erst Mal die Tabelle2 und -3 an, in 3 ist ne Grafik, damit Du siehst, daß die gelöscht wird, und in 2 habe ich die Spalte gelb markiert und "zwischengespeichert", da sie ja bei jeder Ausführung gelöscht wird. Mit copy kopierst Du alles, mit pastespecial nur Werte (oder Formeln, oder Formate oder, oder - wie beim händischen Kopieren/Einfügen mit "Inhalte einfügen").
Dann gehste wieder auf Tabelle1 und es funzt hoffentlich.
Happy Exceling,
Michael

Anzeige
AW: Sorry
14.04.2015 19:08:47
Jenny
Hallo Michael,
was du mir geschickt hast, funktioniert, aber ich brauche auf jeden Fall ein Makro, dass sich auf Tabelle3 Spalte E bezieht und habe keine Ahnung wie ich dein Makro dazu ändern müsste, wie gesagt der Fehler lag in meiner Bsp. Datei nicht an dem Text den ich geschrieben hab.
Außerdem, wozu Tabelle2 Spalte G und Tabelle3 Spalte F in deinem Beispiel? geht das auch ohne?
LG
Jenny

ok...
14.04.2015 19:41:18
Michael
Hi Jenny,
freut mich, wenn es funzt.
Schau Dir doch bitte den Text von dem Makro an, da stehen die Kommentare drin:

Option Explicit
Sub SpaltenKopieren()
Dim zt1, von, bis As Long
Dim Grafiken As Shape
zt1 = Sheets("Tabelle1").UsedRange.SpecialCells(xlCellTypeLastCell).Row
' ermittelt die letzte beschriebene Zeile in Tabelle1
' Voraussetzung: Spalten A und B sind beschrieben,
' C und D leer für das Kopieren der weiteren Spalten
MsgBox zt1
von = 1 ' bei Bedarf ändern
bis = Sheets("Tabelle2").Range("B" & von).End(xlDown).Row
MsgBox bis
With Sheets("Tabelle2")
.Range("B" & von & ":B" & bis).Copy Sheets("Tabelle1").Range("C" & zt1)
End With
MsgBox "Daten aus Tabelle2 kopiert"
' keine erneute Prüfung von "von" und "bis", da
' "mit genauso vielen Zeilen"
With Sheets("Tabelle3")
' ************** hier ****************
.Range("E" & von & ":E" & bis).Copy
' ******** die zwei großen D durch E ersetzt *************
End With
With Sheets("Tabelle1")
.Range("D" & zt1).PasteSpecial (xlValues)
End With
Application.CutCopyMode = False
MsgBox "Daten aus Tabelle3 kopiert"
With Sheets("Tabelle1")
.Range("A" & zt1 & ":B" & zt1).Copy .Range("A" & zt1 + 1 & ":A" & zt1 + bis - von)
End With
Application.CutCopyMode = False
With Sheets("Tabelle2")
.Range("A" & von & ":C" & bis).Clear
End With
With Sheets("Tabelle3")
' hier ***************
.Range("A" & von & ":D" & bis).Clear
' *********** C durch D ersetzt **********
For Each Grafiken In .Shapes
Grafiken.Delete
Next
' löscht *alle* Grafiken in Tabelle3
End With
End Sub
Ich habe hier die Spaltenbuchstaben geändert, und zwar in den Zeilen zwischen denen mit den vielen ****.
Die msgboxen kannst Du übrigens auskommentieren, die hatte ich nur zum Testen eingeblendet.
wozu Tabelle2 Spalte G und Tabelle3 Spalte F in deinem Beispiel? geht das auch ohne?
Klar geht das ohne, ich hab's nur ein paar Mal ausprobiert, und in T2/G Deine Daten zwischengespeichert, damit ich sie nicht nach jeder Löschung durch das Makro neu eingeben muß. In T3/F analog, einfach zu Testzwecken.
Ok. Falls Du nicht zurechtkommen solltest, meldest Dich halt nochmal.
Bitte beachte den Hinweis oben im Makro:
' Voraussetzung: Spalten A und B sind beschrieben,
' C und D leer für das Kopieren der weiteren Spalten
Das heißt, bevor Du das Makro bei der laufenden Arbeit erneut aufrufst, mußt Du händisch die beiden neuen "Texte" in A und B eingeben - die Spalten C und D in der gleichen Zeile werden ohne Mucks überschrieben.
So war natürlich Deine Aufgabenstellung, aber vergiß es nicht.
Schöne Grüße,
Michael

Anzeige
AW: ok...
14.04.2015 20:37:50
Jenny
Hallo Michael,
hey das funktioniert auch mit der Originaltabelle, danke für deine viele Mühe.
Jetzt muss ich nur noch schaun, dass ich dem auchn Shortcut zuweise.
Aber eine Frage hätte ich dann doch noch, gibt es die Möglichkeit, das Makro noch so zu ändern, dass ich die Tabelle1 beliebig (beliebig oft und beliebig vom Namen) umbenennen kann ohne das Makro anpacken zu müssen? Oder sind Excel da dann Grenzen gesetzt?
LG
Jenny

AW: ok...
14.04.2015 20:39:03
Jenny
Hallo Michael,
sorry muss alles zurücknehmen, es klappt doch nicht, kanns sein dass du das mit dem Sortieren vergessen hast?
LG
Jenny

Anzeige
AW: ok...
15.04.2015 13:45:01
Werner
Hallo Jenny,
schon mal mit dem Makrorekorder gearbeitet? Einfach den Code von Michael durchlaufen lassen, dann hast du ja in Tabelle1 deine Daten so wie du sie brauchst, nur das Sortieren fehlt noch.
Makrorekorder an, Daten nach deinen Bedürfnissen sortieren, Makrorekorder aus. Den aufgezeichneten Code des Makrorekorder in den Code von Michael integrieren (am Ende wenn das Daten kopieren durch ist).
Werner

AW: ok...
15.04.2015 20:30:29
Michael
Hallo Werner,
danke für die Hilfestellung!
Hallo Jenny,
das "Sortieren" hab ich tatsächlich übersehen.
Hier noch mal das ganze Ding:

Sub SpaltenKopieren()
Dim zt1, von, bis As Long
Dim Grafiken As Shape
Dim Blatt As String
Blatt = ActiveSheet.Name
MsgBox Blatt
zt1 = Sheets(Blatt).Range("B1").End(xlDown).Row
' ermittelt die letzte beschriebene Zeile in Blatt
' Voraussetzung: Spalten A und B sind beschrieben,
' C und D leer für das Kopieren der weiteren Spalten
If Range("c" & zt1)  "" Or Range("d" & zt1)  "" Then
MsgBox "Fehler: Zelle C oder D" & zt1 & " nicht leer!" & vbLf & _
"D.h., in A und B" & zt1 + 1 & " bitte Werte eingeben"
Exit Sub
End If
von = 1 ' bei Bedarf ändern
bis = Sheets("Tabelle2").Range("B" & von).End(xlDown).Row
MsgBox bis
With Sheets("Tabelle2")
.Range("B" & von & ":B" & bis).Copy Sheets(Blatt).Range("C" & zt1)
End With
'MsgBox "Daten aus Tabelle2 kopiert"
' keine erneute Prüfung von "von" und "bis", da
' "mit genauso vielen Zeilen"
With Sheets("Tabelle3")
.Range("E" & von & ":E" & bis).Copy
' Du schreibst "SpalteE", aber die ist leer: Deine Daten stehen in D
' ich habe die Werte zum Testen durch Bezüge ("Formeln") ersetzt
End With
With Sheets(Blatt)
.Range("D" & zt1).PasteSpecial (xlValues)
End With
Application.CutCopyMode = False
'MsgBox "Daten aus Tabelle3 kopiert"
With Sheets(Blatt)
.Range("A" & zt1 & ":B" & zt1).Copy .Range("A" & zt1 + 1 & ":A" & zt1 + bis - von)
End With
Application.CutCopyMode = False
MsgBox "alles kopiert"
With Sheets(Blatt)
.Range("A1:D" & zt1 + 1 + bis - von).Sort key1:=.Range("D1"), Header:=xlNo
End With
With Sheets("Tabelle2")
.Range("A" & von & ":C" & bis).Clear
End With
With Sheets("Tabelle3")
.Range("A" & von & ":D" & bis).Clear
' hier bei Bedarf auf D statt C setzen
For Each Grafiken In .Shapes
Grafiken.Delete
Next
' löscht *alle* Grafiken in Tabelle3
End With
End Sub
Hoffe, es funzt bei Dir (auch): es sortiert, es ist noch ne Sicherheitsabfrage drin und es funktioniert von jedem Blatt aus ("Tabelle1" = Variable Blatt = activesheet), aber nicht mit jedem ("T2" ist T2 und Ende, aber Du kannst nach dem gleichen Muster weitere Variablen bzw. Blattnamen einführen)(und nach sheets index recherchieren).
Happy Exceling,
Michael

Anzeige
AW: ok...
16.04.2015 07:52:06
Jenny
Hallo Michael,
um ehrlich zu sein, ich hab das mit dem Blattnamen jetzt sein gelassen, habe einfach die beiden Zeilen die sich aufs sortieren beziehen in die selbe Stelle in mein Makro kopiert und Blatt wieder in Tabelle1 geändert. Hatte zuvor schon alle deine Kommentare und alle Msg Boxen gelöscht, wollte das nicht nochmal alles ändern.
Und Werner, ja ich hätte es aufzeichnen können, dann aber nicht gewusst, wie ich aus der beim Aufzeichenn gewählten Range die jedesmal benötigte mache, (selbes Probelem wie das weshalb ich die anderen Probleme hier geschildert habe,
LG
Jenny

Anzeige
AW: ok...
16.04.2015 08:38:13
Jenny
Hallo Michael,
sorry dass ich mich doch nochmal melden muss
das Makro sortiert in der falschen Reihenfolge.
mit

With Sheets("Tabelle1")
.Range("A1:G" & zt1 + 1 + bis - von).Sort key1:=.Range("D1"), Header:=xlNo
End With
sortiert er in der falschen Reihenfolge
dann hab ichs mal selbst probiert,
mit

With Sheets("Tabelle1")
.Range("A1:G" & zt1 + 1 + bis - von).Sort key1:=.Range("D1"), Order1:=xlDescending, Header:= _
xlNo
End With
erscheinen plötzlich Einträge in Spalte D mehrfach in der Liste, die aber in Tabelle3 nur einmal da waren.
Was ist da los?
LG
Jenny

Anzeige
AW: ok...
16.04.2015 09:20:17
Jenny
Hallo Michael,
sorry dass ich mich doch nochmal melden muss
das Makro sortiert in der falschen Reihenfolge.
mit

With Sheets("Tabelle1")
.Range("A1:G" & zt1 + 1 + bis - von).Sort key1:=.Range("D1"), Header:=xlNo
End With
sortiert er in der falschen Reihenfolge
dann hab ichs mal selbst probiert,
mit

With Sheets("Tabelle1")
.Range("A1:G" & zt1 + 1 + bis - von).Sort key1:=.Range("D1"), Order1:=xlDescending, Header:= _
xlNo
End With
erscheinen plötzlich Einträge in Spalte D mehrfach in der Liste, die aber in Tabelle3 nur einmal da waren.
Was ist da los?
LG
Jenny

hat sich erledigt
16.04.2015 09:20:42
Jenny
hat sich erledigt

AW: hat sich erledigt
16.04.2015 12:15:13
Michael
Hi Jenny,
freut mich.
Der Thread wird wohl in Kürze geschlossen, deshalb wollte ich mich nochmal melden.
Happy Exceling,
Michael

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige