Makro ausführen, wenn Spaltenbreite/Zeilenhöhe geändert wird

28/01/2008 - 08:06 von Aeschi | Report spam
Hallo zusammen

Für die Erstellung von Reports benötige ich eine bestimmte Breite und
Höhe (in Pixeln) eines Ranges. Ich habe foglendes Makro gebastelt, das
mir die Spaltenbreiten bzw. Zeilenhöhen in das Worksheet schreibt. Der
Range wird durch Values "s" bzw. "e" im Worksheet begrenzt.


Option Explicit

Sub breiten_hoehen()

'Corners must be marked with a "s" and an "e" in the first row.

Dim sbreite As Single
Dim srange As Range
Dim zhoehe As Single
Dim zrange As Range
Dim n As Integer
Dim s As Integer
Dim e As Integer
Dim c As Variant

Application.ScreenUpdating = False

'Find s and e
For Each c In ActiveSheet.Range("1:1")
If c.Value = "s" Then
s = c.Column
End If
If c.Value = "e" Then
e = c.Column
End If
Next c

Set srange = Range(Cells(s, 1), Cells(e - 1, 1))

For n = 2 To srange.Count
sbreite = ActiveSheet.Columns(n).Width * 1.3333333333
ActiveSheet.Cells(1, n).Value = sbreite
Next n

'Corners must be marked with a "s" and an "e" in the first column.

'Find s and e
For Each c In ActiveSheet.Range("a:a")
If c.Value = "s" Then
s = c.Row
End If
If c.Value = "e" Then
e = c.Row
End If
Next c

Set zrange = Range(Cells(1, s), Cells(1, e - 1))

For n = 2 To zrange.Count
zhoehe = ActiveSheet.Rows(n).Height * 1.3333333333
ActiveSheet.Cells(n, 1).Value = zhoehe
Next n

Application.ScreenUpdating = True

End Sub


Anwendung des Makros: Ich stelle die Breiten der Spalten bzw. die Höhe
der Zeilen ein, starte das Makro und sehe dann im Worksheet, welche
Pixelwerte ich eingestellt habe.

Nun zum Problem: Ich möchte dieses Makro automatisch ablaufen lassen,
sobald ich eine Spaltenbreite oder Zeilenhöhe geàndert habe.

Falls noch zusàtzlich jemand einen Tipp zur Performance-Verbesserung
hat, umso besser.

Danke für eure Hilfe und Gruss,
Aeschi
 

Lesen sie die antworten

#1 Michael Mueller
28/01/2008 - 09:41 | Warnen spam
Nun zum Problem: Ich möchte dieses Makro automatisch ablaufen
lassen, sobald ich eine Spaltenbreite oder Zeilenhöhe geàndert
habe.



Falls die Änderung der Höhe und Breite nicht über VBA geschieht sondern von
Hand:
Man könnte das WorksheetChange-Ereignis dazu benutzen.
Darin dann den letzten Eintrag der Liste des Undo-Button auswerten und
darauf reagieren.

Problem ist dann aber noch wenn z.B ganze Zeilen/Spalten kopiert wurden.
Dabei wir die Höhe/Breite mit kopiert, ist dann aber nicht über das Undo
erfasst.

Evtl. reicht Dir das ja aber.

mfg
Michi

Ähnliche fragen