Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA Makro Unicode einfügen Haken ChrW(10008)

VBA Makro Unicode einfügen Haken ChrW(10008)
28.01.2015 11:44:50
braun

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("A5")) Is Nothing _
And Target.Count = 1 Then
Select Case Target.Value
Case ChrW(10004)
Target.Value = "NV"
Case "NV"
Target.Value = ""
Case ""
Target.Value = ChrW(10004)
End Select
Range("A6").Select
End If
End Sub

Guten Tag,
bei oben genannten Code würde ich gerne anstatt dem "" ein ChrW(10008) einfügen, allerdings läuft das Makro nicht mehr, wenn ich es ersetze.
Woran könnte das liegen?
Vielen Dank im Voraus

Anzeige

20
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
K.A., prinzipiell fktt das (in ähnlicher UDF)! orT
28.01.2015 12:35:45
Luc:-?
Gruß, Luc :-?

AW: VBA Makro Unicode einfügen Haken ChrW(10008)
28.01.2015 13:06:04
braun
es funktioniert nur leider nicht.

Tja, dann ist das völlig unklar, denn auch dein...
28.01.2015 13:19:35
Luc:-?
…OriginalPgm fktt problemlos, Braun;
falls du sonst alles richtig gemacht hast - es fktionierte zuvor ja angeblich -, muss es an deiner ProjektUmgebung liegen - ein großes, uns unbekanntes „Könnte“. ;->
Luc :-?

Anzeige
AW:Das Problem ist nicht das CHRW,...
28.01.2015 13:16:25
Daniel
sondern vielleicht daran, dass wenn du auch in der Case-Prüfung das "" durch ChrW(10008) ersetzt und wenn die Zelle zu Beginn leer ist, keiner der benannten Fälle zutrifft und somit auch nichts passiert, weil du dann für diesen "Case Else-Fall" keine Aktion vorgesehn hast.
du solltest als das Case "" durch Case Else ersetzen, damit der Code auf jeden Fall einen Einstieg in die Zeichenschleife findet.
ein weiteres problem ist, dass sich dein Makro bei
Range("A6").Select
in einer Endlosschleife verfängt. Du änderst hier im Code die Selektion und löst damit das Selection-Change-Event aus.
Damit ruft sich das Makro selber auf. Du kannst diesen Selbstaufruf so verhindern:
Application.EnableEvents = False
Range("A6").Select
Application.EnableEvents = True 
ausserdem solltest du, auch hier mit Target arbeiten, falls du mal das Häkchen nicht nur in A5, sondern auch in anderen Zellen benötigst:
Application.EnableEvents = False
Target.Offset(1, 0).Select
Application.EnableEvents = True 
Prinzipiell bevorzuge ich für solche Aktionen das Doppelklick-Event, das vermeidet hierbei viele Probleme, bspw kann beim Doppelklick-Event das Target immer nur genau eine Zelle gross sein und du musst auch die Selektion nicht verschieben, wenn du die Aktion mehrfach direkt hintereinander ausführen willst.
Beispielsweise bricht dein Code mit einem Fehler ab, wenn du mal zufälligerweise in einer Excelversion 2007 und grösser alle Zellen selektierst (passiert, wenn du auf den Schnittpunkt der Zeilen- und Spaltenüberschriften klickst), weil ein neues Excelblatt mehr zellen hat, als .count zählen kann.
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Address(0, 0) = "A5" Then
Select Case Target.Value
Case ChrW(10004)
Target.Value = "NV"
Case "NV"
Target.Value = ChrW(10008)
Case Else
Target.Value = ChrW(10004)
End Select
Cancel = True
End If
End Sub

Gruß Daniel

Anzeige
A6 ist nicht A5, insofern auch kein SelbstAufruf!
28.01.2015 13:24:03
Luc:-?
Außerdem hatte ich Braun dahingehend verstanden, Daniel,
dass er nicht die Abfrage, sondern die daraus folgende Aktion ändern will!
Gruß, Luc :-?

Du irrst, der Selbstaufruf findet statt!
28.01.2015 13:32:46
Daniel
Es gibt nur keine Endlosschleife, weil zu Beginn eine Prüfung mit Abbruch stattfindet.
Gruß Daniel

Ja, richtig, wollte eigentl auf EndlosSchleife ...
28.01.2015 14:27:26
Luc:-?
…hinaus wie am Vgl zu erkennen!
Luc :-?

Anzeige
AW: Ja, richtig, wollte eigentl auf EndlosSchleife ...
28.01.2015 14:58:22
Daniel
was für ein Vgl?
wenn du "Selbstaufruf" schreibst, dann gehe ich auch davon aus, dass du "Selbstaufruf" meinst.
Gruß Daniel

AW: AW:Das Problem ist nicht das CHRW,...
28.01.2015 13:36:23
braun
Danke für deine Hilfe!
Das Range(A6) hat problemlos funktioniert, denn dadurch konnte ich die Zelle durchklicken bis zum gewünschten Symbol, und musste nicht erst in eine andere Zelle und wieder zurück, was beim Weglassen der Fall wäre.
Ich versuche es mal, das Case durch Case else zu ersetzen, allerdings verstehe ich dann nicht,warum es mit "" problemlos geklappt hat, auch der Einstieg.
Wie kann ich dieses Makro auf eine ganze Spalte beziehen? z.B. von B12-100, mit Wechsel zwischen den Symbolen bei durchgehendem Klicken?
Vielen Dank!

Anzeige
AW: AW:Das Problem ist nicht das CHRW,...
28.01.2015 13:49:15
Daniel
Hi
mit dem "" beim Case hat es geklappt, weil dass der Wert ist den du hast, wenn die Zelle leer ist, dh wenn du das erste mal auf die Zelle klickst.
Nach deiner Änderung gab es für diesen Fall keine vorgesehne Aktion und du hättest die betroffenen Zellen vorab händisch mit einem der 3 verwendeten Zeichen befüllen müssen.
wenn das Makro für weitere Zellen gelten soll, würde ich beim BeforeDoubleClick-Event bleiben und hier einfach folgende Prüfung einbauen:
if Not Intersect(Target, Range("B12:B100")) Is Nothing Then
Gruß Daniel

Anzeige
AW: AW:Das Problem ist nicht das CHRW,...
28.01.2015 14:09:41
braun

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("B12:B100")) Is Nothing And Target.Count = 1 Then
Select Case Target.Value
Case ""
Target.Value = ChrW(10004)
Case ChrW(10004)
Target.Value = ChrW(10008)
Case ChrW(10008)
Target.Value = "N/A"
Case "N/A"
Target.Value = ChrW(10004)
End Select
End If
End Sub

Mit diesem klappt es jetzt super, danke für den Tip :) das einzige Problem dass ich noch habe, ist dass die Zeichen sich sofort ändern, wenn man nacheinander draufklickt, und man nicht erst aus der Zelle rausklicken muss.
Hat da jemand eine Idee? VG

Anzeige
AW: AW:Das Problem ist nicht das CHRW,...
28.01.2015 14:22:58
Daniel
Dann belass es beim Selection-Change-Event
ob man die Zelle dann sofort wieder anklicken kann oder ob man erst rausklicken muss, kannst du hierbei besser steueren, in dem du, wie du es gemacht hast, per Code rausklickst oder nicht (die gerade selektierte Zelle kann nicht nochmal selektiert werden und somit das Makro auch nicht ausgelöst werden).
Ich persönlich finde aber das Doppelklickverhalten angenehmer, aber das kannst du ja selbst entscheiden.
Gruß Daniel

Anzeige
AW: AW:Das Problem ist nicht das CHRW,...
28.01.2015 14:35:21
braun
Okay, danke :)
Gibt es denn eine Möglichkeit Chrw Codes zu kombinieren? Dass ich zb Haken und X in einer Zelle nebeneinander habe? VG :)

AW: AW:Das Problem ist nicht das CHRW,...
28.01.2015 14:54:34
Daniel
Hi
so wie du jedes andere Zeichen auch mit einem anderen Zeichen oder -folge kombnieren kannst, über das Verketten-Symbol &:

ChrW(10004) & ChrW(10008)

Beachte das Leerzeichen vor und nach dem &
Gruß Daniel

Anzeige
AW: AW:Das Problem ist nicht das CHRW,...
28.01.2015 14:18:42
braun

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("B12:B100")) Is Nothing And Target.Count = 1 Then
Select Case Target.Value
Case ""
Target.Value = ChrW(10004)
Case ChrW(10004)
Target.Value = ChrW(10008)
Case ChrW(10008)
Target.Value = "N/A"
Case "N/A"
Target.Value = ChrW(10004)
End Select
End If
End Sub

Mit diesem klappt es jetzt super, danke für den Tip :) das einzige Problem dass ich noch habe, ist dass die Zeichen sich sofort ändern, wenn man nacheinander draufklickt, und man nicht erst aus der Zelle rausklicken muss.
Hat da jemand eine Idee? VG

Anzeige
AW: AW:Das Problem ist nicht das CHRW,...
28.01.2015 13:58:31
AndrRo
Hallo braun.
hast du die "" an beiden Stellen geändert? Wenn ja, funktioniert dein Code problemlos.
gruß
AndrRo
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("A5")) Is Nothing _
And Target.Count = 1 Then
Select Case Target.Value
Case ChrW(10004)
Target.Value = "NV"
Case "NV"
Target.Value =  ChrW(10008) 
Case  ChrW(10008) 
Target.Value = ChrW(10004)
End Select
Range("A6").Select
End If
End Sub

Anzeige
AW: AW:Das Problem ist nicht das CHRW,...
28.01.2015 14:06:16
Daniel
Nur dann, wenn die Zelle mit "NV", CHRW(10004) oder CHRW(10008) vorbefüllt ist.
Steht ein anderes Zeichen in der Zelle oder ist die Zelle leer, passiert so nichts.
Deswegen sollte man hier einen Case Else - Fall definieren.
gruß Daniel

stimmt, oT
28.01.2015 14:11:52
AndrRo

stimmt, oT
28.01.2015 14:12:03
AndrRo

Anzeige
stimmt, oT
28.01.2015 14:12:26
AndrRo
AndrRo
;
Anzeige
Anzeige

Infobox / Tutorial

Unicode Haken in Excel mit VBA Einfügen


Schritt-für-Schritt-Anleitung

  1. VBA Editor öffnen:

    • Drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Neues Modul erstellen:

    • Klicke mit der rechten Maustaste auf "VBAProject (DeineDatei.xlsx)" und wähle Einfügen > Modul.
  3. Code einfügen:

    • Füge folgenden Code in das Modul ein:
      Private Sub Worksheet_SelectionChange(ByVal Target As Range)
      If Not Intersect(Target, Range("B12:B100")) Is Nothing And Target.Count = 1 Then
         Select Case Target.Value
             Case ""
                 Target.Value = ChrW(10004) ' Haken
             Case ChrW(10004)
                 Target.Value = ChrW(10008) ' Kreuz
             Case ChrW(10008)
                 Target.Value = "N/A"
             Case "N/A"
                 Target.Value = ChrW(10004) ' Haken zurücksetzen
         End Select
      End If
      End Sub
  4. Makro testen:

    • Kehre zu Excel zurück und klicke auf die Zellen in dem Bereich B12 bis B100. Die Symbole sollten nun entsprechend wechseln.

Häufige Fehler und Lösungen

  • Problem: Makro funktioniert nicht
    Lösung: Stelle sicher, dass der Bereich in der Intersect-Funktion korrekt definiert ist. Ändere den Bereich nach Bedarf.

  • Problem: Endlosschleife
    Lösung: Vermeide das Verwenden von Select innerhalb des Makros. Nutze stattdessen Application.EnableEvents = False und Application.EnableEvents = True, um selbstaufrufende Makros zu verhindern.

  • Problem: Zeichenwechsel sofort
    Lösung: Nutze das BeforeDoubleClick-Event, um die Steuerung über die Zeichenänderung zu verbessern.


Alternative Methoden

  • Verwendung von ASCII Codes: Du kannst auch ASCII Codes nutzen, um Zeichen in Excel einzufügen. Zum Beispiel:

    Target.Value = Chr(10004) ' Haken
  • Verwendung von Doppelklick-Ereignis: Statt SelectionChange könnte das BeforeDoubleClick-Ereignis verwendet werden, um eine bessere Kontrolle über die Aktionen zu haben.


Praktische Beispiele

  1. Zeichenkombination: Um Haken und Kreuze in einer Zelle darzustellen, kannst du folgendes nutzen:

    Target.Value = ChrW(10004) & " " & ChrW(10008)
  2. Erweiterung auf andere Zellen: Modifiziere den Code, um mehrere Bereiche zu steuern:

    If Not Intersect(Target, Range("B12:B100, D12:D100")) Is Nothing Then

Tipps für Profis

  • Nutzung von Unicode: Arbeite mit Unicode-Zeichen, um eine Vielzahl von Symbolen in Excel zu verwenden. Eine vollständige ChrW-Tabelle kann hilfreich sein, um die richtigen Codes zu finden.

  • Fehlerbehandlung: Integriere Fehlerbehandlungsroutinen in deinen Code, um unerwartete Probleme zu vermeiden:

    On Error Resume Next
    ' Dein Code hier
    On Error GoTo 0

FAQ: Häufige Fragen

1. Wie kann ich ASCII Codes für Haken in Excel verwenden?
Du kannst ASCII Codes durch die Chr-Funktion nutzen, z.B. Chr(10004) für ein Häkchen.

2. Wie kann ich verschiedene Symbole in einer Zelle kombinieren?
Verwende den Verketten-Operator &, um beispielsweise ChrW(10004) & " " & ChrW(10008) zu kombinieren.

3. Warum funktioniert das Makro nicht in Excel 2007?
Stelle sicher, dass die Zellen korrekt formatiert sind und prüfe die Kompatibilität der verwendeten VBA-Funktionen mit deiner Excel-Version.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige