Mit Excel VBA Art der Markierung erkennen

Hallo zusammen,

wie kann ich mit VBA erkennen/abfragen, ob ganze Spalten (z. B. D:smiley: oder $B:blush:G) markiert/selektiert wurden oder nur konkrete Bereiche (z. B. A5:A55 oder B23:F99).

Also irgendeine Funktion im Sinne von
Function GanzeSpalten() as boolean


End Function

Alternativ: Wie ermittelt man, ob ein String A="!ewewr6rr7" eine oder 2 Ziffern enthÀlt.

Gruß JK

Hallo Joku,

wie kann ich mit VBA erkennen/abfragen, ob ganze Spalten (z.
B. D:smiley: oder $B:blush:G) markiert/selektiert wurden oder nur
konkrete Bereiche (z. B. A5:A55 oder B23:F99).

Alternativ: Wie ermittelt man, ob ein String A="!ewewr6rr7"
eine oder 2 Ziffern enthÀlt.

Die Funktion „Spal“ wird aktualisiert mit F9.

Option Explicit

Function Spal(Zelle As Range) As String
'Benutzung in Excel, **=SPAL(A1)&LINKS(JETZT()\*0;0)**
Spal = "Teil"
If Intersect(Zelle, Selection) Is Nothing Then
 Spal = "Nicht markiert"
Else
 If Not Intersect(Zelle.EntireColumn, Selection) Is Nothing Then
 If Intersect(Zelle.EntireColumn, Selection).Cells.Count = Rows.Count Then Spal = "Ganz"
 End If
End If
End Function

Sub Spalten()
Dim Sel() As String, S As Long, Teil As String, Ganz As String
Sel = Split(Selection.Address(0, 0), ",")
For S = 0 To UBound(Sel)
 If Not IsNumeric(Right(Sel(S), 1)) Then
 Ganz = Ganz & Sel(S) & " "
 Else
 Teil = Teil & Sel(S) & " "
 End If
Next S
MsgBox "Ganz:" & Chr(10) & Ganz & Chr(10) & Chr(10) & "Teil" & Chr(10) & Teil
End Sub

Sub ZahlZĂ€hlen()
Dim strA As String, N As Integer, Anz As Integer
strA = "!ewewr6rr7"
For N = 1 To Len(strA)
 If IsNumeric(Mid(strA, N, 1)) Then Anz = Anz + 1
Next N
MsgBox strA & " enthÀlt:" & Chr(10) & Anz & " Ziffern"
End Sub

Gruß
Reinhard

Hallo joku,
wie kann ich mit VBA erkennen/abfragen, ob ganze Spalten (z.B. D:smiley: oder $B:blush:G) markiert/selektiert wurde?

Selection.Rows.Count = ActiveSheet.Rows.Count

Dies ist XL-versionsunabhÀngig, weil sie die möglichen Zeilen zÀhlt.

Alternativ: Wie ermittelt man, ob ein String A="!ewewr6rr7" eine oder 2 Ziffern enthÀlt?

Function ZahlenZaehlen(str As String) As Integer
'zÀhlt die Zahlen in einem String
Dim match As Integer 'Ergebnis
Dim i As Long 'Laufvariable
Dim x As Long 'temporÀre Zahl
 If Len(str) 48 And x 

HTH.

Markus

Herzlichen Dank fĂŒr die vielen wertvollen Anregungen!

Ich bin dadurch auf eine recht einfache Lösung gekommen:

Function ganze_Spalte_markiert(Sel As Range) As Boolean
ganze_Spalte_markiert = Not IsNumeric(Right(Sel.Address, 1))
End Function

Nutzen mit:

If ganze_Spalte_markiert(Selection) then 


Gruß JK

Hallo Joku,

Herzlichen Dank fĂŒr die vielen wertvollen Anregungen!

gerne.

Ich bin dadurch auf eine recht einfache Lösung gekommen:

Function ganze_Spalte_markiert(Sel As Range) As Boolean
ganze_Spalte_markiert = Not IsNumeric(Right(Sel.Address, 1))
End Function

klappt bestimmt auch, ich war mir im Unklaren was genau du wie machen willst. Insofern mußte ich auch einbeziehen, daß du vielleicht mit gehaltener Strg-taste mehrere Spalten, zellbereiche markiert hast.
Wenn nicht, langt natĂŒrlich dein Ansatz bzw. der eine von Markus.

Gruß
Reinhard

Hallo Reinhard,

klappt bestimmt auch, ich war mir im Unklaren was genau du wie
machen willst. Insofern mußte ich auch einbeziehen, daß du
vielleicht mit gehaltener Strg-taste mehrere Spalten,
zellbereiche markiert hast.

Dass nicht mehrere Spalten wurden bzw. in mehreren Spalten markiert wurde,
frage ich vorher schon extra ab.
Soll der User bei dieser Aufgabenstellung nicht; aber man weiß ja nie, was er treibt. (Im Ă€ußersten Fall sinkt ein mĂŒder Kopf auf die Tastatur *gg*)

Meine Lösung funktioniert aber erfreulicherweise auch, wenn mehrere Spalten komplett markiert wurden.

Aber das
Selection.Rows.Count = ActiveSheet.Rows.Count
ist schöner.

Gruß
JK

Danke!
Sehr elegante Lösung. :smile:

Gruß JK

Hallo Joku,

Soll der User bei dieser Aufgabenstellung nicht; aber man weiß
ja nie, was er treibt. (Im Ă€ußersten Fall sinkt ein mĂŒder Kopf
auf die Tastatur *gg*)

das stimmt, wirkliches alles abzufangen was ein User machen KÖNNTE, ist sehr aufwendig bis hin zu unlösbar, weil auf bestimmte Dinge kommt man einfach nicht, weil es einem selbst nie in den Sinn kĂ€me, dieses Dinge zu tun.

Meine Lösung funktioniert aber erfreulicherweise auch, wenn
mehrere Spalten komplett markiert wurden.
Aber das
Selection.Rows.Count = ActiveSheet.Rows.Count
ist schöner.

Schön wenn das bei dir klappt. Von daher Problem gelöst.

Ich ging die Angelegenheit anders an und da sind wir wieder bei dem Thema was du eigentlich genau wissen willst.

Wie ersichtlich an

Sub nn()
Range("$C:blush:C, $E:blush:E, $F:blush:F, $G$2, $I:blush:I, $K$4:blush:L$6, $A$3").Select
MsgBox Selection.Rows.Count
End Sub

und du wissen willst ob G2 ĂŒbrhaupt markiert ist, dann wissen willst ob noch mehr Zellen in G markiert sind oder die ganze Spalte G, nutzt dir Selection.Rows.Count gar nix.

Aber spielt keinerlei Rolle, wenn es bei dir so klappt wie geplant ist ja alles in Ordnung.

Gruß
Reinhard

Hallo Reinhard,

Ich ging die Angelegenheit anders an und da sind wir wieder bei dem Thema was du eigentlich genau wissen willst.
Wie ersichtlich an

Sub nn()
Range("$C:blush:C, $E:blush:E, $F:blush:F, $G$2, $I:blush:I, $K$4:blush:L$6, $A$3").Select
MsgBox Selection.Rows.Count
End Sub




Ich kann das nicht nachvollziehen: Unter XL XP kommt auch bei der obigen Markierung die Meldung 65536 Zeilen seien markiert. Stimmt ja auch. Excel wurde ja nicht gefragt, wieviele Zellen in jeder Zeile markiert sind.

Zu Mehrfachmarkierungen: wĂŒrde ich nur bei Word anwenden, wenn es sie bei WW97 gĂ€be. In einer Tabelle stehen zusammengehörige und deshalb auch gleich formatierte Dinge neben- oder untereinander; in einer Textverarbeitung sind diese aber durch die ganzen Satzbestandteile wie PrĂ€dikat, Objekt etc. getrennt.

Bei Excel benutze ich Mehrfachmarkierungen nur beim Erstellen einer Vorlage. Alle Worksheets werden grundsĂ€tzlich mit Formatvorlagen formatiert (deshalb finde ich XL2007 ja so doof mit den vielen bunten FVs). Besonders schick ist hierbei die Datenmaske, die die Formatvorlagen und die Formeln vom letzten Datensatz ĂŒbernimmt. Dadurch braucht ein Erfasser nicht zu formatieren.

Somit erĂŒbrigen sich in meinem privaten und beruflichen Alltag Mehrfachmarkierungen.
Zugegeben, anfangs dachte ich hierbei ĂŒberhaupt nicht an Mehrfachmarkierungen. Jetzt wĂŒrde ich einfach wie Joku auch vorher eine Abfrage einbauen mit

If Selection.Areas.Count \> 1 Then 

das stimmt, wirkliches alles abzufangen was ein User machen KÖNNTE, ist sehr aufwendig bis hin zu unlösbar, weil auf bestimmte Dinge kommt man einfach nicht, weil es einem selbst nie in den Sinn kĂ€me, diese Dinge zu tun.

Vollkommen d’accord. Und Mehrfachmarkierungen gehören fĂŒr mich dazu. Die meisten User wissen gar nicht, wie so 'was geht.

Gruß

Markus

Hallo Markus,

Ich ging die Angelegenheit anders an und da sind wir wieder bei dem Thema was du eigentlich genau wissen willst.
Wie ersichtlich an

Sub nn()
Range("$C:blush:C, $E:blush:E, $F:blush:F, $G$2, $I:blush:I, $K$4:blush:L$6, $A$3").Select
MsgBox Selection.Rows.Count
End Sub




Ich kann das nicht nachvollziehen: Unter XL XP kommt auch bei
der obigen Markierung die Meldung 65536 Zeilen seien markiert.

Richtig.

Stimmt ja auch. Excel wurde ja nicht gefragt, wieviele Zellen
in jeder Zeile markiert sind.

Ich glaube du meinst Spalte.

Ich ging halt vom UP aus:

„wie kann ich mit VBA erkennen/abfragen, ob ganze Spalten (z. B. D:smiley: oder $B:blush:G) markiert/selektiert wurden oder nur konkrete Bereiche (z. B. A5:A55 oder B23:F99)“

Und da kam ich darauf daß ich ja gar nicht wissen kann ob da nur Zellbereiche einer Spalte bzw. die Spalte markiert, selektiert wurde.
Darauhin habe ich Code entwickelt, der das berĂŒcksichtigt.

Daß man in dem Falle einfach nur die Zellenanzahl abprĂŒfen muß wußte ich nicht. Ist natĂŒrlich einfacher.

Aber der UP ist glĂŒcklich, also Problem gelöst :smile:

Bei Excel benutze ich Mehrfachmarkierungen nur beim Erstellen
einer Vorlage. Alle Worksheets werden grundsÀtzlich mit
Formatvorlagen formatiert (deshalb finde ich XL2007 ja so doof
mit den vielen bunten FVs).

Sorry, ich „arbeite“ nicht mit Excel, Word. Eine Formatvorlage habe ich mir mal als Beispiel erstellt um zu schauen wie man das macht.
Ansonsten weiß ich zu FV recht wenig bzw. gar nix.

das stimmt, wirkliches alles abzufangen was ein User machen KÖNNTE, ist sehr aufwendig bis hin zu unlösbar, weil auf bestimmte Dinge kommt man einfach nicht, weil es einem selbst nie in den Sinn kĂ€me, diese Dinge zu tun.

Vollkommen d’accord. Und Mehrfachmarkierungen gehören fĂŒr mich
dazu. Die meisten User wissen gar nicht, wie so 'was geht.

Mag stimmen, aber wenn ich sage, ich traue Usern ALLES zu, bedeutet das auch, auch in Unkenntnis wie man mehrfach Bereiche markiert, daß sie es doch „schaffen“ dies zu tun.

Und dann? Dann muß dein Code in der Lage sein, dies abzufangen.

Ist alles nix Schlimmes, die Benutzer können es halt nicht besser, ist in Ordnung, als Codeentwickler muß man sowas halt abfangen, unterbinden o.Ă€, jedenfalls etwwas basteln wo der Code deshalb nicht abstĂŒrzt und der User eine meldung bekommt, daß das was er grad will nicht geht oder so.

Gruß
Reinhard

Gruß

Markus

das stimmt, wirkliches alles abzufangen was ein User machen
KÖNNTE, ist sehr aufwendig bis hin zu unlösbar, weil auf
bestimmte Dinge kommt man einfach nicht, weil es einem selbst
nie in den Sinn kÀme, dieses Dinge zu tun.

Ja, ich habe dabei im Lauf meiner Berufsjahre schon das seltsamste erlebt.
Deshalb filtere ich inzwischen lieber zuviel aus als zu wenig.

Meine Lösung funktioniert aber erfreulicherweise auch, wenn

mehrere Spalten komplett markiert wurden.
Aber das
Selection.Rows.Count = ActiveSheet.Rows.Count
ist schöner.

Schön wenn das bei dir klappt. Von daher Problem gelöst.

Ja. :smile:

Ich ging die Angelegenheit anders an und da sind wir wieder
bei dem Thema was du eigentlich genau wissen willst.
Range("$C:blush:C, $E:blush:E, $F:blush:F, $G$2, $I:blush:I, $K$4:blush:L$6").Select

Das wĂ€re nix fĂŒr meine Methode. :smile:
Ich habe allerdings schon vorher sichergestellt, dass nur noch eine Spalte „im Spiel“ ist.

Gruß
JoKu