Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1216to1220
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

Paste special funktioniert nur dreimal

Paste special funktioniert nur dreimal
Martin
Hallo Forum,
als VBA-Anfänger habe teilweise Code aufgezeichnet und soweit ich es mit meinen Grundkenntnissen hinbekomme, auch zu ergänzen.
Mein untenstehender Code funktioniert einwandfrei, aber nur dreimal. Dann bekomme ich den Laufzeitfehler 1004 angezeigt.
Ich möchte die Zellen A7:A114 aus Spalte 7 in die Zellen A7:A114 der Spalte 1028 kopieren. Die Zellen aus Spalte 7 enthalten Formeln, die ich als Werte in die Spalte 1028 kopiert haben möchte, bevor ich das Ganze sortiere.
Ich habe das ganze Archiv durchstöbert nach Paste Special, einfügen usw., aber für meine Frage keine Erklärung gefunden. Ich habe auch versucht mit ‘value‘ zu arbeiten, aber ich bekomme es nicht hin.
Könnt Ihr mir helfen?
Hat das etwas mit der Zwischenablage zu tun?
Sheets("Tabelle1").Select
Rows("7:7").Select
Selection.Copy
Rows("1028:1028").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("A1028").Activate
Application.CutCopyMode = False
ActiveWorkbook.Worksheets("Datenverzeichnis").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Datenverzeichnis").Sort.SortFields.Add Key:=Range( _
"A1029"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("Datenverzeichnis").Sort
.SetRange Range("A9:DM1028")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Gruß Martin
AW: Paste special funktioniert nur dreimal
18.06.2011 19:36:16
Martin
Nachtrag:
Entschuldigt bitte, Tabelle1 ist natürlich das Datenverzeichnis, so steht es auch im Code.
Gruß Martin
AW: Paste special funktioniert nur dreimal
19.06.2011 09:32:44
Hajo_Zi
Hallo Martin,
vieleicht reicht es, wenn Du auf select verzichtest? Das ist zu 99,9% nicht notwendig
With Sheets("Tabelle1")
.Rows("7:7").Copy
.Rows("1028:1028").SelectPasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
End With


AW: Paste special funktioniert nur dreimal
19.06.2011 10:00:05
Martin
Guten Morgen Hajo,
bei
.Rows("1028:1028").SelectPasteSpecial Paste:=xlPasteValues
bekomme ich den Laufzeitfehler 438.
Die Methode wird nicht unterstützt.
Gruß Martin
Anzeige
AW: Paste special funktioniert nur dreimal
19.06.2011 10:03:43
Hajo_Zi
Hallo Martin,
Fehler
.Rows("1028:1028").PasteSpecial Paste:=xlPasteValues
Gruß Hajo
AW: Paste special funktioniert nur dreimal
22.06.2011 18:10:55
Martin
Hallo Hajo,
nachdem Franz mir erklärt hat, dass es bei der Ausführung von Code mit aktivierten Comboboxen zu Problemen kommen kann, muss ich mich noch einmal melden.
Ich hätte zu meiner Frage mehr Informationen liefern müssen.
Werde ich zukünftig bestimmt machen.
Gruß Martin
AW: Paste special funktioniert nur dreimal
19.06.2011 10:35:54
Martin
Hallo Hajo,
ich habe die Rows durch die Range mit deinem Code ersetzt. Der ist in jedem Fall übersichtlicher.
Ich bin mir nicht sicher, ob ich dass schon ausprobiert habe. Es funktioniert jetzt.
Warum der Laufzeitfehler 1004 kam, würde ich aber gerne wissen. Die VBA - Programmierung macht mir echt viel Spaß und möchte dazulernen. Vielleicht kann mir das ja einer sagen.
Ich hoffe, dass es ok ist, dass ich die Frage offen lasse.
Vielen Dank, Hajo
Gruß Martin
Anzeige
AW: Paste special funktioniert nur dreimal
19.06.2011 21:35:41
fcs
Hallo Martin,
ich hatte deinen Original-Code bei mir unverändert in einer kleinen Testdatei probiert. Er lief ohne Fehler beliebig oft durch.
Der Fehler 1004 passiert gerne, wenn im Code die Objekte ncht sauber/unvollständig/fehlerhaft referenziert sind. Außerdem kann es vorkommen, dass Prozeduren nicht korrekt funktionieren, wenn bestimmte Objekte (z.B. Comboboxen) zum Zeitpunkt des Makrostarts selektiert oder aktiviert sind. Man kann die Select-Anweisung in Makros auch immer nur auf Objekte (Zellen etc.) des aktiven Blattes anwenden.
Tückisch sind auch Prozeduren in Tabellenblattmodulen. Hier beziehen sich Anweisungen wie:
Range("A2:A7")
oder
Cells(Zeile,Spalte)
immer auf die Tabelle, unter der die Prozedur angelegt ist, und nicht auf das aktive Blatt, wie es bei Prozeduren in allgemeinen Modulen der Fall ist.
Es ist deshalb ratsam, den Verweis auf die Objekte im Code möglichst vollständig zu machen und dabei mit "With Objekt ... End With" Strukturen zu arbeiten bzw. mit Objekt-Variablen, denen mit Set-Anweisungen die entsprechenden Objekte zugewiesen werden.
Nachfolgend noch mein Vorschlag für eine Optimierung deiner Prozedur
Gruß
Franz
Sub aaTest()
'Variablen-Deklaration
Dim wksData As Worksheet
'Objektzuweisung
Set wksData = Worksheets("Datenverzeichnis")
'Objektanwendung
With wksData
.Activate
Application.ScreenUpdating = False
.Rows(7).Copy
.Rows(1028).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
.Sort.SortFields.Clear
.Sort.SortFields.Add _
Key:=.Range("A1029"), SortOn:=xlSortOnValues, Order:=xlAscending, _
DataOption:=xlSortNormal
With .Sort
.SetRange wksData.Range("A9:DM1028")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Application.ScreenUpdating = True
End With
Range("A8").Select 'nicht unbedingt nötig ggf. besser als: Range("A1028").Select
End Sub

Anzeige
AW: Paste special funktioniert nur dreimal
22.06.2011 18:02:38
Martin
Hallo Franz,
ich habe heute erst die Zeit für eine Rückmeldung.
Deine Erklärung ist sehr aufschlussreich. Der Code wir nach einer Passwortabfrage mit einer Combobox ausgeführt. Ist die Eingabe richtig, wird über Call das Makro ausgeführt.
Ich werde die With Object oder Objekt-Variablen zukünftig in meinem Projekt einsetzen.
Deine Erklärung hat mir gezeigt, dass ich im Falle einer erneuten Frage, viel mehr Informationen liefern muss.
Danke für die Hilfe.
Gruß Martin
ohne PasteSpecial funktioniert es besser
19.06.2011 10:22:52
Erich
Hi Martin,
manchmal ist eine einfache Wertzuweisung besser. Probier mal copyValues1
anstelle von copyValues0:

Sub copyValues0()
Sheets("Tabelle1").Select
Rows("7:7").Select
Selection.Copy
Rows("1028:1028").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("A1028").Activate
Application.CutCopyMode = False
End Sub
Sub copyValues1()
Sheets("Tabelle1").Select
Rows(1028) = Rows(7).Value
Range("A1028").Activate
End Sub
Rows("1028:1028") schreibt man besser, kürzer, geschickter: Rows(1028).
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: ohne PasteSpecial funktioniert es besser
19.06.2011 10:50:25
Martin
Hallo Erich,
ich habe Deine Mitteilung erst gesehen, nachdem ich Hajo geantwortet habe.
Habe copyValues1 ausprobiert. - Läuft super!
Die Wertzuweisung war es.
Vielen, vielen Dank Erich.
Gruß Martin
und die dritte Variante
19.06.2011 12:24:20
Erich
Hi Martin,
danke für deine Rückmeldung!
Hier noch eine Ergänzung/ein Tipp:

Sub copyValues2()
With Sheets("Tabelle1")
.Rows(1028) = .Rows(7).Value
.Select              ' nur, falls das gebraucht wird
.Cells(1028).Select  ' nur, falls das gebraucht wird
End With
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort und: Schönen Sonntag noch!
Anzeige
AW: und die dritte Variante
22.06.2011 18:22:14
Martin
Hallo Erich,
ich habe leider jetzt erst die Zeit für meine Rückmeldung.
Ich denke, dass ich noch viel zu viel Schnick-Schnack bei der Erstellung von Code mache, aber es läuft bisher.
Durch Deine (Eure) Erklärung verstehe ich so langsam immer mehr.
Muss noch viel ausprobieren.
Danke für den Tipp. Ich wünsche Dir einen schönen Feiertag.
Gruß Martin

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige