Error de Compilación - On Error

11/02/2005 - 13:38 por Adriano | Informe spam
Hola a todos, hago uso de las dlls y ocxs de Windows Common Controls y
Dialog Controls en mi proyecto.
Pero el hecho es que si no están instaladas en la PC donde se corre el
proyecto VBA, éste da un error de Compilación en Código Oculto (si es que
protegieron el Proyecto para no permitir su visualización).

Hice un On Error para hacer un trap en el Open del ThisWorkbook en donde le
quería avisar al usuario que ejecute un batch que simplemente copia los
ActiveX en Windows/System32 y sale funcionando.

Pero evidentemente VBA, antes de ejecutar compila, y el error es en tiempo
de compilación, por lo tanto al tirar el error el compilador, nunca se va a
ejecutar el código, incluyendo el On Error.

Es posible solucionar esto, o hay que conformarse con el error que tira el
compilador y que el usuario haga lectura de los famosos "Leame.txt"
avisándole ahí.
Encontré muy poco en la ayuda, y no parece solucionar esto.

Saludos.

Adriano

Preguntas similare

Leer las respuestas

#1 KL
12/02/2005 - 21:08 | Informe spam
Adriano,

Una forma de atacar el problema podria ser la de crear el codigo q usa las
librerias en cuestion sobre la marcha, despues de comprobar si existe la
libreria en el sistema. Te pongo un ejemplo del posible codigo .

Saludos,
KL

'-Inicio Codigo
Option Explicit

Private Sub Workbook_Open()
Dim Modulo As Object
Dim Componente As Object
Dim Fila As Integer
Dim x As Variant
Dim miMacro As String
Dim Mensaje1 As String
Dim Mensaje2 As String
Dim Libreria As String

miMacro = "MiMacro" 'nombre del macro a introducir.
Libreria = "C:\WINDOWS\system32\miLibreria.dll"
Mensaje1 = "Ejecute el batch primero!"
Mensaje2 = "Ya existe el nombre - " & miMacro _
& Chr(13) & "No se ha podido anadir codigo!"

'Comprueba si existe la libreria.
If Dir(Libreria) = "" Then
MsgBox Mensaje1
Exit Sub
Else
'Comprueba si existen procedimientos o
'variables con el mismo nombre.
With ActiveWorkbook
For Each Componente In .VBProject.VBComponents
With Componente.CodeModule
x = .Find(Procedimiento, 1, 1, .CountOfLines, _
1, False, False)
If x Then
MsgBox Mensaje2, vbCritical + vbOKOnly
Exit Sub
End If
End With
Next Componente

'Crea Modulo
Application.VBE.MainWindow.Visible = False
Set Modulo = .VBProject.VBComponents.Add(1)

'Introduce el codigo
With Modulo.CodeModule
Fila = .CountOfLines
.InsertLines Fila + 1, "Sub " & miMacro & "()"
.InsertLines Fila + 2, "MsgBox ""Hola!"""
.InsertLines Fila + 3, "End Sub"
End With
End With
End If
End Sub
'-Fin Codigo

"Adriano" wrote in message
news:
Hola a todos, hago uso de las dlls y ocxs de Windows Common Controls y
Dialog Controls en mi proyecto.
Pero el hecho es que si no están instaladas en la PC donde se corre el
proyecto VBA, éste da un error de Compilación en Código Oculto (si es que
protegieron el Proyecto para no permitir su visualización).

Hice un On Error para hacer un trap en el Open del ThisWorkbook en donde
le
quería avisar al usuario que ejecute un batch que simplemente copia los
ActiveX en Windows/System32 y sale funcionando.

Pero evidentemente VBA, antes de ejecutar compila, y el error es en tiempo
de compilación, por lo tanto al tirar el error el compilador, nunca se va
a
ejecutar el código, incluyendo el On Error.

Es posible solucionar esto, o hay que conformarse con el error que tira el
compilador y que el usuario haga lectura de los famosos "Leame.txt"
avisándole ahí.
Encontré muy poco en la ayuda, y no parece solucionar esto.

Saludos.

Adriano


Respuesta Responder a este mensaje
#2 Adriano
13/02/2005 - 15:30 | Informe spam
Gracias por la respuesta KL, lo analizo si es aplicable a mi sistema y
aviso.
En principio creería que no, porque justamente en el Open hago uso de
muchísimo código, y llamadas a otros procedimientos y funciones, pero igual
lo pruebo.
Actualmente en mi libro tengo más de 10 módulos con ya unas 100 subrutinas.
De todas maneras me sirve mucho tu aporte porque lo puedo aplicar a otras
tareas que tenía en mente para más adelante.

Saludos.

"KL" escribió en el mensaje
news:#
Adriano,

Una forma de atacar el problema podria ser la de crear el codigo q usa las
librerias en cuestion sobre la marcha, despues de comprobar si existe la
libreria en el sistema. Te pongo un ejemplo del posible codigo .

Saludos,
KL

'-Inicio Codigo
Option Explicit

Private Sub Workbook_Open()
Dim Modulo As Object
Dim Componente As Object
Dim Fila As Integer
Dim x As Variant
Dim miMacro As String
Dim Mensaje1 As String
Dim Mensaje2 As String
Dim Libreria As String

miMacro = "MiMacro" 'nombre del macro a introducir.
Libreria = "C:\WINDOWS\system32\miLibreria.dll"
Mensaje1 = "Ejecute el batch primero!"
Mensaje2 = "Ya existe el nombre - " & miMacro _
& Chr(13) & "No se ha podido anadir codigo!"

'Comprueba si existe la libreria.
If Dir(Libreria) = "" Then
MsgBox Mensaje1
Exit Sub
Else
'Comprueba si existen procedimientos o
'variables con el mismo nombre.
With ActiveWorkbook
For Each Componente In .VBProject.VBComponents
With Componente.CodeModule
x = .Find(Procedimiento, 1, 1, .CountOfLines, _
1, False, False)
If x Then
MsgBox Mensaje2, vbCritical + vbOKOnly
Exit Sub
End If
End With
Next Componente

'Crea Modulo
Application.VBE.MainWindow.Visible = False
Set Modulo = .VBProject.VBComponents.Add(1)

'Introduce el codigo
With Modulo.CodeModule
Fila = .CountOfLines
.InsertLines Fila + 1, "Sub " & miMacro & "()"
.InsertLines Fila + 2, "MsgBox ""Hola!"""
.InsertLines Fila + 3, "End Sub"
End With
End With
End If
End Sub
'-Fin Codigo

"Adriano" wrote in message
news:
> Hola a todos, hago uso de las dlls y ocxs de Windows Common Controls y
> Dialog Controls en mi proyecto.
> Pero el hecho es que si no están instaladas en la PC donde se corre el
> proyecto VBA, éste da un error de Compilación en Código Oculto (si es


que
> protegieron el Proyecto para no permitir su visualización).
>
> Hice un On Error para hacer un trap en el Open del ThisWorkbook en donde
> le
> quería avisar al usuario que ejecute un batch que simplemente copia los
> ActiveX en Windows/System32 y sale funcionando.
>
> Pero evidentemente VBA, antes de ejecutar compila, y el error es en


tiempo
> de compilación, por lo tanto al tirar el error el compilador, nunca se


va
> a
> ejecutar el código, incluyendo el On Error.
>
> Es posible solucionar esto, o hay que conformarse con el error que tira


el
> compilador y que el usuario haga lectura de los famosos "Leame.txt"
> avisándole ahí.
> Encontré muy poco en la ayuda, y no parece solucionar esto.
>
> Saludos.
>
> Adriano
>
>


Respuesta Responder a este mensaje
#3 KL
13/02/2005 - 16:15 | Informe spam
Adriano,

Otra forma (la mas comun despues de crear un ejecutable q es lo ideal en
este caso) de resolver tu problema es crear una especie de centralita usando
un fichero *.xls O sea, creas un fichero (digamos Inicio.xls) q al abrirse
chequeara si existe la libreria y abrira otro fichero (digamos
Principal.xls) o lanzara el batch (batch.exe) y luego abrira el
Principal.xls. Si necesitas ayuda con el codigo, dimelo.

Saludos,
KL

"Adriano" wrote in message
news:
Gracias por la respuesta KL, lo analizo si es aplicable a mi sistema y
aviso.
En principio creería que no, porque justamente en el Open hago uso de
muchísimo código, y llamadas a otros procedimientos y funciones, pero
igual
lo pruebo.
Actualmente en mi libro tengo más de 10 módulos con ya unas 100
subrutinas.
De todas maneras me sirve mucho tu aporte porque lo puedo aplicar a otras
tareas que tenía en mente para más adelante.

Saludos.

"KL" escribió en el mensaje
news:#
Adriano,

Una forma de atacar el problema podria ser la de crear el codigo q usa
las
librerias en cuestion sobre la marcha, despues de comprobar si existe la
libreria en el sistema. Te pongo un ejemplo del posible codigo .

Saludos,
KL

'-Inicio Codigo
Option Explicit

Private Sub Workbook_Open()
Dim Modulo As Object
Dim Componente As Object
Dim Fila As Integer
Dim x As Variant
Dim miMacro As String
Dim Mensaje1 As String
Dim Mensaje2 As String
Dim Libreria As String

miMacro = "MiMacro" 'nombre del macro a introducir.
Libreria = "C:\WINDOWS\system32\miLibreria.dll"
Mensaje1 = "Ejecute el batch primero!"
Mensaje2 = "Ya existe el nombre - " & miMacro _
& Chr(13) & "No se ha podido anadir codigo!"

'Comprueba si existe la libreria.
If Dir(Libreria) = "" Then
MsgBox Mensaje1
Exit Sub
Else
'Comprueba si existen procedimientos o
'variables con el mismo nombre.
With ActiveWorkbook
For Each Componente In .VBProject.VBComponents
With Componente.CodeModule
x = .Find(Procedimiento, 1, 1, .CountOfLines, _
1, False, False)
If x Then
MsgBox Mensaje2, vbCritical + vbOKOnly
Exit Sub
End If
End With
Next Componente

'Crea Modulo
Application.VBE.MainWindow.Visible = False
Set Modulo = .VBProject.VBComponents.Add(1)

'Introduce el codigo
With Modulo.CodeModule
Fila = .CountOfLines
.InsertLines Fila + 1, "Sub " & miMacro & "()"
.InsertLines Fila + 2, "MsgBox ""Hola!"""
.InsertLines Fila + 3, "End Sub"
End With
End With
End If
End Sub
'-Fin Codigo

"Adriano" wrote in message
news:
> Hola a todos, hago uso de las dlls y ocxs de Windows Common Controls y
> Dialog Controls en mi proyecto.
> Pero el hecho es que si no están instaladas en la PC donde se corre el
> proyecto VBA, éste da un error de Compilación en Código Oculto (si es


que
> protegieron el Proyecto para no permitir su visualización).
>
> Hice un On Error para hacer un trap en el Open del ThisWorkbook en
> donde
> le
> quería avisar al usuario que ejecute un batch que simplemente copia los
> ActiveX en Windows/System32 y sale funcionando.
>
> Pero evidentemente VBA, antes de ejecutar compila, y el error es en


tiempo
> de compilación, por lo tanto al tirar el error el compilador, nunca se


va
> a
> ejecutar el código, incluyendo el On Error.
>
> Es posible solucionar esto, o hay que conformarse con el error que tira


el
> compilador y que el usuario haga lectura de los famosos "Leame.txt"
> avisándole ahí.
> Encontré muy poco en la ayuda, y no parece solucionar esto.
>
> Saludos.
>
> Adriano
>
>






Respuesta Responder a este mensaje
#4 Adriano
14/02/2005 - 18:00 | Informe spam
Ahhh ahh, esa sí es una buena idea y solución.
Gracias KL, no con el código todo bien, cualquier cosa te comento.

Saludos. Adriano

"KL" escribió en el mensaje
news:
Adriano,

Otra forma (la mas comun despues de crear un ejecutable q es lo ideal en
este caso) de resolver tu problema es crear una especie de centralita


usando
un fichero *.xls O sea, creas un fichero (digamos Inicio.xls) q al abrirse
chequeara si existe la libreria y abrira otro fichero (digamos
Principal.xls) o lanzara el batch (batch.exe) y luego abrira el
Principal.xls. Si necesitas ayuda con el codigo, dimelo.

Saludos,
KL

"Adriano" wrote in message
news:
> Gracias por la respuesta KL, lo analizo si es aplicable a mi sistema y
> aviso.
> En principio creería que no, porque justamente en el Open hago uso de
> muchísimo código, y llamadas a otros procedimientos y funciones, pero
> igual
> lo pruebo.
> Actualmente en mi libro tengo más de 10 módulos con ya unas 100
> subrutinas.
> De todas maneras me sirve mucho tu aporte porque lo puedo aplicar a


otras
> tareas que tenía en mente para más adelante.
>
> Saludos.
>
> "KL" escribió en el mensaje
> news:#
>> Adriano,
>>
>> Una forma de atacar el problema podria ser la de crear el codigo q usa
>> las
>> librerias en cuestion sobre la marcha, despues de comprobar si existe


la
>> libreria en el sistema. Te pongo un ejemplo del posible codigo .
>>
>> Saludos,
>> KL
>>
>> '-Inicio Codigo
>> Option Explicit
>>
>> Private Sub Workbook_Open()
>> Dim Modulo As Object
>> Dim Componente As Object
>> Dim Fila As Integer
>> Dim x As Variant
>> Dim miMacro As String
>> Dim Mensaje1 As String
>> Dim Mensaje2 As String
>> Dim Libreria As String
>>
>> miMacro = "MiMacro" 'nombre del macro a introducir.
>> Libreria = "C:\WINDOWS\system32\miLibreria.dll"
>> Mensaje1 = "Ejecute el batch primero!"
>> Mensaje2 = "Ya existe el nombre - " & miMacro _
>> & Chr(13) & "No se ha podido anadir codigo!"
>>
>> 'Comprueba si existe la libreria.
>> If Dir(Libreria) = "" Then
>> MsgBox Mensaje1
>> Exit Sub
>> Else
>> 'Comprueba si existen procedimientos o
>> 'variables con el mismo nombre.
>> With ActiveWorkbook
>> For Each Componente In .VBProject.VBComponents
>> With Componente.CodeModule
>> x = .Find(Procedimiento, 1, 1, .CountOfLines, _
>> 1, False, False)
>> If x Then
>> MsgBox Mensaje2, vbCritical + vbOKOnly
>> Exit Sub
>> End If
>> End With
>> Next Componente
>>
>> 'Crea Modulo
>> Application.VBE.MainWindow.Visible = False
>> Set Modulo = .VBProject.VBComponents.Add(1)
>>
>> 'Introduce el codigo
>> With Modulo.CodeModule
>> Fila = .CountOfLines
>> .InsertLines Fila + 1, "Sub " & miMacro & "()"
>> .InsertLines Fila + 2, "MsgBox ""Hola!"""
>> .InsertLines Fila + 3, "End Sub"
>> End With
>> End With
>> End If
>> End Sub
>> '-Fin Codigo
>>
>> "Adriano" wrote in message
>> news:
>> > Hola a todos, hago uso de las dlls y ocxs de Windows Common Controls


y
>> > Dialog Controls en mi proyecto.
>> > Pero el hecho es que si no están instaladas en la PC donde se corre


el
>> > proyecto VBA, éste da un error de Compilación en Código Oculto (si es
> que
>> > protegieron el Proyecto para no permitir su visualización).
>> >
>> > Hice un On Error para hacer un trap en el Open del ThisWorkbook en
>> > donde
>> > le
>> > quería avisar al usuario que ejecute un batch que simplemente copia


los
>> > ActiveX en Windows/System32 y sale funcionando.
>> >
>> > Pero evidentemente VBA, antes de ejecutar compila, y el error es en
> tiempo
>> > de compilación, por lo tanto al tirar el error el compilador, nunca


se
> va
>> > a
>> > ejecutar el código, incluyendo el On Error.
>> >
>> > Es posible solucionar esto, o hay que conformarse con el error que


tira
> el
>> > compilador y que el usuario haga lectura de los famosos "Leame.txt"
>> > avisándole ahí.
>> > Encontré muy poco en la ayuda, y no parece solucionar esto.
>> >
>> > Saludos.
>> >
>> > Adriano
>> >
>> >
>>
>>
>
>


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida