Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1104to1108
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA-Befehl: Zeichen in Schriftart nicht vorhanden

VBA-Befehl: Zeichen in Schriftart nicht vorhanden
Alex
Schönen guten Tag zusammen,
leider ist der Betreff nicht sehr aussagekräftig, da ich für die Frage etwas weiter ausholen muss. Man möge mir verzeihen.
Lage: Ich will mir für eine Schriftart Code Charts analog denen auf unicode.org erstellen (Beispiel: http://www.unicode.org/charts/PDF/U30A0.pdf ). Dazu habe ich nachfolgendes Makro geschrieben, das das auch ganz schön macht. Das Makro ist hier etwas abgespeckt dargestellt und wirft beispielhaft nur den Bereich 4E00 bis 4E3F aus.
Problem: Die Schriftart GuYin hat nicht für alle Unicode-Werte auch ein Zeichen. So fehlen z.B. 4E02, 4E04 bis 4E06, ..., wohingegen 4E00, 4E01, 4E03, ... mit einem Zeichen belegt sind.
Ulkiger Effekt: Excel zeigt mir bei den fehlenden Zeichen nicht wie erwartet das übliche "Kenn-ich-nicht"-Quadrat an, sondern nimmt das entsprechende Zeichen aus der MS PMincho (behauptet aber im Formatierungsbeich, dass es GuYin wäre).
Gewünschter Effekt: Wenn das Zeichen in der Schriftart nicht existiert, soll in der entsprechenden Zelle ein "n/a" stehen.
Wo muss ich da im Makro ansetzen und (noch viel wichtiger) mit welchem Befehl?
Danke und viele Grüße
Alex
------------------------------------------------------------------
Private Sub CommandButton1_Click()
Dim rngRange As Range
Dim intI, intJ As Integer
Dim strBase, strI, strJ As String
Set rngRange = Sheets("Tabelle2").Range("$A$1:$P$4")
strBase = "4E"
For intI = 0 To 15
For intJ = 0 To 3
rngRange.Cells(1, 1).Activate
ActiveCell.Offset(intJ, intI).Select
If intI 

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: VBA-Befehl: Zeichen in Schriftart nicht vorhanden
30.09.2009 00:02:51
Daniel
Hi
so ohne Beispieldatei kann ich das jetzt nicht nachvollziehen; aber folgendes solltest du bedenken:
in diesem Code:
rngRange.Cells(1, 1).Activate
ActiveCell.Offset(intJ, intI).Select

wird jedes mal die neue Zelle selektiert, deswegen bricht bei mir der Code mit fehler ab, weil die zulässtige Spaltenzahl überschritten wird.
du solltest dir das Arbeiten mit SELECT und ACTIVATE abgewöhnen und immer direkt referenzieren.
die Umrechnung in die neue Zahl geht doch viel einfacher:
= Val("&H4300")+16*IntJ + IntI
der Code sieht dann so aus:
For intI = 0 To 15
For intJ = 0 To 3
With Sheets("Tabelle2").Cells(1,1).offset(intJ, intI)
.Value = ChrW(Val("&H" & strBase) + 16*intJ + inI)
.Font.Name = "DFPGuYinMedium-B5"
.Font.Size = 50
End With
Next
Next
und nochwas:
in dieser Zeile : Dim strBase, strI, strJ As String
wird nur strJ als String deklariert, der Rest ist Variant.
auch wenn die Dimensioniertung in einer Zeile zusammengefasst wird, muss für jede Variable der Typ angegeben werden, sonst hat man Variant-Variablen mit den entsprechenden Nachteilen.
so sollte es aussehen:
Dim strBase As String, strI As String, strJ As String
zu deiner eigentlichen Frage kann ich jetzt nichts sagen, aber bau erstmal das hier ein und wenn das Problem immer noch besteht, lade mal eine Beispieldatei hoch.
Gruß, Daniel
Anzeige
AW: VBA-Befehl: Zeichen in Schriftart nicht vorhanden
30.09.2009 00:02:51
Daniel
Hi
so ohne Beispieldatei kann ich das jetzt nicht nachvollziehen; aber folgendes solltest du bedenken:
in diesem Code:
rngRange.Cells(1, 1).Activate
ActiveCell.Offset(intJ, intI).Select

wird jedes mal die neue Zelle selektiert, deswegen bricht bei mir der Code mit fehler ab, weil die zulässtige Spaltenzahl überschritten wird.
du solltest dir das Arbeiten mit SELECT und ACTIVATE abgewöhnen und immer direkt referenzieren.
die Umrechnung in die neue Zahl geht doch viel einfacher:
= Val("&H4300")+16*IntJ + IntI
der Code sieht dann so aus:
For intI = 0 To 15
For intJ = 0 To 3
With Sheets("Tabelle2").Cells(1,1).offset(intJ, intI)
.Value = ChrW(Val("&H" & strBase) + 16*intJ + inI)
.Font.Name = "DFPGuYinMedium-B5"
.Font.Size = 50
End With
Next
Next
und nochwas:
in dieser Zeile : Dim strBase, strI, strJ As String
wird nur strJ als String deklariert, der Rest ist Variant.
auch wenn die Dimensioniertung in einer Zeile zusammengefasst wird, muss für jede Variable der Typ angegeben werden, sonst hat man Variant-Variablen mit den entsprechenden Nachteilen.
so sollte es aussehen:
Dim strBase As String, strI As String, strJ As String
zu deiner eigentlichen Frage kann ich jetzt nichts sagen, aber bau erstmal das hier ein und wenn das Problem immer noch besteht, lade mal eine Beispieldatei hoch.
Gruß, Daniel
Anzeige
AW: VBA-Befehl: Zeichen in Schriftart nicht vorhanden
30.09.2009 10:06:38
Alex
Hi Daniel,
danke schon mal für Deine erste Hilfe.
Ich kann Deinen Codeabbruch hier leider nicht nachstellen, bei mir funktioniert schon der alte Code einwandfrei. (Gut, man sieht den Cursor hektisch über den Bildschirm flitschen, aber prinzipiell geht es.) Bis dahin hatte ich auch kein Problem. Nichtsdestotrotz bin ich alter Codeschwurbler Dir sehr dankbar für Deine Vereinfachungen und habe sie im File gleich eingebaut.
Da ich nicht weiß, auf welche Schriftarten Du Zugriff hast (das Ergebnis aber maßgeblich davon abhängt), ist in https://www.herber.de/bbs/user/64790.xls zum einen das Makro, zum anderen ein kleiner Screenshot, der mein Anliegen hoffentlich klarer beschreibt.
Ich suche im Grunde genommen nur eine VBA-Routine, die -- sobald das Zeichen in der Schriftart nicht vorhanden ist -- ein "n/a" auswirft, ansonsten das Zeichen.
Viele Grüße
Alex
Anzeige
AW: Sorry, keine Ahnung Frage offen
30.09.2009 21:57:32
Daniel
HI
ich kann das leider nicht nachvollziehen, da ich die Schriftart nicht habe, bei meinen Schriftarten wird das Rechteck angezeigt.
Gruß, Daniel

316 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige