Activate notwendig?

Bild

Betrifft: Activate notwendig? von: Reinhard
Geschrieben am: 28.03.2005 20:59:21

Hallo Wissende.
mit copy und destination steh ich eh auf Kriegsfuss, da es manchmal klappt, mal nicht und ich es noch nicht verinnerlicht habe warum wieso usw.
In einem andren Forum bastelte ich jmdn die nachfolgenden Makros, Er wollte von Blatt1 Zeilen nach Blatt2 kopieren, wobei die in Blatt2 immer zwei Leerzeilen dazwischen haben und dann in Spalte 6 die jeweiligen 3 Zeilen verbunden werden.
Daraufhin entwickelte ich das erste Makro. Meiner Anscht nach völlig okay, aber der Debugger zeigt Fehler 1004 in der For-Schleife, und welche der beiden Anweisungen in der For-Schleife er bemängelt, liegt daran, welches Tabellenblatt grad aktuell ist.
ch habe daraufhin rumexperimentiert und Makro2 entwickelt, das läuft auch.
Aber, meine Frage, warum nuss ich Activate benutzen?
Wieso packt es vba nicht, dass ich in Tabelle1 stehe, bzw die ist aktiviert und ich kopier was von Blatt28 nach Blatt29, wieso muss ich da Blatt28 o.ä. aktivieren?
Und, logo, wie kann ich Makro2 verbessern?, also ohne activate usw. :-)
Lieben Gruß
Reinhard

Sub Makro1()
Set wsQ = Worksheets("Tabelle1")
Set wsZ = Worksheets("Tabelle2")
anz = wsQ.Range("A65536").End(xlUp).Row
For n = 1 To anz
    wsQ.Range(Cells(n, 1), Cells(n, 5)).Copy Destination:=wsZ.Cells(3 * (n - 1) + 1, 1)
    wsZ.Range(Cells(3 * (n - 1) + 1, 6), Cells(3 * (n - 1) + 3, 6)).MergeCells = True
Next n
Set wsQ = Nothing
Set wsZ = Nothing
End 
Sub 
Sub Makro2()
Set wsQ = Worksheets(1)
Set wsZ = Worksheets(2)
anz = wsQ.Range("A65536").End(xlUp).Row
wsZ.Activate
With wsQ
For n = 1 To anz
   .Range(.Cells(n, 1), .Cells(n, 5)).Copy Destination:=wsZ.Cells(3 * (n - 1) + 1, 1)
    wsZ.Range(Cells(3 * (n - 1) + 1, 6), Cells(3 * (n - 1) + 3, 6)).MergeCells = True
Next n
End With
Set wsQ = Nothing
Set wsZ = Nothing
End Sub

Bild


Betrifft: AW: Activate notwendig? von: Bert
Geschrieben am: 28.03.2005 21:07:31

Range(Cells...) bezieht sich immer auf das aktive Blatt, du musst das explizit angeben, z.B. so:

For n = 1 To anz
With wsQ
.Range(.Cells(n, 1), .Cells(n, 5)).Copy Destination:=wsZ.Cells(3 * (n - 1) + 1, 1)
End With
Next n

Bert


Bild


Betrifft: AW: Activate notwendig? von: NE
Geschrieben am: 28.03.2005 21:17:43

Abend Reinhard,

probier mal:
Sub Makro1()
Dim wsQ As Worksheet, wsZ As Worksheet
Dim anz&, n&
Set wsQ = Worksheets("Tabelle1")
Set wsZ = Worksheets("Tabelle2")
anz = wsQ.Range("A65536").End(xlUp).Row
For n = 1 To anz
    wsQ.Range(<b>wsQ.</b>Cells(n, 1), Cells(n, 5)).Copy Destination:=wsZ.Cells(3 * (n - 1) + 1, 1)
    wsZ.Range(<b>wsZ.</b>Cells(3 * (n - 1) + 1, 6), <b>wsZ.</b>Cells(3 * (n - 1) + 3, 6)).MergeCells = True
Next n
Set wsQ = Nothing
Set wsZ = Nothing
End Sub


du musst immer die Objectpointer explizit nochmal vor .cells setzen.

lg Nancy


Bild


Betrifft: Bert war schneller;-) von: NE
Geschrieben am: 28.03.2005 21:22:08

... wieso geht denne aber html nimmer ?
lg Nancy
--
ps: hier war die Vorschau korrekt, ich raffs net ...


Bild


Betrifft: danke euch beiden :-) m.T. von: Reinhard
Geschrieben am: 28.03.2005 21:40:03

Hallo Nancy,
kann natürlich in die Hose gehen, aber in der Vorschau kommt dein b-Tag durch, wies gleich hier im Forum rüberkommt, k.A., mal schauen.
Ist wsQ und wsZ fett habe ich Hans überlistet, wenn nicht, hat seine Software gewonnen:-)
lg Reinhard

Sub Makro1()
Dim wsQ As Worksheet, wsZ As Worksheet
Dim anz&, n&
Set wsQ = Worksheets("Tabelle1")
Set wsZ = Worksheets("Tabelle2")
anz = wsQ.Range("A65536").End(xlUp).Row
For n = 1 To anz
wsQ.Range(wsQ.Cells(n, 1), Cells(n, 5)).Copy Destination:=wsZ.Cells(3 * (n - 1) + 1, 1)
wsZ.Range(wsZ.Cells(3 * (n - 1) + 1, 6), wsZ.Cells(3 * (n - 1) + 3, 6)).MergeCells = True
Next n
Set wsQ = Nothing
Set wsZ = Nothing
End Sub


Bild


Betrifft: yeah, klappte:-) o.w.T.. von: Reinhard
Geschrieben am: 28.03.2005 21:43:32




Bild


Betrifft: for future;-) von: NE
Geschrieben am: 28.03.2005 22:29:36

mal davon abgesehen, dass jetz samst Einrückungen futsch sind,
hat's geklappt, ja ;-)))
Hach ich werd's wohl nie begreifen/mich dran gewöhnen,
dafür bin ich einfach zu alt ;-))

Egal wie, Reinhard, hauptsache es klappt jetzt :-)
BTW, bei solchen Sachen musst imho immer aufpassen,
so ein kleiner . 'dot' kann manchmal echt tückisch sein, wenn er fehlt ...,
hab wg. so'n scheiss schon Fälle erlebt, dass Excel als Prozess im Speicher blieb,
also immer wachsam mit Luchsaugen den debugger verfolgen ;-)

liebe Grüsse
Nancy


Bild


Betrifft: Ach, die Einrückungen von: Reinhard
Geschrieben am: 28.03.2005 22:55:19

krieg ich auch noch hin *hoff und guten Mutes bin*
hallo Nancy,
was mich wundert dass du nicht fragst WIE ich es denn gemacht habe?
Naja, werde Frauen nie verstehen *seufz*
lg Reinhard


 Bild

Beiträge aus den Excel-Beispielen zum Thema "Kopieren in Word"