1.6k Aufrufe
Gefragt in Tabellenkalkulation von
Hallo,
ich versuche mich inzwischen an einem anderen Makro in welchem ich die Formatierung einer Tabelle 1:1 übernehmen muss/will.
die Spaltenbreite konnte ich über pastespecial paste:=8 übernehmen.
Die entsprechende Ziffer für das Kopieren der Zeilenhöhe habe ich nicht gefunden also habe ich versucht mir hiermit zu helfen:

for i = 1 to 7
Sheets("Ziel").Rows(i).RowHeight = Sheets("Quelle").Rows(i).RowHeigt
next i
'Range(A1:M7) kopieren


für den Tabellenkoopf der immer übernommen wird

und
for k = 8 to zeilenzahl
if activeCell.value >0 then
Sheets("Ziel").Rows(ActiveCell).RowHeight = Sheets("Quelle").Rows(ActiveCell).RowHeigt
'Zeile kopieren
'nächste Zelle auswählen
elseif ... ' wie 1. if nur wenn .value = "EP"
end if
next k



In der 1. for Schleife übernimmt excel die Zeilenhöhe. in der 2. for Schleife bekomme ich die Fehlermeldung "Laufzeitfehler 13 Typen unverträglich" und der Debugger markiert folgende Zeile:
Sheets("Ziel").Rows(ActiveCell).RowHeight = Sheets("Quelle").Rows(ActiveCell).RowHeight

Eine Falsch deklarierte Variable kann es ja nicht sein, da ich die Zeilenhöhe direkt auf die angesprochene Zeile übertragen will oder? Ich habe vorsichtshalber schonmal alle variabeln (i,k, und zeilenzahl) als variant deklariert anstatt als integer... Hat wie erwartet nichts gebracht.

Könnt Ihr mir helfen?
kennt jemand die paste:=X Ziffer für die Zeilenhöhe bzw. weiß jemand wie ich meinen Code Anpassen muss um die Fehlermeldung zu umgehen?

Vielen Dank im Voraus für schnelle Hilfe
SirSolaris

8 Antworten

0 Punkte
Beantwortet von
Hi,

auf die Schnelle ungeprüft: Probiers mal mit

Sheets("Ziel").Rows(ActiveCell.Row).RowHeight = Sheets("Quelle").Rows(ActiveCell.Row).RowHeight

Gruß Mr. K.
0 Punkte
Beantwortet von m-o Profi (22.9k Punkte)
Hallo,

du kannst die Zeilenhöhe mit
Worksheets("Ziel").Rows("1:7").RowHeight = 30

festlegen (hier für die Zeilen 1 bis 7).
Für die Übertragung hat dir Mr. K ja schon die Lösung gepostet.

Aber mal eine andere Frage: Du sprichst in deiner zweiten Schleife immer nur die aktive Zelle an. Ist das so gewollt?

Hier würden zum Beispiel die Zeilen ab 8 durchlaufen und der Wert in Spalte A würde geprüft:

For k = 8 To zeilenzahl
If Worksheets("Quelle").Cells(k, 1).Value > 0 Then
Worksheets("Ziel").Rows(k).RowHeight = Worksheets("Quelle").Rows(k).RowHeight
End If
Next k


Beim Arbeiten mit mehreren Tabellenblättern würde ich auch immer das entsprechende Arbeitsblatt mit ansprechen.

Gruß

M.O.
0 Punkte
Beantwortet von
Hallo,
xlKing: so klappts danke!
M.O.: Ja du hast recht deine Variante ist prinzipiell einfacher. Hab sie gleich mal versucht und das ganze um eine Variable k erweitert:

dim l as integer
dim k as integer
dim zeilenzahl as integer
l = 8
For k = 8 To zeilenzahl

If Sheets("Quelle").Cells(k, 6).Value > 0 Then
Sheets("Ziel").Rows(l).RowHeight = Sheets("Quelle").Rows(k).RowHeight
Sheets("Quelle").Range(Cells(k, 1), Cells(k, 15)).Copy
Sheets("Ziel").Range(Cells(l, 1), Cells(l, 15)).PasteSpecial Paste:=xlPasteAll
l = l + 1
end if
next k

so wird nur dann im Sheets Ziel die nächste Zeile angegangen wenn die Zeile aus Sheets Quelle wirklich übernommen wurde
jetzt bekopmme ich aber in der zeile
Sheets("Ziel").Range(Cells(l, 1), Cells(l, 15)).PasteSpecial Paste:=xlPasteAll

immer die Fehlermeldung "laufzeitfehler 1004 anwendungs oder objektdefinierter Fehler"
Auch das deaktivieren des Blattschutzes mit

sheets("Ziel").unprotect password:="hallo"

führt nicht zum gewünschten Erfolg.

Weißt du wo der Fehler liegt?
Danke euch beiden schonmal!
Gruß
0 Punkte
Beantwortet von m-o Profi (22.9k Punkte)
Hallo,

das ist ein typischer Fehler beim Kopieren zwischen Tabellen. So funktioniert es:

For k = 8 To zeilenzahl

If Sheets("Quelle").Cells(k, 6).Value > 0 Then
Sheets("Ziel").Rows(l).RowHeight = Sheets("Quelle").Rows(k).RowHeight
Sheets("Quelle").Range(Cells(k, 1), Cells(k, 15)).Copy
With Sheets("Ziel")
.Range(.Cells(l, 1), .Cells(l, 15)).PasteSpecial Paste:=xlPasteAll
End With
l = l + 1
End If
Next k
'Kopierauswahl aufheben
Application.CutCopyMode = False


Gruß

M.O.
0 Punkte
Beantwortet von
Hi,
Ist das ein Excel typischer fehler oder ein typischer anfängerfehler? ;)

Ich habe das so gemacht und dann gab es das gleiche Problem mit der Zeile darüber im nächsten durchlauf. Habe diese dann genauso umgebaut seitdem läufts einwandfrei!

Danke für die schnelle und kompetente Hilfe!

gruß
SirSolaris
0 Punkte
Beantwortet von m-o Profi (22.9k Punkte)
Hallo,

sowohl als auch ;-). Auch ich habe mich schon oft mit dem Fehler rumgeschlagen (und mache es manchmal auch heute noch). Wenn du nach Laufzeitfehler 1004 im Netz suchst, wirst du viele verschiedene Fehlermöglichkeiten finden. Da hilft etwas Erfahrung schon etwas.

Gruß

M.O.
0 Punkte
Beantwortet von
Hi,

ja das ist mir aufgefallen^^ habe jede Menge einträge gefunden aber nichts was mir weitergeholfen hat.

kannst du mir zufällig noch sagen wie ich bei der paste anweisung eine grafik mitkopiere? Also ein eingefügtes logo?
mit
.pastespecial paste:=xlpasteall
übernimmt er das nicht und wenn ich das vorher einfüge will er die zeilenhöhe nicht anpassen.

gruß
SirSolaris
0 Punkte
Beantwortet von
Hallo
Hat sich erledigt. habe zwischenzeitlich die Lösung selber gefunden

Dim pct1 As Picture

With Sheets("grundl. kostenzusammenstellung").Pictures("Bild 9")
.Copy
Sheets("anl. 1 kostenzusammenstellung").Paste
Set pct1 = Sheets("anl. 1 kostenzusammenstellung").Pictures("Bild 9")
pct1.Left = .Left
pct1.Top = .Top
End With


falls jemand das gleiche problem hat ;)
gruß
...