Ver Mensaje Individual
  #6 (permalink)  
Antiguo 07/01/2010, 07:53
Avatar de Carlojas
Carlojas
 
Fecha de Ingreso: junio-2007
Ubicación: Shikasta
Mensajes: 1.272
Antigüedad: 17 años, 8 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