Obtener el Valor de una Celda Combinada (Agrupada)

Expertos: Buenos días.

Requiero ayuda con código VBA, no lo puedo solucionar.

Tengo un archivo con 23 columnas, y cientos de Filas. Pero dentro de las primeras 5 columnas es posible que en ocasiones se agrupen o combinen Filas.

Hice un formulario para sacar los valores de toda una Fila. <<<El problema viene cuando las Filas estan combinadas, entonces esas celdas combinadas dan un valor VACIO>>>

Hice una prueba desagrupando las celdas y entonces si puedo traer los valores de toda la fila, pero como están agrupadas, no me da el valor. Por favor ayuda, aquí coloco imágenes del excel, del formulario y la parte del código VBA

En imagen "1 Fila seleccionada" quiero traer al formulario la fila 16, pero las Columnas B, C, DE, E, F están Combinadas (Agrupadas) y quedan sin valor (Vacías)

El primer código adjunto trate de identificar la celda agruapada pero no funciona.

El segundo código adjunto trabaja pero las celdas agrupadas las trae vacías.

Ayuda por favor !

                                ' // Llenar los cuadro de texto con los datos del registro elegido
Private Sub UserForm_Initialize()
  Dim s As Long
  For i = 1 To 23
      If Cell.MergeCells Then
           MsgBox "esta agrupada"
     Else
           Me.Controls("TextBox" & i).Value = ActiveCell.Offset(0, i - 1).Value
           h = ActiveCell.Offset(0, i - 1).Value
     End If
  Next i
  s = ActiveCell.Row
  Label27.Caption = s
End Sub
-------------------------------------------------------------------------
------------------------------------------------------------------------
                                ' // Llenar los cuadro de texto con los datos del registro elegido
Private Sub UserForm_Initialize()
  Dim s As Long
    For i = 1 To 23
           Me.Controls("TextBox" & i).Value = ActiveCell.Offset(0, i - 1).Value
           h = ActiveCell.Offset(0, i - 1).Value
    Next i
    s = ActiveCell.Row
    Label27.Caption = s
End Sub

1 respuesta

Respuesta
3

Te dejo 2 muestras de rangos combinados, tanto en modo vertical como horizontal.

Y el código que utilizo para que me muestre en cada control esos valores 'compartidos' o no.

Private Sub CommandButton1_Click()
Dim s As Long
filx = Range(Selection.Address).Row
    For i = 1 To 4
        Cells(filx, i).Select
        If ActiveCell.MergeCells = True Then
            Me.Controls("TextBox" & i).Value = ActiveCell.Text
        Else
           Me.Controls("TextBox" & i).Value = Cells(filx, i).Value
        End If
           'h = ActiveCell.Offset(0, i - 1).Value
    Next i
    s = ActiveCell.Row
    Label27.Caption = s
End Sub

Lo dejé en un botón pero bien puede ir en tu evento Initialize.

Faltaría que declares el resto de las variables. Como 'h' no se utiliza en ninguna instrucción la inhabilité.

Espero te sirva de ayuda o guía para resolver tu situación.

Elsa ! Funcionó perfectamente, solo que ahora tengo el problema que al oprirmir el botón guardar después de hacer una modificación. Nuevamente se va hasta la primera fila de la Celda Combinada, ayúdame ! Adjunto código fuente de esta función. Traté de hacer la misma logia que utilizaste pero no pude armarla.

Private Sub CommandButton1_Click()      ' // Actualizar el registro - se oprimio la techa guardar
  Dim x As Integer
  r = ActiveCell.Row
  Cells(r, 1).Select
  For i = 1 To 23
      ActiveCell.Offset(0, i - 1).Value = Me.Controls("TextBox" & i).Value
  Next i
  Unload Me
End Sub

Habrás notado que el foro ya no envía notificación de nuevas consultas ;(

Te dejo la macro ajustada para el botón de Guardar. Lo que necesitas es guardar la fila de la selección.

Private Sub CommandButton2_Click()      ' // Actualizar el registro - se oprimio la techa guardar
  Dim x As Integer
  'r = ActiveCell.Row
  filx = Range(Selection.Address).Row
  For i = 1 To 23
    Cells(filx, i).Select
        If ActiveCell.MergeCells = True Then
            ActiveCell.Value = Me.Controls("TextBox" & i).Value
        Else
           Cells(filx, i) = Me.Controls("TextBox" & i).Value
        End If
  Next i
  Unload Me
End Sub

Según mis primeras imágenes, si seleccionas la celda de la col A, se mostrarán los campos de la fila 15. En cambio si seleccionas desde otras columnas, se mostrarán los registros de esa fila seleccionada. Y así se guardará.

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas