Excel - repetir mismo Combobox en muchas celdas

   
Vista:

repetir mismo Combobox en muchas celdas

Publicado por rafael (6 intervenciones) el 27/11/2014 21:26:25
Hola, tengo un código para repetir un combobox en las celdas que contengan validación de datos. El código toma el rango usado por la validación de datos para definir el rango del combobox(ListFillRange), así como también lo vuelve editable.
Necesito que el código haga lo mismo (repita los combo, los haga editables, copiables,etc) pero que yo defina el rango del combobox (ListFillRange) así como el rango de celdas donde aparecerá.
---------------------------------------------------------------------------------------------------------------------------------------------------------------
En si quiero que los que hace el archivo DataValComboboxSheet con sus combobox lo haga con el combobox definido por mi en el archivo SF360 Import Template FINAL.v4
-------------------------------------------------------------------------------------------------------------------------------------------------------------

Option Explicit
Private Sub TempCombo_KeyDown(ByVal _
KeyCode As MSForms.ReturnInteger, _
ByVal Shift As Integer)
'Hide combo box and move to next cell on Enter and Tab
Select Case KeyCode
Case 9
ActiveCell.Offset(0, 1).Activate
Case 13
ActiveCell.Offset(1, 0).Activate
Case Else
'do nothing
End Select

End Sub

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim str As String
Dim cboTemp As OLEObject
Dim ws As Worksheet
Dim wsList As Worksheet
Set ws = ActiveSheet
Set wsList = Sheets("ValidationLists")
Set cboTemp = ws.OLEObjects("TempCombo")
On Error Resume Next
With cboTemp
.ListFillRange = ""
.LinkedCell = ""
.Visible = False
End With
On Error GoTo errHandler
If Target.Validation.Type = 3 Then
Cancel = True
Application.EnableEvents = False
str = Target.Validation.Formula1
str = Right(str, Len(str) - 1)
With cboTemp
.Visible = True
.Left = Target.Left
.Top = Target.Top
.Width = Target.Width + 15
.Height = Target.Height + 5
.ListFillRange = str
.LinkedCell = Target.Address
End With
cboTemp.Activate
End If

errHandler:
Application.EnableEvents = True
Exit Sub

End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim str As String
Dim cboTemp As OLEObject
Dim ws As Worksheet
Set ws = ActiveSheet
Application.EnableEvents = False
Application.ScreenUpdating = False

If Application.CutCopyMode Then
'allows copying and pasting on the worksheet
GoTo errHandler
End If

Set cboTemp = ws.OLEObjects("TempCombo")
On Error Resume Next
With cboTemp
.Top = 10
.Left = 10
.Width = 0
.ListFillRange = ""
.LinkedCell = ""
.Visible = False
.Value = ""
End With

errHandler:
Application.ScreenUpdating = True
Application.EnableEvents = True
Exit Sub

End Sub
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de LaO

repetir mismo Combobox en muchas celdas

Publicado por LaO (67 intervenciones) el 27/11/2014 23:29:17
Hoa Rafael,

Peligroso terreno en el que entras generando copias de este tipo en una hoja Excel. Hay diferentes formas de implementar esto sin comprometer sensiblemente los recursos del usuario.

Pero bien, si lo que deseas es copiar el control ComboBox en un rango deseado estás rutinas cumplen la tarea:

Nota: sbGetShapeCopy() es el procedimiento que deberás llamar para pasar el parámetro del rango a la rutina sbShapeCopy(ByVal sRange As String)

---------------------------------------------------------------------------------------------------------------------------------------------------->

Private Sub sbShapeCopy(ByVal sRange As String)
On Error GoTo x

'configura esquema de copiado
ThisWorkbook.Sheets("Import").Shapes("TempCombo").Copy
ThisWorkbook.Sheets("Import").Paste Destination:=ThisWorkbook.Sheets("Import").Range(sRange)

Exit Sub

x:

MsgBox "Error : " & Err.Description, vbCritical, "Mensaje"

End Sub

Public Sub sbGetShapeCopy()
Dim objCell As Range
Dim sRange As String

On Error GoTo x

'aplica copia en rango seleccionado
For Each objCell In Selection.Cells

sRange = objCell.Address
sbShapeCopy (sRange)

Next

'mensaje final
MsgBox "Finalizado!", vbInformation, "Message"

Exit Sub

x:

MsgBox "Error : " & Err.Description, vbCritical, "Mensaje"

End Sub

---------------------------------------------------------------------------------------------------------------------------------------------------->

Espero te sea de utlidad.

Un saludo,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

repetir mismo Combobox en muchas celdas

Publicado por rafael (6 intervenciones) el 28/11/2014 00:02:12
Hola LaO,

Antes que nada gracias por responder tan rápido, el código copia y pega en un rango de celdas, sin embargo como tu dices compromete sensiblemente los recursos del usuario, por esta razón es que necesito que solo aparezcan cuando se da click sobre la celda deseada y mientras permanezcan ocultos, como se muestra
en el archivo DataValComboboxSheet.xlsm y a la vez que la info seleccionada en el combobx sea suceptible a copiarse y pegarse en las demás celdas como si no exisitiera el combobox (ej. DataValComboboxSheet.xlsm )

Si fuera posible lograr esto sería de mucha ayuda.

Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JuanC

repetir mismo Combobox en muchas celdas

Publicado por JuanC juanc2942@gmail.com (1054 intervenciones) el 29/11/2014 20:13:11
hola Rafael
modifiqué un poco la cosa... eliminé la validación de datos de las celdas...
sólo cambia el origen de llenado del combo dependiendo de la celda en que se hace el doble clic...
de esa manera con un solo combo y sin validaciones tenés la cuestión resuelta (creo!)

Saludos, desde Baires, JuanC
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

repetir mismo Combobox en muchas celdas

Publicado por rafae (6 intervenciones) el 30/11/2014 19:48:00
Hola,
Gracias por responder, Casi lo tienes! solo esta el detalle que ocuparía ver el combobox desde la fila 10 hasta cualquiera donde se seleccione la celda de la misma columna (ej. A10:A6000) y no solo en una celda, y que ya se desconfiguró la primer parte del código la cual hace que se pueda copiar y pegar en otras celdas los valores seleccionados en el combobox. Habría forma de solucionar esto?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar