Excel erkennen ob Zelle ausgewählt

Hey Leute, bin grade dabei ein kleinen Code zu schreiben der Zeilenhöhe durch klicken auf einen Button hoch oder runter setzt (siehe mein anderes Thema!)

Funktioniert auch soweit alles super, nur will ich noch eine Abfrage einbauen die erkennt ob auch wirklich eine Zelle ausgewählt wurde oder evtl. eine Grafik -> Würde zu einem Fehler führen.

Hat jemand eine Idee wie ich das abfangen könnte?!

Ideen aus dem Internet (die aber leider nicht funktionieren… zumindest bei mir)

Public Sub Aufruf()
If TypeName(Selection) = „Range“ Then
machwas
Else
mach_was_anderes
End If
End Sub

by ransi

oder

Sub Markiert()
Dim rng As Range
Set rng = Range(„B5“)
If Intersect(rng, Selection
IS Nothing :Then
MsgBox „Zelle " & rng.Address & " ist
nicht markiert!“
Else
MsgBox „Zelle " & rng.Address & " ist
markiert!“
End If

by herber.de

Hallo almheidy,

was funtioniert denn an den Codes nicht?

Bei mir geht z.B. das hier:

Sub zeilenhoehe()
 If TypeName(Selection) = "Range" Then
 ' hier dein Code zum Ändern der zeilenhöhe
 Else
 MsgBox "Bitte Zellen auswählen"
 End If
End Sub

Gruß, Andreas

… Ouch, ich hab gedacht den TypeName muss ich noch in das selektierte Element ändern… gut :smiley: jetzt klappt der Code… Ich danke dir ! Und hier für alle mit ähnlichen Problem mal der Code wie er jetzt ausschaut:

Sub Schaltfläche9_KlickenSieAuf()

If TypeName(Selection) = „Range“ Then

Dim num1 As Integer
num1 = Selection.RowHeight

'Verhindert das Zellen ganz verschwinden
If num1

Vorschlag
Hallo almheidy

hier noch ein Vorschlag für eine kleine Änderung:

Sub Schaltfläche9\_KlickenSieAuf()
 If TypeName(Selection) = "Range" Then
 'hebt Blattschutz mit PW auf:
 ActiveSheet.Unprotect "123"
 'verringert selektierte Zeilenhöhe um 18
 Selection.RowHeight WorksheetFunction.Max(Selection.RowHeight - 18, 19) 
 'loest Blattschutz wieder auf mit PW:
 ActiveSheet.Protect "123"
 Else
 MsgBox "Bitte Zellen auswählen"
 End If
End Sub

Gruß, Andreas

… Ouch, ich hab gedacht den TypeName muss ich noch in das
selektierte Element ändern… gut :smiley: jetzt klappt der Code…
Ich danke dir ! Und hier für alle mit ähnlichen Problem mal
der Code wie er jetzt ausschaut:

Hallo Almheidy,

bei Darstellung von Code hier bei w-w-w benutze bitte den
pre-Tag, wird unterhalb des Eingabefensters erklärt.
Dann bleiben deine Leerzeichen-Einrückungen erhalten.

Andreas hat ja zwischenzeitlich Code gezeigt.
In der Zeile Selection.Rowheight mach aus der 19 eine 18.
Und füge nach Selection.Rowheight ein „=“ ein.

Zu deinem Code.
num1 = Selection.RowHeight - 18
Selection.RowHeight = num1

ist kürzer so
Selection.RowHeight = num1 - 18

Ich weiß, man ist verführt zu denken ich prüf erst mit
IF ob etwas zutrifft, dann erst benutze ich DIM.
Ist bei Vba zwecklos.

Beim Start einer Prozedur wird ein kleiner Teil des Codes
kompiliert, der große Rest wird dann interprtiert.
Alle DIMs werden beim Start kompiliert, egal wo sie im Code stehen.
Ergo, schreib alle Variablendeklarioten mit DIM, CONST immer
zu Anfang des Codes.

Dann, was man immer im Hinterkopf haben sollte, was könnte
ein Fremduser meines Codes denn so machen mit dem Button.
Er könnte z.B. mehrere Zellen selektieren.
Und das hat dann Nebeneffekte, Kolaterlaschäden zur Folge.

Ich habe das in XL2000 und in XL2007 überprüft, die Hilfe
sagt zu RowHeight etwas falsches oder ich kapiers nich.
Sie sagt:
„Bei mehreren Zeilen gibt RowHeight entweder die Höhe einer
einzelnen Zeile zurück (wenn alle Zellen gleich hoch sind)
oder Null (wenn die Höhe der Zellen unterschiedlich ist)“

Ich habe sehr wohl mehrere Zellen untereinander auf einmal
markiert. Da war nix mit Null, Selection.RowHeight gab
die Höhe der obersten Zelle zurück. (Nicht unerwartet)
D.h. aufgrund der Auswertung einzig der oberen Zelle werden
alle Zellen der Selection gleich behandelt.

Testests aus. Natürlich nicht wenn alle fraglichen Zellen
nur 18 Höhe haben. Sollten schon 36, 54 o.ä. haben.

Abhilfe, mit
if selection.cells.count 1 then exit sub
bzw.
if selection.count 1 then exit sub

Gruß
Reinhard