MS Excel 2003: vincular datos al cuadro combinado y actualizar los datos subyacentes

Los datos expuestos en este blog, son solo de índole informativo. Por favor realiza siempre una copia de seguridad antes de realizar cualquier cambio en tu proyecto.

MS Excel 2003: vincular datos al cuadro combinado y actualizar los datos subyacentes

Este tutorial de Excel muestra cómo escribir una macro para vincular datos a un cuadro combinado y actualizar los datos subyacentes en Excel 2003 y versiones anteriores (con capturas de pantalla e instrucciones paso a paso).

P: En Microsoft Excel 2003/XP/2000/97, me gustaría poder usar un cuadro combinado (en otra hoja de trabajo) para mostrar datos de la Hoja1, luego poder editar esos datos y guardar los cambios nuevamente en la Hoja1. ¿Cómo puedo hacer esto?

R: Esto se puede hacer a través del código de macro.

Veamos un ejemplo.

Descargue la hoja de cálculo de Excel (que se muestra a continuación)

En nuestra hoja de cálculo, nuestros datos están en la Hoja1.

En Sheet2, tenemos nuestro cuadro combinado, que está vinculado a los datos en Sheet1. Cuando el usuario selecciona un cliente en el cuadro combinado, la dirección y el número de teléfono se completan automáticamente.El llenado de estos datos se realiza mediante una macro llamada Entrada de datos (esta es la macro asignada al cuadro combinado).

El usuario puede entonces actualizar los datos en esta hoja. En nuestro ejemplo, cambiamos la dirección de Betty de 454 11th a 78 Granite St.

A continuación, hacemos clic en el botón Guardar cambios.Esto llama a una macro llamada guardar cambios.

La macro actualizará los datos apropiados en la Hoja 1 y mostrará el mensaje anterior cuando se complete.

Ahora, si vamos a la Hoja1, podemos ver que la dirección de Betty ha sido actualizada.

Puede presionar Alt+F11 para ver el código VBA. Seleccione el módulo denominado Módulo1 en la ventana de la izquierda.

codigo macro

El código de la macro se ve así:

Código de macro para guardar los cambios botón:

Sub SaveChanges()

   'Update data on Sheet1 based on changes made to data on Sheet2

   Dim LProject As Integer
   Dim LAddress As String
   Dim LPhoneNbr As String
   Dim LRow As Long
   Dim LFound As Boolean

   'Retrieve project number number
   LProject = Range("H3").Value

   'Retrieve new address and phone number information
   LAddress = Range("E5").Value
   LPhoneNbr = Range("H8").Value

   'Move to Sheet1 to save the changes
   Sheets("Sheet1").Select

   LFound = False

   LRow = 2

   Do While LFound = False
      'Found matching project, now update address and phone number information
      If Range("A" & LRow).Value = LProject Then
         LFound = True
         Range("C" & LRow).Value = LAddress
         Range("D" & LRow).Value = LPhoneNbr

     'Encountered a blank project number (assuming end of list on Sheet1)
     ElseIf IsEmpty(Range("A" & LRow).Value) = True Then
        MsgBox ("No match was found. Changes were not made.")
        Exit Sub
     End If

     LRow = LRow + 1
   Loop

   'Reposition back on Sheet2
   Sheets("Sheet2").Select
   Range("E5").Select

   MsgBox ("Changes were successfully saved.")

End Sub

Código de macro para el cuadro combinado del cliente:

Sub PopulateData()

   Dim LProject As Integer
   Dim LAddress As String
   Dim LPhoneNbr As String
   Dim LRow As Long
   Dim LFound As Boolean

   'Retrieve project number number
   LProject = Range("H3").Value

   'Move to Sheet1
   Sheets("Sheet1").Select

   LFound = False

   LRow = 2

   Do While LFound = False
      'Found matching project, now update address and phone number information on Sheet2
      If Range("A" & LRow).Value = LProject Then
         LFound = True
         LAddress = Range("C" & LRow).Value
         LPhoneNbr = Range("D" & LRow).Value

         Sheets("Sheet2").Select
         Range("E5").Value = LAddress
         Range("H8").Value = LPhoneNbr

      'Encountered a blank project number (assuming end of list on Sheet1)
      ElseIf IsEmpty(Range("A" & LRow).Value) = True Then
         MsgBox ("No match was found for combo box selection.")
         Exit Sub
      End If

      LRow = LRow + 1
   Loop

End Sub