Foros del Web » Soporte técnico » Ofimática »

Ejecutar Macro Al Cambiar Valor De Una Celda

Estas en el tema de Ejecutar Macro Al Cambiar Valor De Una Celda en el foro de Ofimática en Foros del Web. Buenas tardes compañeros mi inquietud es la siguiente: Estoy consultando atravez de una macro algunos datos de una BD, la conexion esta bien, la estructura ...
  #1 (permalink)  
Antiguo 05/01/2010, 15:28
Avatar de Carlojas  
Fecha de Ingreso: junio-2007
Ubicación: Shikasta
Mensajes: 1.272
Antigüedad: 16 años, 10 meses
Puntos: 49
Ejecutar Macro Al Cambiar Valor De Una Celda

Buenas tardes compañeros mi inquietud es la siguiente:
Estoy consultando atravez de una macro algunos datos de una BD, la conexion esta bien, la estructura de la hoja de excel es la siguiente:

ORDEN CANTIDAD REFERENCIA ORDEN CANTIDAD REFERENCIA

Esas son las 6 columnas que tengo en mi hoja de excel, lo que deseo hacer si se puede claro esta es que por ejemplo al digitar un código de orden en cualquiera de las columnas ORDEN me lista los datos asociados a la misma, datos que consulto de mi BD y que aparescan al frente en las columnas CANTIDAD y REFERENCIA, hasta ahora lo que he logrado es listar los datos pero pasandole un valor estatico es decir la columna "A2" por ejemplo que estaria la primera orden, pero la verdad no se como comparar o validar si se esta digitando algo en en el rango de celdas en el estarían las ordenes.

De Antemano muchas gracias por su colaboración al respecto y si estoy equivocado en mi planteamiento les agradesco me lo hagan saber.



Saludos.
__________________
"SELECT * FROM Mujeres WHERE situacion NOT IN ('CASADAS','CON HIJOS','ATORMENTADAS','CUASI-ENNOVIADAS') AND personalidad <> 'INTENSA'"
  #2 (permalink)  
Antiguo 06/01/2010, 14:36
Avatar de Carlojas  
Fecha de Ingreso: junio-2007
Ubicación: Shikasta
Mensajes: 1.272
Antigüedad: 16 años, 10 meses
Puntos: 49
Respuesta: Ejecutar Macro Al Cambiar Valor De Una Celda

Alguna idea asi sea pequeña al respecto compañeros???


Saludos y Gracias.
__________________
"SELECT * FROM Mujeres WHERE situacion NOT IN ('CASADAS','CON HIJOS','ATORMENTADAS','CUASI-ENNOVIADAS') AND personalidad <> 'INTENSA'"
  #3 (permalink)  
Antiguo 06/01/2010, 15:33
Avatar de mrocf  
Fecha de Ingreso: marzo-2007
Ubicación: Bs.As.
Mensajes: 1.103
Antigüedad: 17 años, 1 mes
Puntos: 88
De acuerdo Ejecutar Macro Al Cambiar Valor De Una Celda

Con todo respeto: has sido muy poco claro... Y te explico por qué:

a) - "... datos de una BD ..."
¿Qué base de datos? ¿Access? ¿Otro archivo excel? ¿Otra tipo de BD?

b) - "... Estoy consultando a través de una macro algunos datos de una BD, la conexión está bien ..."
Si la "conexión está bien", y aplicas "macros"... entonces: ¡no hay más nada que agregar!!!.

¿Qué te parece si comienzas de nuevo y tratas de ir a lo profundo de tu dificultad?

¿Es Access?
¿La conexión no está bien puesto que no te brinda la información que deseas?

En fin...
  #4 (permalink)  
Antiguo 06/01/2010, 16:17
Avatar de Carlojas  
Fecha de Ingreso: junio-2007
Ubicación: Shikasta
Mensajes: 1.272
Antigüedad: 16 años, 10 meses
Puntos: 49
Respuesta: Ejecutar Macro Al Cambiar Valor De Una Celda

La BD es SQL Server, digo que esta bien la conexion porque hago una consulta cualquiera y me muestra datos, pero lo que deseo es poder ejecutar el macro al digitar el valor en una determinada celda de mi hoja o mas bien es unas determinadas celdas de mi hoja.



Saludos y Gracias.
__________________
"SELECT * FROM Mujeres WHERE situacion NOT IN ('CASADAS','CON HIJOS','ATORMENTADAS','CUASI-ENNOVIADAS') AND personalidad <> 'INTENSA'"
  #5 (permalink)  
Antiguo 06/01/2010, 17:18
Avatar de mrocf  
Fecha de Ingreso: marzo-2007
Ubicación: Bs.As.
Mensajes: 1.103
Antigüedad: 17 años, 1 mes
Puntos: 88
Respuesta: Ejecutar Macro Al Cambiar Valor De Una Celda

Fijate si el contenido del siguiente enlace te puede ayudar:

http://www.recursosvisualbasic.com.a...er-a-excel.zip
  #6 (permalink)  
Antiguo 07/01/2010, 07:53
Avatar de Carlojas  
Fecha de Ingreso: junio-2007
Ubicación: Shikasta
Mensajes: 1.272
Antigüedad: 16 años, 10 meses
Puntos: 49
Respuesta: Ejecutar Macro Al Cambiar Valor De Una Celda

Que tal mrocf, primero que todo gracias por la ayuda, pero este es el ejemplo del que te comento que ya lo probé hacer una consulta no es el incoveniente que tengo, la idea es que en determinadas celdas de mi hoja poder ejecutar una macro que consulte unos datos de mi BD y mostrar esos datos en las dos celdas anteriores a lacelda que se esta editando. como lo comentaba en el primer post, tengo 6 columnas en mi excel dos de ellas son las columnas que al editarlas se debería ejecutar la macro. lo que llevo hasta ahora es lo siguiente:

en un módulo programa la macro:
Código vb:
Ver original
  1. Sub Consulta_Condicional(ByVal Dato As String)
  2. 'Create a connection object.
  3. Dim cnMax As ADODB.Connection
  4. Set cnMax = New ADODB.Connection
  5. Dim RMServer As String
  6. RMServer = "SERVIDOR\INSTANCIA"
  7. Dim sUID As String
  8. sUID = "xxxx"
  9. Dim sPassword As String
  10. sPassword = "xxxx"
  11.  
  12. ' Provide the connection string.
  13. Dim strConn As String
  14.  
  15. 'Use the SQL Server OLE DB Provider.
  16. strConn = "Provider=sqloledb;Data Source=" & RMServer & ";database=BD;UID=" & sUID & ";Pwd=" & sPassword & ";"
  17.  
  18. 'Now open the connection.
  19. cnMax.Open strConn
  20.  
  21.  
  22. ' Create a recordset object.
  23. Dim rsMax As ADODB.Recordset
  24. Set rsMax = New ADODB.Recordset
  25. 'Dim Dato As String
  26. 'Dato = Hoja1.Range("F6")
  27.  
  28. If Dato <> vbNullString Then
  29.     With rsMax
  30.         ' Assign the Connection object.
  31.        .ActiveConnection = cnMax
  32.         ' Extract the required records.
  33.        .Open "SELECT CAST(CURQTY_10 AS INT) AS CURQTY_10, RTRIM(PRTNUM_10) AS PRTNUM_10 FROM Order_Master WHERE ORDNUM_10 = '" & Dato & "'"
  34.         ' Copy the records into cell A1 on Sheet1.
  35.        If Not rsMax.EOF Then
  36.             Hoja1.Range("B2").CopyFromRecordset rsMax
  37.         Else
  38.             MsgBox "No Existen Criterios Relacionados Con El Número De Orden Que ha Digitado", vbInformation, "Consulta De Ordenes"
  39.             Exit Sub
  40.         End If
  41.         .Close
  42.     End With
  43.     cnMax.Close
  44.     Set rsMax = Nothing
  45. Else
  46.     MsgBox "La Condición De Busqueda No Puede Estar Vacia", vbExclamation, "Consulta Condicional"
  47. End If
  48. End Sub

y en el evento change de la hora hice esto:

Código vb:
Ver original
  1. datos = "D2:D24"
  2. If Not Application.Intersect(Target, Range(datos)) Is Nothing Then
  3. 'MsgBox "Se esta cambiando alguna celda del rango " & datos & ".", vbInformation, "Ejecutar Macro"
  4. Consulta_Condicional (Hoja1.Range("D2"))
  5. End If

Como se puede observar la macro recibe un parametro en este caso del ejemplo le puse un parametro estatico lo que deseo hacer es programar para que recibe cualquier datos del rango de celdas datos = "D2:D24" la consulta me traería dos datos por ejemplo si la celda editada es la D2, entonces esos dos datos deben ir en las celdas B2 y C2, o la menos esa es la idea.


Saludos y Gracias.
__________________
"SELECT * FROM Mujeres WHERE situacion NOT IN ('CASADAS','CON HIJOS','ATORMENTADAS','CUASI-ENNOVIADAS') AND personalidad <> 'INTENSA'"

Última edición por Carlojas; 07/01/2010 a las 08:57
  #7 (permalink)  
Antiguo 07/01/2010, 15:56
Avatar de Carlojas  
Fecha de Ingreso: junio-2007
Ubicación: Shikasta
Mensajes: 1.272
Antigüedad: 16 años, 10 meses
Puntos: 49
Respuesta: Ejecutar Macro Al Cambiar Valor De Una Celda

Que tal compañeros buenas tardes para todos, al fin pude solucionar el problema que tenía de la siguiente forma, no se si será las mas adecuada pero por ahora es la que me ha funcionado:

El Macro quedo así:

Código vb:
Ver original
  1. Sub Consulta_Condicional(ByVal Dato As String)
  2. Dim cnMax As ADODB.Connection
  3. Set cnMax = New ADODB.Connection
  4. Dim RMServer As String
  5. RMServer = "SERVIDOR\INSTANCIA"
  6. Dim sUID As String
  7. sUID = "xxxx"
  8. Dim sPassword As String
  9. sPassword = "xxxx"
  10.  
  11. Dim strConn As String
  12. strConn = "Provider=sqloledb;Data Source=" & RMServer & ";database=BD;UID=" & sUID & ";Pwd=" & sPassword & ";"
  13. cnMax.Open strConn
  14.  
  15. Dim rsMax As ADODB.Recordset
  16. Set rsMax = New ADODB.Recordset
  17. Dim cOrden As String
  18. cOrden = Trim(Mid(Dato, 1, 8))
  19. Dim Posicion As String
  20. Posicion = Trim(Mid(Dato, 10, 10))
  21.  
  22. If cOrden <> vbNullString Then
  23.     With rsMax
  24.       .ActiveConnection = cnMax
  25.       .Open "SELECT CAST(CURQTY_10 AS INT) AS CURQTY_10, RTRIM(PRTNUM_10) AS PRTNUM_10, RTRIM(PLANID_01) AS PLANID_01, RTRIM(PMDES1_01) AS PMDES1_01 " & _
  26.       " FROM Order_Master INNER JOIN Part_Master ON PRTNUM_10 = PRTNUM_01 WHERE ORDNUM_10 = '" & cOrden & "'"
  27.      
  28.       If Not rsMax.EOF Then
  29.          Range(Posicion).Offset(0, -2) = rsMax.Fields(0).Value
  30.          Range(Posicion).Offset(0, -1) = rsMax.Fields(1).Value
  31.       Else
  32.          MsgBox "No Existen Criterios Relacionados Con El Número De Orden Que ha Digitado", vbInformation, "Consulta De Ordenes"
  33.          Exit Sub
  34.       End If
  35.       .Close
  36.     End With
  37.     cnMax.Close
  38.     Set rsMax = Nothing
  39. Else
  40.     MsgBox "La Condición De Busqueda No Puede Estar Vacia", vbInformation, "Consulta De Ordenes"
  41. End If
  42. End Sub

Y lo ejecuto en el evento Change de la hoja:
Código vb:
Ver original
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2. Celdas = "D2:D70,G2:G70"
  3. If Not Application.Intersect(Target, Range(Celdas)) Is Nothing Then
  4. If Target.Value <> vbNullString Then
  5.     Consulta_Condicional (Target & "-" & Target.Address)
  6. End If
  7. End If
  8. End Sub

Muchas Gracias a todos.


Saludos.
__________________
"SELECT * FROM Mujeres WHERE situacion NOT IN ('CASADAS','CON HIJOS','ATORMENTADAS','CUASI-ENNOVIADAS') AND personalidad <> 'INTENSA'"

Etiquetas: celda, ejecutar, macro
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:33.