bucle a través de las casillas de verificación ActiveX, Cambiar nombre y cambiar la celda vinculada y luego copiar y repetir -- excel campo con vba campo con loops campo con checkbox campo con activex camp Relacionados El problema

loop through ActiveX Checkboxes, rename and change linked cell then copy and repeat


0
vote

problema

Español

Estoy tratando de crear una macro que cambiará el nombre y luego cambiará la celda vinculada de una serie de casillas de verificación X activas, copie un nuevo conjunto y repita el proceso. Tendría que estar en bucle alrededor de 200 veces. Básicamente, necesito 200 conjuntos de casillas de verificación con las propiedades (nombre) de la siguiente manera:

Set 1 (de cajas de cheques activas X)

  • fl1mon (Cell Link: C5)
  • fl1tue (Link Cell: D5)
  • fl1wed (Link Cell: E5)
  • fl1thu (Link Cell: F5)
  • fl1fri (celda de enlace: G5)
  • fl1sat (Link Cell: H5)
  • fl1sun (Link Cell: i5)

Set 2 (de cajas de cheques activas X)

  • FL2MON (Link Cell: C25)
  • fl2tue (Link Cell: D25)
  • fl2wed (Link Cell: E25)
  • fl2thu (Link Cell: F25)
  • FL2FRI (Link Cell: G25)
  • fl2sat (Link Cell: H25)
  • fl2sun (Link Cell: i25)

(y repetido) ...

Tengo algún código adjunto a continuación; Sin embargo, creo que es lo más probable que vaya en la dirección equivocada con ella. Además, todavía tengo que averiguar cómo cambiaré la celda vinculada en el bucle.

  Sub CopyDown_Boxes()  Dim oles1 As OLEObject  Dim oles2 As OLEObject   Dim oles3 As OLEObject    Dim oles4 As OLEObject     Dim oles5 As OLEObject      Dim oles6 As OLEObject       Dim oles7 As OLEObject  i = (x * 15) + 5  For x = 1 To 7   Set oles1 = ThisWorkbook.Worksheets("Flight Schedule").OLEObjects("CheckBox1") Set oles2 = ThisWorkbook.Worksheets("Flight Schedule").OLEObjects("CheckBox2") Set oles3 = ThisWorkbook.Worksheets("Flight Schedule").OLEObjects("CheckBox3") Set oles4 = ThisWorkbook.Worksheets("Flight Schedule").OLEObjects("CheckBox4") Set oles5 = ThisWorkbook.Worksheets("Flight Schedule").OLEObjects("CheckBox5") Set oles6 = ThisWorkbook.Worksheets("Flight Schedule").OLEObjects("CheckBox6") Set oles7 = ThisWorkbook.Worksheets("Flight Schedule").OLEObjects("CheckBox7")      oles1.Name = "FL" & x & "MON"     oles2.Name = "FL" & x & "TUE"     oles3.Name = "FL" & x & "WED"     oles4.Name = "FL" & x & "THU"     oles5.Name = "FL" & x & "FRI"     oles6.Name = "FL" & x & "SAT"     oles7.Name = "FL" & x & "SUN"  Worksheets("Flight Schedule").Shapes.Range(Array("FL" & x & "MON", "FL" & x & "MON", "FL" & x & "MON", _     "FL" & x & "MON", "FL" & x & "MON", "FL" & x & "MON", "FL" & x & "MON")).Select Selection.Copy Range("B" & i).Select ActiveSheet.Paste  Next x  End Sub   
Original en ingles

I'm Trying to create a macro which will rename and then change the linked cell of a number of active x check boxes then copy down a new set and repeat the process. it would need to be looped about 200 times. basically i need 200 sets of checkboxes with the properties (name) as follows:

SET 1 (of active x check-boxes)

  • FL1MON (Link Cell: C5)
  • FL1TUE (Link Cell: D5)
  • FL1WED (Link Cell: E5)
  • FL1THU (Link Cell: F5)
  • FL1FRI (Link Cell: G5)
  • FL1SAT (Link Cell: H5)
  • FL1SUN (Link Cell: I5)

SET 2 (of active x check-boxes)

  • FL2MON (Link Cell: C25)
  • FL2TUE (Link Cell: D25)
  • FL2WED (Link Cell: E25)
  • FL2THU (Link Cell: F25)
  • FL2FRI (Link Cell: G25)
  • FL2SAT (Link Cell: H25)
  • FL2SUN (Link Cell: I25)

(and repeated)...

I have some code attached below; however, I believe I'm most likely going in the wrong direction with it. Also , I have yet to figure out how I will be changing the linked cell in the loop.

Sub CopyDown_Boxes()  Dim oles1 As OLEObject  Dim oles2 As OLEObject   Dim oles3 As OLEObject    Dim oles4 As OLEObject     Dim oles5 As OLEObject      Dim oles6 As OLEObject       Dim oles7 As OLEObject  i = (x * 15) + 5  For x = 1 To 7   Set oles1 = ThisWorkbook.Worksheets("Flight Schedule").OLEObjects("CheckBox1") Set oles2 = ThisWorkbook.Worksheets("Flight Schedule").OLEObjects("CheckBox2") Set oles3 = ThisWorkbook.Worksheets("Flight Schedule").OLEObjects("CheckBox3") Set oles4 = ThisWorkbook.Worksheets("Flight Schedule").OLEObjects("CheckBox4") Set oles5 = ThisWorkbook.Worksheets("Flight Schedule").OLEObjects("CheckBox5") Set oles6 = ThisWorkbook.Worksheets("Flight Schedule").OLEObjects("CheckBox6") Set oles7 = ThisWorkbook.Worksheets("Flight Schedule").OLEObjects("CheckBox7")      oles1.Name = "FL" & x & "MON"     oles2.Name = "FL" & x & "TUE"     oles3.Name = "FL" & x & "WED"     oles4.Name = "FL" & x & "THU"     oles5.Name = "FL" & x & "FRI"     oles6.Name = "FL" & x & "SAT"     oles7.Name = "FL" & x & "SUN"  Worksheets("Flight Schedule").Shapes.Range(Array("FL" & x & "MON", "FL" & x & "MON", "FL" & x & "MON", _     "FL" & x & "MON", "FL" & x & "MON", "FL" & x & "MON", "FL" & x & "MON")).Select Selection.Copy Range("B" & i).Select ActiveSheet.Paste  Next x  End Sub 
              

Lista de respuestas

1
 
vote
vote
La mejor respuesta
 

Un enfoque ligeramente diferente tal vez para darle una opción. He utilizado la alineación con las células como base de posicionar las casillas de verificación y colocar los conjuntos verticalmente para alinearse con las filas 'celdas vinculadas'. Este ejemplo los genera a la hoja de trabajo activa.

Configure la casilla de verificación

  Sub multiCheck() Dim chkRow As Long, chkCol As Long, LastRow As Long, x As Long Dim chkLeft As Double, chkTop As Double, chkHeight As Double Dim chkWidth As Double, numOfSets As Double, linkCellSpace As Double Dim linkCellRow As Double, linkCellColStart As Double, setSpacing As Integer Dim chkSet As Integer, chkSpace As Integer Dim wkArr() As Variant  'initial values chkRow = 3 chkCol = 2 chkSpace = 2 setSpacing = 6 LastRow = 20 linkCellRow = 5 linkCellSpace = 20 linkCellColStart = 2 'no of week sets numOfSets = 3  wkArr() = Array("MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN")      'for each week set     For chkSet = 0 To numOfSets - 1             'for each day of week             For x = 1 To 7                 chkRow = chkRow + chkSpace                 chkLeft = Cells(chkRow, chkCol).Left                 chkTop = Cells(chkRow, chkCol).Top                 chkHeight = Cells(chkRow, chkCol).Height                 chkWidth = Cells(chkRow, chkCol).Width                  ActiveSheet.CheckBoxes.Add(chkLeft, chkTop, chkWidth, chkHeight).Select                     With Selection                         .Name = "FL" & chkSet + 1 & wkArr(x - 1)                         .Caption = .Name                         .Display3DShading = True                         .LinkedCell = Cells(linkCellRow + (linkCellSpace * chkSet), linkCellColStart + x).Address                     End With             Next x         chkRow = chkRow + setSpacing     Next chkSet End Sub   

Editar para las casillas de verificación Active-X de ese tamaño / Mover con celdas

Enmiendas según lo solicitado. Establecer flightSheet a su hoja de trabajo apropiada. El código establece las casillas de verificación a FALSE de forma predeterminada.

ingrese la descripción de la imagen aquí

  Option Explicit  Sub multiCheckActiveX() Dim chkBox As New OLEObject Dim flightSheet As Worksheet Dim chkRow As Long, chkCol As Long, LastRow As Long, x As Long Dim chkLeft As Double, chkTop As Double, chkHeight As Double Dim chkWidth As Double, numOfSets As Double, linkCellSpace As Double Dim linkCellRow As Double, linkCellColStart As Double, setSpacing As Integer Dim chkSet As Integer, chkSpace As Integer Dim wkArr() As Variant  'initial values chkRow = 3 chkCol = 2 chkSpace = 2 setSpacing = 6 LastRow = 20 linkCellRow = 5 linkCellSpace = 20 linkCellColStart = 2 'no of week sets numOfSets = 3  Set flightSheet = Sheets("Sheet2")  wkArr() = Array("MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN")  With flightSheet     'for each week set     For chkSet = 0 To numOfSets - 1             'for each day of week             For x = 1 To 7                 chkRow = chkRow + chkSpace                 chkLeft = .Cells(chkRow, chkCol).Left                 chkTop = .Cells(chkRow, chkCol).Top                 chkHeight = .Cells(chkRow, chkCol).Height                 chkWidth = .Cells(chkRow, chkCol).Width                  Set chkBox = .OLEObjects.Add(ClassType:="Forms.CheckBox.1")                     With chkBox                         .Left = chkLeft                         .Top = chkTop                         .Width = chkWidth                         .Height = chkHeight                         .Name = "FL" & chkSet + 1 & wkArr(x - 1)                         .Object.Caption = .Name                         .Object.SpecialEffect = 2                         .LinkedCell = flightSheet.Cells(linkCellRow + (linkCellSpace * chkSet), linkCellColStart + x).Address                         .Object.Value = False                         .Placement = xlMoveAndSize                     End With             Next x         chkRow = chkRow + setSpacing     Next chkSet     End With End Sub   
 

A slightly different approach perhaps to give you an option. I have used alignment with cells as the basis of positioning the checkboxes and positioned the sets vertically to align with the 'linked cell' rows. This example just generates them to the active worksheet.

checkbox sets

Sub multiCheck() Dim chkRow As Long, chkCol As Long, LastRow As Long, x As Long Dim chkLeft As Double, chkTop As Double, chkHeight As Double Dim chkWidth As Double, numOfSets As Double, linkCellSpace As Double Dim linkCellRow As Double, linkCellColStart As Double, setSpacing As Integer Dim chkSet As Integer, chkSpace As Integer Dim wkArr() As Variant  'initial values chkRow = 3 chkCol = 2 chkSpace = 2 setSpacing = 6 LastRow = 20 linkCellRow = 5 linkCellSpace = 20 linkCellColStart = 2 'no of week sets numOfSets = 3  wkArr() = Array("MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN")      'for each week set     For chkSet = 0 To numOfSets - 1             'for each day of week             For x = 1 To 7                 chkRow = chkRow + chkSpace                 chkLeft = Cells(chkRow, chkCol).Left                 chkTop = Cells(chkRow, chkCol).Top                 chkHeight = Cells(chkRow, chkCol).Height                 chkWidth = Cells(chkRow, chkCol).Width                  ActiveSheet.CheckBoxes.Add(chkLeft, chkTop, chkWidth, chkHeight).Select                     With Selection                         .Name = "FL" & chkSet + 1 & wkArr(x - 1)                         .Caption = .Name                         .Display3DShading = True                         .LinkedCell = Cells(linkCellRow + (linkCellSpace * chkSet), linkCellColStart + x).Address                     End With             Next x         chkRow = chkRow + setSpacing     Next chkSet End Sub 

EDIT FOR ACTIVE-X CHECKBOXES THAT SIZE/MOVE WITH CELLS

Amendments as requested. Set flightSheet to your appropriate worksheet. The code sets the checkboxes to FALSE by default.

enter image description here

Option Explicit  Sub multiCheckActiveX() Dim chkBox As New OLEObject Dim flightSheet As Worksheet Dim chkRow As Long, chkCol As Long, LastRow As Long, x As Long Dim chkLeft As Double, chkTop As Double, chkHeight As Double Dim chkWidth As Double, numOfSets As Double, linkCellSpace As Double Dim linkCellRow As Double, linkCellColStart As Double, setSpacing As Integer Dim chkSet As Integer, chkSpace As Integer Dim wkArr() As Variant  'initial values chkRow = 3 chkCol = 2 chkSpace = 2 setSpacing = 6 LastRow = 20 linkCellRow = 5 linkCellSpace = 20 linkCellColStart = 2 'no of week sets numOfSets = 3  Set flightSheet = Sheets("Sheet2")  wkArr() = Array("MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN")  With flightSheet     'for each week set     For chkSet = 0 To numOfSets - 1             'for each day of week             For x = 1 To 7                 chkRow = chkRow + chkSpace                 chkLeft = .Cells(chkRow, chkCol).Left                 chkTop = .Cells(chkRow, chkCol).Top                 chkHeight = .Cells(chkRow, chkCol).Height                 chkWidth = .Cells(chkRow, chkCol).Width                  Set chkBox = .OLEObjects.Add(ClassType:="Forms.CheckBox.1")                     With chkBox                         .Left = chkLeft                         .Top = chkTop                         .Width = chkWidth                         .Height = chkHeight                         .Name = "FL" & chkSet + 1 & wkArr(x - 1)                         .Object.Caption = .Name                         .Object.SpecialEffect = 2                         .LinkedCell = flightSheet.Cells(linkCellRow + (linkCellSpace * chkSet), linkCellColStart + x).Address                         .Object.Value = False                         .Placement = xlMoveAndSize                     End With             Next x         chkRow = chkRow + setSpacing     Next chkSet     End With End Sub 
 
 
   
   

Relacionados problema

5  JavaScript: "El objeto no admite esta propiedad o método" cuando se llama al objeto ActiveX  ( Javascript object doesnt support this property or method when activex object ) 
Tengo html simple en login.aspx con un objeto ActiveX: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtm...

1  Control del navegador de archivos para reemplazar <Entrada Tipo = "Archivo">  ( File browser control to replace input type file ) 
Estoy trabajando en una aplicación web ASP.NET para nuestros usuarios de Intranet Corporate. Tengo un formulario donde un usuario debe proporcionar una ruta a...

1  Me gustaría detectar interactivamente cuando se ha instalado un componente ActiveX, y actualiza de forma asíncrona una parte de la página  ( I would like to interactively detect when an activex component has been installe ) 
Estoy trabajando en un sitio web, y me gustaría actualizar una parte de la página después de que se haya instalado un componente ActiveX. Tengo una idea gener...

1  ¿Cómo puedo usar ActiveX Conrtols a través de Python para controlar un controlador digital DDC4100 de Texas Instruments?  ( How can i use activex conrtols through python to control a texas instruments ddc ) 
Me han encargado de encontrar cómo usar Python para comunicarse con el controlador digital DDC4100. El DDC4100 es un componente del kit de desarrollo DLP Disc...

0  ¿Cómo prevenir el cierre instantáneo de la aplicación MFC con el control ActiveX Shockwaveflash?  ( How to prevent the instant closing of mfc application with activex shockwaveflas ) 
Así que estoy usando el elemento ActiveX de Shockwaveflash en mi aplicación MFC para reproducir un archivo .swf. El problema es: ShockWaveFlash Elemento fun...

2  ¿A dónde van los archivos de iCAB en mi servidor web?  ( Where do cab files go on my web server ) 
Estoy trabajando en un sitio Classic ASP que utiliza controles ActiveX de terceros. Nunca he trabajado con los controles ActiveX antes y no estoy seguro de dó...

1  Permiso denegado; Error 70 ... Word 2007  ( Permission denied error 70 word 2007 ) 
Tener un problema impar al ejecutar una macro de Word 2007. Información de fondo: Esta macro en particular utiliza un control ActiveX. Esto le permite al us...

4  Parámetros opcionales en las bibliotecas activas X  ( Optional parameters in active x libraries ) 
Estoy creando una biblioteca ActiveX en Delphi en la que un objeto en particular tiene una propiedad llamada ConventedCount con un solo parámetro de la fecha ...

7  ¿Cómo puedo enganchar a Eventos de Excel en JavaScript  ( How can i hook up to excel events in javascript ) 
En una aplicación web del lado del cliente, me gustaría: Abrir una hoja de cálculo de Excel, Exportar algunos datos de la aplicación a Excel, Permitir ...

0  Interfaz para la cascada abierta en Delphi  ( Interface for open cascade in delphi ) 
Estoy tratando de encontrar una manera de usarla Open Cascade (www.opencascade.org) - Modelado 3D Tecnología en uno de nuestros programas que está escrito e...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos