** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Otros de Microsoft: Windows y Office > Visual Basic Clásico (VB3...VB6)
  Mensajes nuevos Mensajes nuevos RSS - Función que se está ejecutando
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoFunción que se está ejecutando

 Responder Responder Página  12>
Autor
Mensaje
lbauluz Ver desplegable
Administrador
Administrador
Avatar

Unido: 29/Marzo/2005
Localización: ROC, NY
Estado: Sin conexión
Puntos: 3258
Enlace directo a este mensaje Tema: Función que se está ejecutando
    Enviado: 28/Marzo/2010 a las 00:43
Tengo un programa en Visual Basic 6 donde tengo una función que escribe un log.

La función es estándar para todos los casos, pero necesito poner en qué función o sub función se encuentra, por ejemplo:


Private Function fFuncionUno() As Integer
EscribeLog LeerINI("Mensajes", "MsgErrAm", Err.Number, Err.Description, "fFuncionUno")
End Function

Private Function fFuncionDos() As Integer
EscribeLog LeerINI("Mensajes", "MsgErrAm", Err.Number, Err.Description, "fFuncionDos")
End Function


Lo que quiero es que en el parámetro que aparece en última posición se pueda poner de forma automática el nombre de la función.

Un saludo.


Luis

Editado por lbauluz - 28/Marzo/2010 a las 00:45
Those are my principles, and if you don't like them... well, I have others. Groucho Marx
Arriba
Emilio Ver desplegable
Administrador
Administrador

Santander

Unido: 08/Agosto/2004
Localización: España
Estado: Sin conexión
Puntos: 18790
Enlace directo a este mensaje Enviado: 28/Marzo/2010 a las 08:26
Hola Luis! Tongue
 
Me temo que no es posible saberlo, yo hice años ha la misma pregunta y me dijeron eso y me aconsejaron que utilizara las MZTools que ayudan a escribir en el código el nombre de la función "actual"
Saludos a todos desde Huelva

http://www.mvp-access.es/emilio/
Arriba
Jordi-Albert Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 06/Abril/2006
Localización: Alemania
Estado: Sin conexión
Puntos: 4315
Enlace directo a este mensaje Enviado: 29/Marzo/2010 a las 00:14
Una posible opcion es modificar, via VBA, las propias funciones.

dependiendo de como quiereas llamar a esta funcion tuya, podrias añadir la llamada en todas las funciones, o bien buscar la llamada y modificar los parametros.

En estos momentos estoy de viaje en suiza, por lo que no te puedo buscar las funciones que necesitas (no las tengo en este ordenador... y además estaré toda la semana fuera)

de todas maneras puedes empezar por mirar en mis funcines favoritas el "crear formulario desde VBA"...(aunque soy consciente que no es exactamente lo que deseas, pero podrás encontrar los objetos con los que trabajar)
Arriba
Jordi-Albert Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 06/Abril/2006
Localización: Alemania
Estado: Sin conexión
Puntos: 4315
Enlace directo a este mensaje Enviado: 30/Marzo/2010 a las 18:00
CONSEGUIDO!!!!   (Emilio, lamento confirmar que es posible)
 
lamento haber tardado tanto, pero al estar de viaje no tengo la documentacion y he tenido que ir investigando
 
Sub updateVBACode()
Dim VBComp    As VBComponent
Dim VBComps   As VBComponents
Dim intIdx    As Integer
Dim intPos    As Integer
Dim strLine   As String
Dim strLine2  As String
 
Set VBComps = Workbooks("Personal.xls").VBProject.VBComponents
For Each VBComp In VBComps
   If VBComp.Type = vbext_ct_StdModule Then
      Debug.Print "Numero lineas: " & VBComp.CodeModule.CountOfLines
      For intIdx = 1 To VBComp.CodeModule.CountOfLines
         strLine = VBComp.CodeModule.Lines(intIdx, 1)
         Debug.Print intIdx & " -> " & strLine
        
         intPos = InStr(strLine, "EscribeLog")
         If intPos > 0 Then
            VBComp.CodeModule.DeleteLines (intIdx)
            strLine2 = "EscribeLog LeerINI(""Mensajes"", ""MsgErrAm"", Err.Number, Err.Description, """ & VBComp.CodeModule.ProcOfLine(intIdx, vbext_pk_Proc) & """)"""
            Debug.Print strLine2
            VBComp.CodeModule.InsertLines intIdx, strLine2
         End If
      Next
   End If
Next
End Sub
 
cambia el "personal.xls" por el nombre de tu fichero.
 
en todos los lugares donde encuente la palabra EscribeLog te pondra: EscribeLog LeerINI("Mensajes", "MsgErrAm", Err.Number, Err.Description, "fFuncionUno") siendo fFuncionUno el nombre de la funcion correspondiente.
 
espero que et sea util


Editado por Jordi-Albert - 30/Marzo/2010 a las 18:04
Arriba
Jordi-Albert Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 06/Abril/2006
Localización: Alemania
Estado: Sin conexión
Puntos: 4315
Enlace directo a este mensaje Enviado: 30/Marzo/2010 a las 18:08
nota:
 
como puedes ver busco en la funcion la palabra EscribeLog, borro toda la linea y inserto una linea nueva....
 
evidentemente quizás no es lo que quieres (quizás deberiamos buscar por LeerINI
 
otra opcion es, simpre, añadir como primera linea de TODAS las Func/Sub la llamada...
 
entiendo que, si te miras el código, no te debe costar mucho el adaptarlo.
 
Ya nos dirás  el que....


Editado por Jordi-Albert - 30/Marzo/2010 a las 18:08
Arriba
Patxi Sanz Ver desplegable
Administrador
Administrador
Avatar

Unido: 26/Noviembre/2007
Localización: España
Estado: Sin conexión
Puntos: 5023
Enlace directo a este mensaje Enviado: 30/Marzo/2010 a las 18:24
Jordi-Albert, una pregunta: ¿cómo puede usar Ibauluz el código que has posteado?
 
Es que estás usando objetos de VBA y Excel, e Ibauluz ha hecho la pregunta para VB6.
Un saludo,

Patxi Sanz
Tudela (NA)
Mi Web
Arriba
Jordi-Albert Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 06/Abril/2006
Localización: Alemania
Estado: Sin conexión
Puntos: 4315
Enlace directo a este mensaje Enviado: 30/Marzo/2010 a las 18:29

Patxi, felicidades!!! buen punto.....

 
en principio hay dos cosas a tener en cuenta:
1- se debe referenciar el "Microsoft Visual Basic for Aplications Extensibility..."
 
2- la única referencia a excel es el "WorkBook"... se deberá adaptar al tipo correspondiente según la aplicacion....
 
tal y como comentaab, no estoy en casa y por ello no tengo la documentacion al alcance de la mano...
 
Luis: informanos del tema, pero si no lo averiguas (mira google por alguna de estas palabras) deberás esperar a que vuelva a casa....
Arriba
Jordi-Albert Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 06/Abril/2006
Localización: Alemania
Estado: Sin conexión
Puntos: 4315
Enlace directo a este mensaje Enviado: 30/Marzo/2010 a las 18:37
en el caso de Word es Document
 
en el resto de los que he mirado son:  VBComp directamente
 
de todas maneras he visto que tanto se puede utilizar con Me. como sin objeto... (por ejemplo para access)
 
 
Dim VBAEditor As VBIDE.VBE
Dim VBProj As VBIDE.VBProject
Dim VBComp As VBIDE.VBComponent
Dim CodeMod As VBIDE.CodeModule

Set VBAEditor = Application.VBE
'''''''''''''''''''''''''''''''''''''''''''
Set VBProj = VBAEditor.ActiveVBProject
' or
Set VBProj = Application.Workbooks("Book1.xls").VBProject
'''''''''''''''''''''''''''''''''''''''''''
Set VBComp = ActiveWorkbook.VBProject.VBComponents("Module1")
' or
Set VBComp = VBProj.VBComponents("Module1")
'''''''''''''''''''''''''''''''''''''''''''
Set CodeMod = ActiveWorkbook.VBProject.VBComponents("Module1").CodeModule
' or
Set CodeMod = VBComp.CodeModule
 
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 11736
Enlace directo a este mensaje Enviado: 30/Marzo/2010 a las 18:39
Jordi, si lo he entendido bien, ese código recorre el código (valga la redundancia) buscando un texto para sustituir la línea entera...
 
La verdad es que es ingenioso, aunque yo sigo decantandome por la opción MZTools. En mi caso lo utilizo en el control de errores (me parece que es lo que maneja tambien Luis) y me va de lujo.
 
De todas formas, una buena aportación para cualquier sustitución de código... convenientemente "generalizada", claro.
Thumbs%20Up
Xavi, un minyó de Terrassa

Mi web
Arriba
Patxi Sanz Ver desplegable
Administrador
Administrador
Avatar

Unido: 26/Noviembre/2007
Localización: España
Estado: Sin conexión
Puntos: 5023
Enlace directo a este mensaje Enviado: 30/Marzo/2010 a las 18:44
A ver si me explico:
 
- Ibauluz quiere modificar/alterar funciones en módulos/proyectos de VB6.
 
- El código que has posteado modifica/altera funciones en módulos/proyectos de aplicaciones que utilicen VBA: Excel, Access, ...
 
Vuelvo a repetir la pregunta: ¿cómo puede usar Ibauluz el código que has posteado?
Un saludo,

Patxi Sanz
Tudela (NA)
Mi Web
Arriba
Jordi-Albert Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 06/Abril/2006
Localización: Alemania
Estado: Sin conexión
Puntos: 4315
Enlace directo a este mensaje Enviado: 30/Marzo/2010 a las 18:50
perdón....
 
No conozco MZtools... lo reconozco.
 
la funcion que he preparado intenta adaptarse al código propuesto por Luís.... pero mi intencion es dar a conocer los objetos y algunos métodos necesarios para  modificar el código...
 
si se desea modificar un "evento" - como el xxx_change- diría (y tampoco lo controlo) que se debe utilizar un método especifico....
 
no he probado VB6... no tengo el programa...
 
de todas maneras diría que debería funcionar.....
Arriba
Patxi Sanz Ver desplegable
Administrador
Administrador
Avatar

Unido: 26/Noviembre/2007
Localización: España
Estado: Sin conexión
Puntos: 5023
Enlace directo a este mensaje Enviado: 30/Marzo/2010 a las 19:03
Para conocer Mz-Tools:
 
 
En cuanto al código, aunque VB6 y VBA son parecidos en algunos aspectos, son bastante distintos en otros. Y una de las diferencias es que VB6 está pre-compilado, con lo que no se puede modificar su código cuando se ejecuta, al contrario que el VBA, que al no estar pre-compilado, podemos modificarlo en tiempo de ejecución.
 
Otra es la librería que indicas que hay que referenciar: es una librería propia de VBA, no de VB6, y permite acceder al código de objetos que dispongan de VBA: libros de Excel, documentos de Word, ... Pero no podemos acceder al código de VB6, porque no forma parte de VBA, ni lo usa.
Un saludo,

Patxi Sanz
Tudela (NA)
Mi Web
Arriba
Jordi-Albert Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 06/Abril/2006
Localización: Alemania
Estado: Sin conexión
Puntos: 4315
Enlace directo a este mensaje Enviado: 30/Marzo/2010 a las 19:07
ups!!
 
cierto... VB6 es precompilado, pero entiendo que, para efectuar cualquier modificacion de código tienes que tener el código, por  lo que continuo pensando que debería funcionar...
 
es más, entiendo que el código de VB6 pueden ser ficheros de texto plano (o estoy equivocado???)
 
 
Arriba
Patxi Sanz Ver desplegable
Administrador
Administrador
Avatar

Unido: 26/Noviembre/2007
Localización: España
Estado: Sin conexión
Puntos: 5023
Enlace directo a este mensaje Enviado: 30/Marzo/2010 a las 19:26
Sí, son archivos de texto cuando estás diseñando la aplicación. Una vez precompilada, se conveirte en un Exe, Ocx o Dll, y estos ya no son legibles con un editor de texto.
 
Y teniendo los archivos de texto, sí, puedes exportarlos a otras aplicaciones para reemplazar/colocar las líneas que queramos. Pero teniendo la posibilidad de usar las Mz-Tools de una forma más simple sobre el editor de VB6, ¿para qué complicarnos la vida exportando, reemplazando y volviendo a importar?
Un saludo,

Patxi Sanz
Tudela (NA)
Mi Web
Arriba
lbauluz Ver desplegable
Administrador
Administrador
Avatar

Unido: 29/Marzo/2005
Localización: ROC, NY
Estado: Sin conexión
Puntos: 3258
Enlace directo a este mensaje Enviado: 30/Marzo/2010 a las 20:48
Hola a todos.

Muchas gracias Jordi-Albert, pero me temo que las pruebas que estoy haciendo didcen que esto no funciona, como ya advertía Patxi Sanz.

De todas formas voy a seguir intentándolo, aunque si Emilio no lo ha conseguido, me temo que va a ser difícil.

Luis
Those are my principles, and if you don't like them... well, I have others. Groucho Marx
Arriba
 Responder Responder Página  12>
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable