Seite 1 von 1

polnische Sonderzeichen

Verfasst: Sa, 07.07.2012 17:53
von SoHo22
Hallo,
zunächst mal: ich bin absolute beginner.

Ich muss polnischen Text (jeweils 2-3 Wörter) in URLs umwandeln. Da URLs keine Sonderzeichen mögen, das Polnische aber geradezu davon wimmelt, möchte ich dieses Ersetzen automatisieren. Versucht habe ich es mit folgendem Makro:
----------------------------------------------------------------
'Attribute VB_Name = "modUmlauteErsetzen"
Sub polnischeSonderzeichen()
'Erweitern Sie das folgende Array, wenn
'weitere Buchstaben ersetzt werden sollen
Dim sSuchtext(18) As String
Dim sErsetzen(18) As String
'
sSuchtext(1) = "Ą"
sErsetzen(1) = "A"
sSuchtext(2) = "ą"
sErsetzen(2) = "a"
sSuchtext(3) = "Ć"
sErsetzen(3) = "C"
sSuchtext(4) = "ć"
sErsetzen(4) = "c"
sSuchtext(5) = "Ę"
sErsetzen(5) = "E"
sSuchtext(6) = "ę"
sErsetzen(6) = "e"
sSuchtext(7) = "Ł"
sErsetzen(7) = "L"
sSuchtext(8) = "ł"
sErsetzen(8) = "l"
sSuchtext(9) = "Ń"
sErsetzen(9) = "N"
sSuchtext(10) = "ń"
sErsetzen(10) = "n"
sSuchtext(11) = "Ó"
sErsetzen(11) = "O"
sSuchtext(12) = "ó"
sErsetzen(12) = "o"
sSuchtext(13) = "Ś"
sErsetzen(13) = "S"
sSuchtext(14) = "ś"
sErsetzen(14) = "s"
sSuchtext(15) = "Ź"
sErsetzen(15) = "Z"
sSuchtext(16) = "ź"
sErsetzen(16) = "z"
sSuchtext(17) = "Ż"
sErsetzen(17) = "Z"
sSuchtext(18) = "ż"
sErsetzen(18) = "z"



'
For i = 1 To 18
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
'
With Selection.Find
.Text = sSuchtext(i)
.Replacement.Text = sErsetzen(i)
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = True
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
'
Selection.Find.Execute Replace:=wdReplaceAll
Next i
End Sub
------------------------------------------------------------------

Leider erscheint immer folgende Fehlermeldung: BASIC-Laufzeitfehler. Ojektvariable nicht belegt. Es bezieht sich auf die Zeile

Selection.Find.Clear.Formatting

Wenn ich diese Zeile auskommentiere, erscheint die selbe Fehlermeldung, die sich dann auf die nächste Zeile

Selection.Find.Replacement.Clear.Formatting

bezieht.

Vielelicht ist meine Herangehensweise total daneben und naiv? Kann mir jemand helfen?

Vielen Dank und schöne Grüße
SoHo22

Re: polnische Sonderzeichen

Verfasst: Sa, 07.07.2012 18:47
von Karolus
Hallo

Versuchs mal damit:

Code: Alles auswählen

Sub sonderzeichenaustauschen
	doc = thisComponent 
	
	repl = doc.createReplaceDescriptor()

	repl.SearchAll = True
	repl.SearchCaseSensitive = True
	repl.SearchRegularExpression = False
	repl.SearchStyles = False
	repl.SearchWords = False

	searchchars = array( "ä","ö","ü" ) ' hier musst du deine Sonderzeichen eintragen
	replacechars = array( "a","o","u" ) 'und hier die Ersetzungen

	for i = 0 to ubound( searchchars )
		repl.SearchString = searchchars(i)
		repl.ReplaceString = replacechars(i)
		doc.replaceAll( repl )
	next i


End Sub
Das ist jetzt "nur" für drei Sonderzeichen, du schaffst das aber bestimmt selber anzupassen.

Karo

Re: polnische Sonderzeichen

Verfasst: Sa, 07.07.2012 19:08
von SoHo22
Ja, das war es. Super! Es hat einwandfrei funktioniert. Jetzt kann ich die Sonderzeichen rausschmeißen und gute URLs herstellen.

Danke!

Re: polnische Sonderzeichen

Verfasst: Sa, 07.07.2012 19:12
von balu
Hallo SoHo22,

noch etwas Grundsätzliches was Du dir für die Zukunft merken musst.

Code: Alles auswählen

Dim sSuchtext(18) As String
Dim sErsetzen(18) As String
Damit deklarierst Du nicht 18 Array-Punkte, sondern 19. Die Zählung bei solchen Arrays fängt nämlich immer mit Null (0) an, und nicht wie Du denkst mit 1. Und folglich müsstest Du alles ändern.

Deklaration

Code: Alles auswählen

Dim sSuchtext(17) As String
Dim sErsetzen(17) As String
definition

Code: Alles auswählen

sSuchtext(0) = "Ą"
sErsetzen(0) = "A"
[...]
sSuchtext(17) = "ż"
sErsetzen(17) = "z"
Schleife

Code: Alles auswählen

For i = 0 To 17
[...]
Next i


Oder alternativ:
Deklaration

Code: Alles auswählen

Dim sSuchtext(1 to 18) As String
Dim sErsetzen(1 to 18) As String
Definition bleibt

Code: Alles auswählen

sSuchtext(1) = "Ą"
sErsetzen(1) = "A"
[...]
sSuchtext(18) = "ż"
sErsetzen(18) = "z"
Schleife

Code: Alles auswählen

For i = 1 To 18
[...]
Next i

Gruß
balu