Visual Basic para Aplicaciones - no aparecen tildes al exportar campos a http a formulario sheets

Life is soft - evento anual de software empresarial
 
Vista:

no aparecen tildes al exportar campos a http a formulario sheets

Publicado por Juan Antonio Carracedo (1 intervención) el 14/09/2018 00:28:10
Hola, He creado una macro en excell, para exportar datos a un formulario web ( e introducirlo en otra hoja de cálculo web una sheets de google drive).

Me funciona casi perfecto, es decir me inserta los campo en un nuevo registro cada vez que la ejecuto, pero si en las celdas una palabra esta con tilde, se come la letra de la tilde, ejemplo si exporto "María" me ingresa "Mara" por ejemplo "Lpez" en vez de "López" creo que debe ser por algo de formato de texto ansi ó utf8 quizás.

Os enlazo el código de la macro.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Sub GrabaHoja()
'
' GrabaHoja Macro
'
' Acceso directo: CTRL+g
'
 
Dim Resultado As String
Dim Url As String, DatoMetodoPost As String
Dim winHttpSolicitud As Object
Set winHttpSolicitud = CreateObject("WinHttp.WinHttpRequest.5.1")
 
Url = "https://docs.google.com/forms/d/e/DIRECCION DEL FORMULARIO/formResponse"
 
DatoMetodoPost = "entry.817456995=" & Cells(5, 2).Value & "&entry.1119313961=" & Cells(5, 4).Value & "&entry.405809818=" & Cells(5, 6).Value & "&entry.1693766513=" & Cells(5, 8).Value & "&entry.1116788255=" & Cells(6, 2).Value & "&entry.744343443=" & Cells(6, 4).Value & "&entry.94245183=" & Cells(6, 8).Value & "&entry.1279903460=" & Cells(36, 1).Value
 
winHttpSolicitud.Open "POST", Url, False
winHttpSolicitud.SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"
winHttpSolicitud.Send (DatoMetodoPost)
 
Resultado = winHttpSolicitud.ResponseText
 
 
End Sub

Creo que puede ser por el método Post, pero estoy muy perdido, de hecho el codigo puesto, no es mio, lo copie de la web y no lo domino.

Rogaria una respuesta clara y suficientemente completa si fuera posible pues tengo muy abandonada la programación en Vb,

Muchísimas gracias.

P.D.: no se si el error es por las librerias que uso o ni idea, uso excel 2007,
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
Imágen de perfil de Antoni Masana
Val: 1.134
Oro
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

no aparecen tildes al exportar campos a http a formulario sheets

Publicado por Antoni Masana (498 intervenciones) el 17/09/2018 13:04:45
Ne pongo una solución parcial.

La solución es parcial porque convierte las vocales acentuadas en vocales sin acentuar.
Para hacer la conversión correcta seria necesario que carácter se identifica en la WEB como vocal con acento, cara una de ellas, y reemplazarlas en la variable DEST

He puesto dos tipos de acentos en minúsculas y mayúsculas.

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
Sub GrabaHoja()
    '
    ' GrabaHoja Macro
    '
    ' Acceso directo: CTRL+g
    '
 
    Dim Resultado As String
    Dim Url As String, DatoMetodoPost As String
    Dim winHttpSolicitud As Object
    Set winHttpSolicitud = CreateObject("WinHttp.WinHttpRequest.5.1")
 
    Url = "https://docs.google.com/forms/d/e/DIRECCION DEL FORMULARIO/formResponse"
 
    DatoMetodoPost = "entry.817456995="   & Cells( 5, 2).Value & _
                     "&entry.1119313961=" & Cells( 5, 4).Value & _
                     "&entry.405809818="  & Cells( 5, 6).Value & _
                     "&entry.1693766513=" & Cells( 5, 8).Value & _
                     "&entry.1116788255=" & Cells( 6, 2).Value & _
                     "&entry.744343443="  & Cells( 6, 4).Value & _
                     "&entry.94245183="   & Cells( 6, 8).Value & _
                     "&entry.1279903460=" & Cells(36, 1).Value
 
    DatoMetodpPost = Convertir(DatoMetodpPost)
 
    winHttpSolicitud.Open "POST", Url, False
    winHttpSolicitud.SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"
    winHttpSolicitud.Send (DatoMetodoPost)
 
    Resultado = winHttpSolicitud.ResponseText
End Sub
 
Function Convertir( Texto )
    Dim Orig as String, Dest as String, Resul as String, Ch as String, a as Integer
 
    Orig = "áéíóúÁÉÍÓÚàèìòùÀÈÌÒÙ"
    Dest = "aeiouAEIOUaeiouAEIOU"
 
    For a=1 to len(Texto)
        Ch=mid$(Texto,a,1)
        If Index(Orig, Ch) > 0 Then Ch = Mid$(Dest, Index(Orig, Ch), 1)
        Resul = Resul + Ch
    Next
    Convertir = Resul
End Function

Un ejemplo:

Si en el Bloc de notas pongo:

1
áéíóúÁÉÍÓÚàèìòùÀÈÌÒÙ

Realizo un type del fichero desde MS-DOS y veo esto

1
2
C:\>type \TMP\POPO
ßÚݾ·┴╔═Ë┌ÓÞý‗¨└╚╠Ê┘

En este caso si hiciese el texto en el block de notas tendria que cambiar las vocales por caracteres raros para ver los acentos desde la ventana de MSDOS y en la función pondría.

1
2
3
4
5
6
7
8
9
10
11
12
13
Function Convertir( Texto )
    Dim Orig as String, Dest as String, Resul as String, Ch as String, a as Integer
 
    Orig = "áéíóúÁÉÍÓÚàèìòùÀÈÌÒÙ"
    Dest = "ßÚݾ·┴╔═Ë┌ÓÞý‗¨└╚╠Ê┘"
 
    For a=1 to len(Texto)
        Ch=mid$(Texto,a,1)
        If Index(Orig, Ch) > 0 Then Ch = Mid$(Dest, Index(Orig, Ch), 1)
        Resul = Resul + Ch
    Next
    Convertir = Resul
End Function


No se si esta conversión te sera de utilidad o en la WEB utiliza otra codificación.

Saludos.
\\//_
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
Imágen de perfil de Antoni Masana
Val: 1.134
Oro
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

no aparecen tildes al exportar campos a http a formulario sheets

Publicado por Antoni Masana (498 intervenciones) el 17/09/2018 20:47:08
El ejemplo anterior no es del todo correcto.

Esto si es correcto:

Si en el Bloc de notas pongo:

1
áéíóúÁÉÍÓÚàèìòùÀÈÌÒÙ

Realizo un type del fichero desde MS-DOS y veo esto

1
2
C:\>type \TMP\POPO
ßÚݾ·┴╔═Ë┌ÓÞý‗¨└╚╠Ê┘

Ahora viene la corrección:

En MS-DOS escribo esto:

1
C:\>ECHO áéíóúÁÉÍÓÚàèìòùÀÈÌÒÙ>\TMP\POPO

Y abro el fichero
POPO con el bloc de notas y veo esto:

1
 ‚¡¢£µÖàé…Š•—·ÔÞãë

Bien pues esto ultimo es lo que hay que poner para cambiar las vocales con acento:

1
2
3
4
5
6
7
8
9
10
11
12
13
unction Convertir( Texto )
    Dim Orig as String, Dest as String, Resul as String, Ch as String, a as Integer
 
    Orig = "áéíóú" + "ÁÉÍÓÚ" + "àèìòù" + "ÀÈÌÒÙ"
    Dest = " ‚¡¢£" + "µÖàé" + "…Š•—" + "·ÔÞãë"
 
    For a=1 to len(Texto)
        Ch=mid$(Texto,a,1)
        If Index(Orig, Ch) > 0 Then Ch = Mid$(Dest, Index(Orig, Ch), 1)
        Resul = Resul + Ch
    Next
    Convertir = Resul
End Function

Espero haberme explicado un poco mejor.

Saludos.
\\//_
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: 28
Ha aumentado su posición en 2 puestos en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

no aparecen tildes al exportar campos a http a formulario sheets

Publicado por Cesar (12 intervenciones) el 17/09/2018 21:22:42
Hola.

Hasta donde se, en HTML, la forma correcta de escribir los acentos es:

1
2
Á  É  Í  Ó  Ú   Mayusculas
á  é  í  ó  ú   Minusculas

Ejemplo:

1
César   quedaria   César   en codigo, pero visualmente se visualizaria César

Del ejemplo que te dieron, yo te sugiero reemplazar los acentos, por sus respectivos codigos HTML.
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
Imágen de perfil de Antoni Masana
Val: 1.134
Oro
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

no aparecen tildes al exportar campos a http a formulario sheets

Publicado por Antoni Masana (498 intervenciones) el 18/09/2018 09:10:35
Adapto la función a la información aportada por cesar:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Function Convertir( Texto )
    Dim Orig(10) as String, a as Integer, Resul as String, Ch as String, _
        Dest(10) as String, b as Integer
 
    Orig(0) = "á":  Dest(5) = "á":  Orig(5) = "Á":  Dest(0) = "Á"
    Orig(1) = "é":  Dest(6) = "é":  Orig(6) = "É":  Dest(1) = "É"
    Orig(2) = "í":  Dest(7) = "í":  Orig(7) = "Í":  Dest(2) = "Í"
    Orig(3) = "ó":  Dest(8) = "ó":  Orig(8) = "Ó":  Dest(3) = "Ó"
    Orig(4) = "ú":  Dest(9) = "ú":  Orig(9) = "Ú":  Dest(4) = "Ú"
 
    For a=1 to len(Texto)
        Ch=mid$(Texto,a,1)
        For b=0 to 9
           If Ch = Orig(b) Then Ch = Dest(b): Exit For
        Next
        Resul = Resul + Ch
    Next
    Convertir = Resul
End Function

Saludos.
\\//_
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