Discussion:
Hochkommata per VBA auslesen
(zu alt für eine Antwort)
frank_s
2005-10-17 15:01:18 UTC
Permalink
Hallo,

ich möchte per VBA aus einer Zelle herauslesen, ob darin ein
Hochkommata '
enthalten ist. Das Problem ist das Excel selbst dieses Zeichen nicht
anzeigt, erst wenn man in den Editmodus geht wird es angezeigt.

Folgender Code funktioniert hier nicht:

Dim wsSheetObj As Worksheet
Set wsSheetObj = ThisWorkbook.Sheets(1)
strValue = wsSheetObj.Cells(6, 2)
if Instr(strValue,"'")>0 Then MsgBox ("Drin")


Vielleicht kennt jemand eine Eigenschaft die man abfragen kann, um
festzustellen, ob ein Hochkommata enthalten ist.

Vielen Dank schonmal für Eure Hilfe.

Gruß Frank
Melanie Breden
2005-10-17 15:53:58 UTC
Permalink
Hallo Frank,
Post by frank_s
ich möchte per VBA aus einer Zelle herauslesen, ob darin ein
Hochkommata '
enthalten ist. Das Problem ist das Excel selbst dieses Zeichen nicht
anzeigt, erst wenn man in den Editmodus geht wird es angezeigt.
Dim wsSheetObj As Worksheet
Set wsSheetObj = ThisWorkbook.Sheets(1)
strValue = wsSheetObj.Cells(6, 2)
if Instr(strValue,"'")>0 Then MsgBox ("Drin")
Vielleicht kennt jemand eine Eigenschaft die man abfragen kann, um
festzustellen, ob ein Hochkommata enthalten ist.
Das Problem ist Folgendes:
Excel verwendet das Hochkomma als Kennzeichen zur linksbündigen Ausrichtung von Daten in der Zelle
und wandelt den enthaltenen Wert dadurch automatisch in einen Stringwert um.

Dazu noch ein Hinweis:
Wenn im Menü 'Extras/Optionen' im Register 'Umsteigen' die Option 'Alternative Bewegungstasten'
aktiviert ist, setzt Excel bei jeder Texteingabe automatisch ein Hochkomma vor den Text.

Wie sind denn die Hochkommas in den Zellen gekommen und wozu brauchst du diese Information?


Mit freundlichen Grüssen
Melanie Breden
--
- Microsoft MVP für Excel -
Microsoft Excel - Die ExpertenTipps http://tinyurl.com/cmned
Das Excel-VBA Codebook http://excel.codebooks.de
Excel-Auftragsprogrammierung
frank_s
2005-10-17 16:33:18 UTC
Permalink
Hallo Melanie, vielen Dank für deine Antwort.

Wir haben hier Daten die nicht eindeutig zu identifizieren sind. Um
Datensätze eindeutig zuzuordnenen, wurde das Hochkommata als
Kennzeichen eingeführt, mit dem ich nun meine Probleme habe.
Ursprünglich kommen die Daten aus einem Workdokument und werden per
Copy / Paste ins Excelsheet übernommen. Vielleicht gibt es irgendwie
ein Workaround, Excel zeigt ja im bestimmten Fall das Hochkommata an
(Editmodus).

Das Hochkommata kann leider auch nicht abgeändert werden, da ansonsten
mehr als 10.000 Datensätze überarbeitet werden müssten.

Viele Grüße

Frank
Melanie Breden
2005-10-17 17:59:09 UTC
Permalink
Hallo Frank,
Post by frank_s
Hallo Melanie, vielen Dank für deine Antwort.
Wir haben hier Daten die nicht eindeutig zu identifizieren sind. Um
Datensätze eindeutig zuzuordnenen, wurde das Hochkommata als
Kennzeichen eingeführt, mit dem ich nun meine Probleme habe.
Ursprünglich kommen die Daten aus einem Workdokument und werden per
Copy / Paste ins Excelsheet übernommen. Vielleicht gibt es irgendwie
ein Workaround, Excel zeigt ja im bestimmten Fall das Hochkommata an
(Editmodus).
Das Hochkommata kann leider auch nicht abgeändert werden, da ansonsten
mehr als 10.000 Datensätze überarbeitet werden müssten.
im Moment habe ich eine erste Lösung mit einem Excel4-Makro.
Definiere folgenden Namen und Formel im Menü 'Einfügen/Namen/Definieren':
IstHochkomma
=ZELLE.ZUORDNEN(52;INDIREKT("ZS(-1)";FALSCH))="'"

Schreibe in die rechte Nebenzelle der zu durchsuchenden Zelle die Formel:
=IstHochkomma

Als Ergebnis erhälst du WAHR oder FALSCH.

Auf Basis dieses Namens lassen sich bestimmt noch weitere Lösungen ausarbeiten.


Mit freundlichen Grüssen
Melanie Breden
--
- Microsoft MVP für Excel -
Microsoft Excel - Die ExpertenTipps http://tinyurl.com/cmned
Das Excel-VBA Codebook http://excel.codebooks.de
Excel-Auftragsprogrammierung
unknown
2005-10-17 17:15:10 UTC
Permalink
Post by frank_s
Dim wsSheetObj As Worksheet
Set wsSheetObj = ThisWorkbook.Sheets(1)
strValue = wsSheetObj.Cells(6, 2)
if Instr(strValue,"'")>0 Then MsgBox ("Drin")
Wenn du auf Chr(39) statt „'“ prüfst müsste es klappen. Das Hochkomma
ist ASCII 39...
--
Eric March - eric.march(spambremse)@gmx.net

»Schreibe kurz - und sie werden es lesen. Schreibe klar und sie werden
es verstehen. Schreibe bildhaft - und sie werden es im Gedächtnis
behalten.« Joseph Pulitzer
Melanie Breden
2005-10-17 17:34:06 UTC
Permalink
Hallo Eric,
Post by unknown
Post by frank_s
Dim wsSheetObj As Worksheet
Set wsSheetObj = ThisWorkbook.Sheets(1)
strValue = wsSheetObj.Cells(6, 2)
if Instr(strValue,"'")>0 Then MsgBox ("Drin")
Wenn du auf Chr(39) statt „'“ prüfst müsste es klappen. Das Hochkomma
ist ASCII 39...
das hilft nicht, weil VBA das erste Zeichen (Hochkomma) überhaupt nicht
als Zeichen erkennt.
Es ist für Excel in dem Fall ja ein Formatierungskennzeichen.

Vielleicht kann man über diese Schiene (Formatierung) ein paar Tests machen.
Wäre noch interessant, ob sich in den Zellen Zahlen oder Text oder beides
befindet.


Mit freundlichen Grüssen
Melanie Breden
--
- Microsoft MVP für Excel -
Microsoft Excel - Die ExpertenTipps http://tinyurl.com/cmned
Das Excel-VBA Codebook http://excel.codebooks.de
Excel-Auftragsprogrammierung
Eike Bimczok
2005-10-17 17:57:09 UTC
Permalink
Hallo zusammen,

Sub prefix()

Dim a As Range
Set a = ActiveCell

MsgBox (a.PrefixCharacter)
End Sub


Gruß Eike
Post by Melanie Breden
Hallo Eric,
Post by unknown
Post by frank_s
Dim wsSheetObj As Worksheet
Set wsSheetObj = ThisWorkbook.Sheets(1)
strValue = wsSheetObj.Cells(6, 2)
if Instr(strValue,"'")>0 Then MsgBox ("Drin")
Wenn du auf Chr(39) statt „'“ prüfst müsste es klappen. Das Hochkomma
ist ASCII 39...
das hilft nicht, weil VBA das erste Zeichen (Hochkomma) überhaupt nicht
als Zeichen erkennt.
Es ist für Excel in dem Fall ja ein Formatierungskennzeichen.
Vielleicht kann man über diese Schiene (Formatierung) ein paar Tests machen.
Wäre noch interessant, ob sich in den Zellen Zahlen oder Text oder beides
befindet.
Mit freundlichen Grüssen
Melanie Breden
Melanie Breden
2005-10-17 18:02:04 UTC
Permalink
Hallo Eike,
Post by Eike Bimczok
MsgBox (a.PrefixCharacter)
na das ist doch eine tolle Eigenschaft, die auch noch nicht kannte

Wieder was gelernt :-)


Mit freundlichen Grüssen
Melanie Breden
--
- Microsoft MVP für Excel -
Microsoft Excel - Die ExpertenTipps http://tinyurl.com/cmned
Das Excel-VBA Codebook http://excel.codebooks.de
Excel-Auftragsprogrammierung
Eike Bimczok
2005-10-17 18:19:00 UTC
Permalink
Hallo Melanie,

schön, das von _dir_ zu hören ;-)

Gruß
Eike
Post by Melanie Breden
Hallo Eike,
Post by Eike Bimczok
MsgBox (a.PrefixCharacter)
na das ist doch eine tolle Eigenschaft, die auch noch nicht kannte
Wieder was gelernt :-)
Mit freundlichen Grüssen
Melanie Breden
Melanie Breden
2005-10-17 19:28:01 UTC
Permalink
Hallo Eike,
Post by Eike Bimczok
schön, das von _dir_ zu hören ;-)
wie alle anderen hier in der NG lerne auch ich immer wieder dazu.

Und genau das ist ja das tolle in dieser NG...
ein gegenseitiges Geben und Nehmen :-)


Mit freundlichen Grüssen
Melanie Breden
--
- Microsoft MVP für Excel -
Microsoft Excel - Die ExpertenTipps http://tinyurl.com/cmned
Das Excel-VBA Codebook http://excel.codebooks.de
Excel-Auftragsprogrammierung
frank_s
2005-10-17 18:24:11 UTC
Permalink
Hallo,

vielen Dank an alle für die Hilfe. Durch eure Hilfe konnte ich endlich
das Problem lösen ;)
Herzlichen Dank nochmal und noch einen schönen Abend. Man lernt nie
aus :)

Viele Grüße

Frank
unknown
2005-10-17 18:40:16 UTC
Permalink
Hallo Eike,
das ist ja toll, das kannte ich bisher auch nicht!

MfG Frank
_________________________________________________
Frank Arendt-Theilen, Microsoft MVP für Excel, Hameln
Microsoft Excel - Die ExpertenTipps http://tinyurl.com/cmned
Website: http://www.xl-faq.de
# Auftragsprogrammierung #
Eberhard Funke
2005-10-17 19:03:59 UTC
Permalink
Post by Eike Bimczok
Hallo zusammen,
Sub prefix()
Dim a As Range
Set a = ActiveCell
MsgBox (a.PrefixCharacter)
End Sub
Gruß Eike
Hallo Eike,

die MsgBox erscheint bei mir aber auch dann, wenn in der ActiveCell eine
Text oder eine Zahl ohne (führendes) Hochkomma steht oder auch wenn
ActiveCell leer ist.
Übrigens: mit A1=Hochkomma, =ISTTEXT(A1) --> WAHR, =LÄNGE(A1) --> 0
--
Gruß Eberhard
XL 2000
Eberhard(punkt)Funke(at)t-online.de
Eike Bimczok
2005-10-17 19:43:49 UTC
Permalink
Hallo Eberhard,

klar die Msgbox erscheint immer (wieso auch nicht?), aber der Inhalt ist
im einen Fall >'< und im anderen ><.
Was du meinst ist vermutlich:

Dim a As Range
Set a = ActiveCell

If a.PrefixCharacter = "'" Then
MsgBox ("Hochkomma gefunden")
End If


Gruß
Eike
Post by Melanie Breden
Post by Eike Bimczok
Hallo zusammen,
Sub prefix()
Dim a As Range
Set a = ActiveCell
MsgBox (a.PrefixCharacter)
End Sub
Gruß Eike
Hallo Eike,
die MsgBox erscheint bei mir aber auch dann, wenn in der ActiveCell eine
Text oder eine Zahl ohne (führendes) Hochkomma steht oder auch wenn
ActiveCell leer ist.
Übrigens: mit A1=Hochkomma, =ISTTEXT(A1) --> WAHR, =LÄNGE(A1) --> 0
Eike Bimczok
2005-10-17 19:54:39 UTC
Permalink
Hallo nochmal,

Nachtrag: Es muss nicht immer "'" sein! Abhängig von der
TransitionNavigKeys Eigenschaft können auch andere Zeichen im
PrefixCharacter enthalten sein, z.B. " oder ^ oder \


Siehe hierzu unter
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbaxl11/html/xlproPrefixCharacter1_HV05203934.asp


PrefixCharacter

Returns the prefix character for the cell. Read-only Variant.
Remarks

If the TransitionNavigKeys property is False, this prefix character will
be ' for a text label, or blank. If the TransitionNavigKeys property is
True, this character will be ' for a left-justified label, " for a
right-justified label, ^ for a centered label, \ for a repeated label,
or blank.


Gruß
Eike
Post by Eike Bimczok
Hallo Eberhard,
klar die Msgbox erscheint immer (wieso auch nicht?), aber der Inhalt ist
im einen Fall >'< und im anderen ><.
Dim a As Range
Set a = ActiveCell
If a.PrefixCharacter = "'" Then
MsgBox ("Hochkomma gefunden")
End If
Gruß
Eike
Post by Melanie Breden
Post by Eike Bimczok
Hallo zusammen,
Sub prefix()
Dim a As Range
Set a = ActiveCell
MsgBox (a.PrefixCharacter)
End Sub
Gruß Eike
Hallo Eike,
die MsgBox erscheint bei mir aber auch dann, wenn in der ActiveCell
eine Text oder eine Zahl ohne (führendes) Hochkomma steht oder auch
wenn ActiveCell leer ist.
Übrigens: mit A1=Hochkomma, =ISTTEXT(A1) --> WAHR, =LÄNGE(A1) --> 0
Melanie Breden
2005-10-17 19:58:11 UTC
Permalink
Hallo Eike,
Post by Eike Bimczok
Nachtrag: Es muss nicht immer "'" sein! Abhängig von der
TransitionNavigKeys Eigenschaft können auch andere Zeichen im
PrefixCharacter enthalten sein, z.B. " oder ^ oder \
Siehe hierzu unter
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbaxl11/html/xlproPrefixCharacter1_HV05203934.asp
das ist auch in der deutschen OH in Excel gut beschrieben:
Gibt das Präfix für die Zelle zurück. Schreibgeschützter Variant-Wert.

Hinweise
Hat die TransitionNavigKeys-Eigenschaft den Wert False,
ist das Präfix entweder das Zeichen ' für eine Textbezeichnung
oder es ist leer.
Hat die TransitionNavigKeys-Eigenschaft den Wert True,
so ist das Präfix das Zeichen ' für eine links ausgerichtete Bezeichnung,
" für eine rechts ausgerichtete Bezeichnung,
^ für eine zentrierte Bezeichnung,
\ für eine wiederholte Bezeichnung oder es ist leer.
Beispiel
In diesem Beispiel wird das Präfix für Zelle A1 in Sheet1 angezeigt.
MsgBox "The prefix character is " & _
Worksheets("Sheet1").Range("A1").PrefixCharacter

Mit freundlichen Grüssen
Melanie Breden
--
- Microsoft MVP für Excel -
Microsoft Excel - Die ExpertenTipps http://tinyurl.com/cmned
Das Excel-VBA Codebook http://excel.codebooks.de
Excel-Auftragsprogrammierung
Eberhard Funke
2005-10-17 20:01:02 UTC
Permalink
Post by Eike Bimczok
Hallo nochmal,
Nachtrag: Es muss nicht immer "'" sein! Abhängig von der
TransitionNavigKeys Eigenschaft können auch andere Zeichen im
PrefixCharacter enthalten sein, z.B. " oder ^ oder \
Siehe hierzu unter
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbaxl11/html/xlproPrefixCharacter1_HV05203934.asp
PrefixCharacter
Returns the prefix character for the cell. Read-only Variant.
Remarks
If the TransitionNavigKeys property is False, this prefix character will
be ' for a text label, or blank. If the TransitionNavigKeys property is
True, this character will be ' for a left-justified label, " for a
right-justified label, ^ for a centered label, \ for a repeated label,
or blank.
Ja, so hatte ich's auch in der Hilfe gefunden; aber ich spiele in der
Kreisliga und TransitionNavigKeys ist Bundesliga :-((

Trotzdem danke für Deine Mühe.
--
Gruß Eberhard
XL 2000
Eberhard(punkt)Funke(at)t-online.de
Eberhard Funke
2005-10-17 19:41:44 UTC
Permalink
Post by Melanie Breden
Post by Eike Bimczok
Hallo zusammen,
Sub prefix()
Dim a As Range
Set a = ActiveCell
MsgBox (a.PrefixCharacter)
End Sub
Gruß Eike
Hallo Eike,
die MsgBox erscheint bei mir aber auch dann, wenn in der ActiveCell eine
Text oder eine Zahl ohne (führendes) Hochkomma steht oder auch wenn
ActiveCell leer ist.
Hallo Eike,

jetzt hab' ich's entdeckt :-))
--
Gruß Eberhard
XL 2000
Eberhard(punkt)Funke(at)t-online.de
Melanie Breden
2005-10-17 19:55:27 UTC
Permalink
Hallo Eberhard,
Post by Eberhard Funke
die MsgBox erscheint bei mir aber auch dann, wenn in der ActiveCell eine
Text oder eine Zahl ohne (führendes) Hochkomma steht oder auch wenn
ActiveCell leer ist.
ja, aber die MsgBox ist dann leer.
Post by Eberhard Funke
Übrigens: mit A1=Hochkomma, =ISTTEXT(A1) --> WAHR,
das wird wieder durch das Formatierungskennzeichen begründet.

=LÄNGE(A1) --> 0

das ist auch wieder logisch, weil das Hochkomma kein Zeichen im eigentlichen Sinne ist,
sondern als Präfixzeichen für Textausrichtung angesehen wird.


Mit freundlichen Grüssen
Melanie Breden
--
- Microsoft MVP für Excel -
Microsoft Excel - Die ExpertenTipps http://tinyurl.com/cmned
Das Excel-VBA Codebook http://excel.codebooks.de
Excel-Auftragsprogrammierung
Eberhard Funke
2005-10-17 20:13:44 UTC
Permalink
Am Mon, 17 Oct 2005 21:55:27 +0200 schrieb Melanie Breden:

Danke Melanie,
Post by Melanie Breden
Post by Eberhard Funke
die MsgBox erscheint bei mir aber auch dann, wenn in der ActiveCell eine
Text oder eine Zahl ohne (führendes) Hochkomma steht oder auch wenn
ActiveCell leer ist.
ja, aber die MsgBox ist dann leer.
Das hatte ich inzwischen auch festgestellt. Aber das "'" ist so verdammt
klein, dass ich es, obwohl es in einer eigenen Zeile steht, glatt übersehen
habe.
Post by Melanie Breden
Post by Eberhard Funke
Übrigens: mit A1=Hochkomma, =ISTTEXT(A1) --> WAHR,
das wird wieder durch das Formatierungskennzeichen begründet.
=LÄNGE(A1) --> 0
das ist auch wieder logisch, weil das Hochkomma kein Zeichen im eigentlichen Sinne ist,
sondern als Präfixzeichen für Textausrichtung angesehen wird.
Wenn man vom Rathaus kommt, ist man klüger :-(
Hoffentlich nachhaltig.
--
Gruß Eberhard
XL 2000
Eberhard(punkt)Funke(at)t-online.de
Bernd Plumhoff
2005-10-18 12:25:03 UTC
Permalink
Hallo Frank,

definiere den Namen ISTSTRINGKONSTANTE mit der Formel
=ZELLE.ZUORDNEN(52;INDIREKT("ZS(-1)";FALSCH))

Dann schreibe in die Zellen rechts neben Deine zu pruefenden Zellen
=ISTSTRINGKONSTANTE

Diese zeigen dann ein Hochkomma oder sind leer, je nachdem ob links daneben
eins verwendet wurde.

Siehe auch (englisch!) http://www.sulprobil.com/html/get_cell.html

HTH,
Bernd

Loading...