Access - Caracteres alemanes en VBA

 
Vista:
sin imagen de perfil
Val: 29
Ha disminuido su posición en 3 puestos en Access (en relación al último mes)
Gráfica de Access

Caracteres alemanes en VBA

Publicado por Zirado (12 intervenciones) el 12/12/2017 16:48:39
He hecho una basa de datos en access para mi empresa y en el formulario de clientes he implementado un botón que te lleva a la dirección del cliente en Googlemaps.

Se basa en 3 campos: código postal, pobalción y dirección. La base de datos es en alemán así que los campos son: PLZ, Ort y Adresse.

El código para Googlemaps basado en esos 3 campos funciona perfectamente excepeto cuando aparecen caracteres alemanes. En google maps aparece la dirección pero dichos caracteres son sustituidos por un espacio, solo esos caracteres.

He buscado por internet en foros alemanes y normalmente sugieren usar la funcion replace. Lo he intentado de varias maneras pero no consigo integrarla en mi código para Google Maps.

Las sustituciones deberían ser las siguientes:
ß por ss
ä por ae
Ä por Ae
ö por oe
Ö por Oe
ü por ue
Ü por Ue

Pego mi código para Google Maps:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Private Sub Map_Click()
 Dim strLinkUrl  As String     ' address of provider passed to Googlemaps in the URL
  Dim strPath     As String     ' Google maps URL
  Dim strAddr() As String       ' used to split up address string
 
  ' this is the URL to Google maps
  strPath = "http://maps.google.com/maps?q="
 
  ' setup the address URL to be passed by including the street, city and state
  strLinkUrl = RTrim(Adresse.Value) & "," & "+" & RTrim(PLZ.Value) & "+" & RTrim(Ort.Value)
  ' split up the address URL so that space between words can be removed.
  strAddr = Split(strLinkUrl, " ", , vbTextCompare)
 
  ' piece back each address together with "+"
  strLinkUrl = ""
  For I = LBound(strAddr()) To UBound(strAddr())
    strLinkUrl = strLinkUrl & strAddr(I) & "+"
  Next I
 
  ' remove the trailing "+" and include the Google map URL
  strLinkUrl = strPath & Left(strLinkUrl, Len(strLinkUrl) - 1)
  Debug.Print strLinkUrl
  ' bring up Google maps passing the address
  Me.Map.HyperlinkAddress = strLinkUrl
 
 
End Sub
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 29
Ha disminuido su posición en 3 puestos en Access (en relación al último mes)
Gráfica de Access

Caracteres alemanes en VBA

Publicado por Zirado (12 intervenciones) el 15/12/2017 08:54:57
Aclaro que no intento cambiar los caracteres en el formulario sino que al hacer la llamada a google maps sustituya esos caracteres en la orden.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 756
Plata
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Caracteres alemanes en VBA

Publicado por Jesús Manuel (375 intervenciones) el 29/12/2017 16:57:48
Definimos una variable tipo string por cada campo, creamos dos array, uno con el caracter alemán y otro con los caracteres a cambiar, con un bluce For desde 0 (inicio del array) hasta el valor máximo del array ( lo sabemos con UBound) y cambiando luego en tu código los campos del formulario por el valor de las variables.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Dim stAdresse As String
Dim stPLZ As String
Dim stOrt As String
 
Dim ValorInicio As Variant
Dim ValorCambio As Variant
 
stAdresse = Me.Adresse
stPLZ= Me. PLZ
stOrt= Me.Ort
 
ValorInicio = Array("ß", "ä", "ö", "ü")
ValorCambio = Array("ss", "ae", "oe", "ue")
 
' Podríamos comprobar que los 2 array tienen la misma cantidad de elementos
' Si ves que afecta el valor del caracter en mayuscula, añade a los arrays más valores.
 
For i = 0 To UBound(ValorInicio)
stAdresse = Replace(stAdresse, ValorInicio(i), ValorCambio(i))
stPLZ=Replace(stPLZ, ValorInicio(i), ValorCambio(i))
stOrt = Replace(stOrt, ValorInicio(i), ValorCambio(i))
Next


Y ahora, en la línea 10 de tu código tendrías
1
strLinkUrl = RTrim(stAdresse) & "," & "+" & RTrim(stPLZ) & "+" & RTrim(stOrt)

Esta sería la única variación del código que ya tienes, todo lo demás lo estarías haciendo antes de está línea.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 29
Ha disminuido su posición en 3 puestos en Access (en relación al último mes)
Gráfica de Access

Caracteres alemanes en VBA

Publicado por Zirado (12 intervenciones) el 31/01/2018 14:54:03
Ante todo Muchísimas gracias por la respuesta.

Disculpa por tardar en contestar. Mi empresa cierra por el clima en enero y hasta ahora no he podido retomar el tema.

Entiendo el código que dices y he estado haciendo pruebas con el resto que faltaría.

El código empieza como bien dices así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Dim stOrt As String
 
Dim ValorInicio As Variant
Dim ValorCambio As Variant
 
stAdresse = Me.Adresse
stPLZ = Me.PLZ
stOrt = Me.Ort
 
ValorInicio = Array("ß", "ä", "ö", "ü")
ValorCambio = Array("ss", "ae", "oe", "ue")
 
For I = 0 To UBound(ValorInicio)
stAdresse = Replace(stAdresse, ValorInicio(I), ValorCambio(I))
stPLZ = Replace(stPLZ, ValorInicio(I), ValorCambio(I))
stOrt = Replace(stOrt, ValorInicio(I), ValorCambio(I))
Next
 
strLinkUrl = RTrim(stAdresse) & "," & "+" & RTrim(stPLZ) & "+" & RTrim(stOrt)

Y luego al continuarlo es dónde debo estar cometiendo un fallo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
' split up the address URL so that space between words can be removed.
  stAdresse = Split(strLinkUrl, " ", , vbTextCompare)
 
  ' piece back each address together with "+"
  strLinkUrl = ""
  For I = LBound(stAdresse()) To UBound(stAdresse())
    strLinkUrl = strLinkUrl & stAdresse(I) & "+"
  Next I
 
  ' remove the trailing "+" and include the Google map URL
  strLinkUrl = stAdresse & Left(strLinkUrl, Len(strLinkUrl) - 1)
  Debug.Print strLinkUrl
  ' bring up Google maps passing the address
  Me.GoogleMaps.HyperlinkAddress = strLinkUrl
 
 
End Sub

Creo que en la parte en negrita es donde la estoy liando. Sigo probando pero se agradece cualquier ayuda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 756
Plata
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Caracteres alemanes en VBA

Publicado por Jesús Manuel (375 intervenciones) el 09/03/2018 10:18:27
La verdad es que en mi comentario anterior no comprobé tu código, para ver si abría el mapa o tenía el error que comentabas del espacio en los caracteres indicados, simplemente te propuse una opción para cambiar los caracteres y punto.

He creado una tabla, tblClientes, con los 3 campos, y he buscado un par de direcciones en google maps con los caracteres que indicabas:

Kirchpl. 5 97633 Großeibstadt
Irmelshäuser Str. 1A 97633 Höchheim

He probado tú código original y, en mi caso, solo cambiando la última parte para abrir la URL creo que me funciona y no necesito hacer el cambio de caracteres. Lo que veo cuando se abre el navegador es que lo abre con un carácter/icono raro (un rombo negro con un interrogante blanco dentro) en los caracteres que necesitabas cambiar, pero pasados un par de segundos la url “se autocorrige” con el carácter correcto. EN MI CASO EL NAVEGAR QUE SE ABRE POR DEFECTO ES GOOGLE CHROME.

Una vez hecho esto he probado incluyendo el código para el cambio de caracteres y el resultado es OK, ya sin el carácter/icono raro del principio.

CÓDIGO 1 - SIN CAMBIO DE CARACTERES

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Dim strLinkUrl  As String     ' address of provider passed to Googlemaps in the URL
Dim strPath     As String     ' Google maps URL
Dim strAddr() As String       ' used to split up address string
 
' this is the URL to Google maps
strPath = "http://maps.google.com/maps?q="
 
' setup the address URL to be passed by including the street, city and state
strLinkUrl = RTrim(Adresse.Value) & "," & "+" & RTrim(Plz.Value) & "+" & RTrim(Ort.Value)
 
 
' split up the address URL so that space between words can be removed.
strAddr = Split(strLinkUrl, " ", , vbTextCompare)
 
 
' piece back each address together with "+"
strLinkUrl = ""
For i = LBound(strAddr()) To UBound(strAddr())
  strLinkUrl = strLinkUrl & strAddr(i) & "+"
Next i
 
' remove the trailing "+" and include the Google map URL
strLinkUrl = strPath & Left(strLinkUrl, Len(strLinkUrl) - 1)
 
 
Application.FollowHyperlink strLinkUrl, , True      ' El true es para abrir en ventana nueva



CÓDIGO 2 - CON CAMBIO DE CARACTERES

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
Dim stAdresse As String
Dim stPLZ As String
Dim stOrt As String
 
Dim ValorInicio As Variant
Dim ValorCambio As Variant
 
stAdresse = Me.Adresse
stPLZ = Me.Plz
stOrt = Me.Ort
 
ValorInicio = Array("ß", "ä", "ö", "ü")
ValorCambio = Array("ss", "ae", "oe", "ue")
 
' Podríamos comprobar que los 2 array tienen la misma cantidad de elementos
' Si ves que afecta el valor del caracter en mayuscula, añade a los arrays más valores.
 
For i = 0 To UBound(ValorInicio)
stAdresse = Replace(stAdresse, ValorInicio(i), ValorCambio(i))
stPLZ = Replace(stPLZ, ValorInicio(i), ValorCambio(i))
stOrt = Replace(stOrt, ValorInicio(i), ValorCambio(i))
Next
 
 
 
Dim strLinkUrl  As String     ' address of provider passed to Googlemaps in the URL
Dim strPath     As String     ' Google maps URL
Dim strAddr() As String       ' used to split up address string
 
' this is the URL to Google maps
strPath = "http://maps.google.com/maps?q="
 
' setup the address URL to be passed by including the street, city and state
strLinkUrl = RTrim(stAdresse) & "," & "+" & RTrim(stPLZ) & "+" & RTrim(stOrt)
 
 
' split up the address URL so that space between words can be removed.
strAddr = Split(strLinkUrl, " ", , vbTextCompare)
 
 
' piece back each address together with "+"
strLinkUrl = ""
For i = LBound(strAddr()) To UBound(strAddr())
  strLinkUrl = strLinkUrl & strAddr(i) & "+"
Next i
 
' remove the trailing "+" and include the Google map URL
strLinkUrl = strPath & Left(strLinkUrl, Len(strLinkUrl) - 1)
 
 
Application.FollowHyperlink strLinkUrl, , True      ' El true es para abrir en ventana nueva
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 29
Ha disminuido su posición en 3 puestos en Access (en relación al último mes)
Gráfica de Access

Caracteres alemanes en VBA

Publicado por Zirado (12 intervenciones) el 12/03/2018 10:27:04
El código que has puesto funciona a la perfección, no he tenido que tocar absolutamente nada.

Además no es necesario añadir los caracteres en mayúscula a los arrays como suponías.

1000 gracias por la ayuda. Llevo poco tiempo aprendiendo poco a poco VBA y estas cosas motivan mucho para continuar.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar