Errores en Excel ActiveX cuadros combinados?

Me he dado cuenta de que puedo llegar a todo tipo de errores molestos cuando:

  • He ActiveX comboboxes en una hoja de cálculo (no un formulario de excel)
  • Comboboxes tienen el código de evento a ellos vinculadas (por ejemplo, eventos onchange)
  • Uso su listfillrange o linkedcell propiedades (compensación de estas propiedades se parece a aliviar muchos de los problemas)
  • (No estoy seguro si este está conectado) pero no es la validación de datos en el objetivo de linkedcell.

I programa bastante complejas de la aplicación de excel que hace un montón de manejo de eventos y utiliza una gran cantidad de controles. En estos meses, he estado tratando de lidiar con una variedad de insectos que tratan con los cuadros combinados. No puedo recordar todos los detalles de cada instancia de ahora, pero estos errores tienden a involucrar señalando la listfillrange y linkedcell propiedades en rangos con nombre, y a menudo tienen que ver con el cuadro combinado de eventos de disparo en los momentos más inapropiados (como cuando de la aplicación.enableevents = false). Estos problemas parecían crecer más grande en Excel 2007, por lo que tenía para dar seguimiento a estos cuadros combinados completamente (yo ahora uso combinado de los cuadros que figuran en los formularios de usuario, en lugar de directamente sobre las hojas).

Tiene cualquiera más visto problemas similares? Si es así, existe una solución elegante? He miró a su alrededor con Google y hasta ahora no ha detectado cualquier persona con problemas similares.

Algunos de los síntomas que acaban de ver son:

  • Excel se bloquea cuando yo inicio (implica combobox_onchange, listfillrange->rango con nombre en otra hoja diferente, y workbook_open interacciones medicamentosas). (nota, yo también había algunos de validación de datos en las celdas vinculadas en el caso de que un usuario ha editado directamente).
  • Excel errores de procesamiento (por lo general, cuando el cuadro combinado de los cambios, algunas celdas de otra hoja de obtener al azar sobre la parte superior de la hoja de trabajo actual) a Veces implica la pantalla parpadea completamente a otra hoja por un momento.
  • Excel perder su mente (o más bien, la pila de llamadas) (en relación con el primer punto). A veces cuando una función se modifica una propiedad de los comboboxes, el combobox evento onchange incendios, pero nunca se devuelve el control a la función que provocó el cambio en el primer lugar. El combobox_onchange eventos se activan incluso cuando la aplicación.enableevents = false.
  • Eventos de disparo cuando no debieran (he publicado otra pregunta sobre el desbordamiento de pila relacionado con esto).

En este punto, estoy bastante convencido de que ActiveX comboboxes son el mal encarnado y no merece la pena. Me he cambiado a la inclusión de estos cuadros combinados dentro de un formulario de usuario del módulo en su lugar. Prefiero molestias a los usuarios con popup formas de azar artefactos visuales y estrellarse (con la pérdida de datos).

  • ¿no es más probable que sea un error en el código, en lugar de Excel?
  • Mitch: he cuidadosamente paso a través de la ejecución de código. Este es, sin duda Excel problemas. Cuando me dijo que Excel quita la pila de función que realmente no puede explicar de ninguna otra manera. Y Excel no debe bloquearse, no importa lo mal que alguien macros se portan mal.
  • Mitch, si quieres ver un ejemplo de un error que hice documento mucho más cuidado y la culpa en Excel, consulte stackoverflow.com/questions/1263394/… — yo no he ido en mucho detalle aquí porque sospecho que hay un problema más general con el activex comboboxes.

5 Kommentare

  1. 2

    No tengo una respuesta definitiva, pero te puedo decir que he dejado de usar ListFillRange y LinkedCell para los controles ActiveX hace unos 10 años. No recuerdo lo particular de los problemas que me encontré. Yo recuerdo que llegando a la conclusión de que el poco tiempo que me salvó a mí no vale la pena el dolor del cerebro de tratar de localizar los errores. Así que ahora me rellenar los controles a través de código y de acuerdo con salida en los eventos.

  2. 2

    Mi active-x cuadro combinado funciona bien cuando mi Dell está acoplado pero cambia el tamaño a un tamaño más grande cada vez que se hace clic cuando el Dell está desacoplado – muy extraño. He añadido un código de cambio de tamaño que funciona cuando se desacopla, pero tanto .la altura y .scaleheight fallar cuando se acoplan y cuando se activa mediante programación (aunque parezca extraño).

            Sheet2.Shapes("cb_SelectSKU").Select
            Selection.ShapeRange.Height = 40
            Selection.ShapeRange.ScaleHeight 0.8, msoFalse, msoScaleFromTopLeft

    Luego he añadido mi propio enableevents-como un interruptor, de modo que el cambio de tamaño se produce cuando un usuario selecciona un combobox valor, no cuando nada se ve afectada mientras se ejecuta una macro.

    Select Case strHoldEvents
        Case Is = "N"                                                   'Combobox resizing fails with error when triggered programatically (from SaveData)
    
            Call ShowLoadShts
    
            Sheet2.Shapes("cb_SelectSKU").Select
            Selection.ShapeRange.Height = 40
            Selection.ShapeRange.ScaleHeight 0.8, msoFalse, msoScaleFromTopLeft
    
    
        Case Else
    End Select

    Finalmente, que parece que funciona, si acoplado o desacoplado, ya sea provocado por el usuario o durante un procedimiento. Vamos a ver si es lo que tiene…

  3. 1

    Tengo una respuesta parcial de la Dell usuarios, y para su formateo problema

    La presentación y formato de problema es otro conocido, pero de indocumentados problema en Excel.

    Muchos monitores de pantalla plana (incluyendo las pantallas de ordenador portátil) son incapaces de procesar las fuentes correctamente en controles de cuadro de texto en una hoja de cálculo de Excel: tienes una versión suave de este problema.

    Nuestra empresa se ha actualizado recientemente a un nuevo (y mucho más grande!) los monitores, y puedo en el último utilizar cuadros de texto, etiquetas y cuadros combinados en hojas de cálculo. Nuestro viejo Samsung pantallas que aparecen controles de texto correctamente, pero de cualquier manual o VBA impulsado por las actualizaciones se tradujo en un ilegibles mezcla de superposición de caracteres.

    Listbox, no hay problema: es el ‘texto’ parte de su cuadro combinado que tiene el problema. Intente manipular un control listbox en VBA procedimientos de evento: es un parche, pero funciona.

    En las celdas de las listas desplegables de la Validación de Datos de listas no tienen el problema. Si va a configurar una lista de validación de una celda, a continuación, establezca los datos mensajes de error de validación para las cadenas vacías, puede introducir texto de forma libre en la célula; la lista desplegable es consultivo, no obligatorio limitar a la lista.

    El problema es que a veces mejorado (pero nunca completamente fijo) por el uso de la Terminal o el Sistema de fuentes en el Active-X control.

    El problema es que a veces mejorado (pero nunca completamente fijo) mediante el uso de una VBA evento para mover o cambiar el tamaño de Active-X control de 0,75 mm.

    Comprobar si su ordenador portátil fabricante ha lanzado una actualización para el controlador de pantalla.

    …Y eso es todo lo que sé acerca de la representación de la fuente de problema. Si Mike (con su ordenador portátil de Dell) está leyendo esto: Buena suerte con esas soluciones – al mejor de mi conocimiento, no hay una ‘revisión’.

    El problema de la estabilidad fue un gran dolor de cabeza para mí hasta que Excel 2003 salió: el uso de cualquier Active-X control en la hoja era una fuente de inestabilidad. El Jurado está todavía fuera de controles Listbox incrustado en una hoja, incluso en Excel 2003: todavía me evite el uso de ellos.

  4. 1

    Así que se enfrentan a los mismos problemas. Yo tenía un archivo con listas desplegables en las que me había superpuesto el combobox para combatir el problema de la falta de legibilidad al acercar demasiado. Esto fue lo que mi código que parecía en un principio:

    '=========================================
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim str As String
    Dim cboTemp As OLEObject
    Dim ws As Worksheet
    Set ws = ActiveSheet
    On Error GoTo errHandler
    
    If Target.Count > 1 Then GoTo exitHandler
    
    Set cboTemp = ws.OLEObjects("ComboBox1")
      On Error Resume Next
    If cboTemp.Visible = True Then
      With cboTemp
        .Top = 10
        .Left = 10
        .ListFillRange = "Treatment"
        .LinkedCell = Target.Address
        .Visible = False
        .Value = ""
      End With
    End If
    
    
    
      On Error GoTo errHandler
      If Target.Validation.Type = 3 Then
        'if the cell contains a data validation list
        Application.EnableEvents = False
        'get the data validation formula
        str = Target.Validation.Formula1
        str = Right(str, Len(str) - 1)
        With cboTemp
          'show the combobox with the list
          .Visible = True
          .Left = Target.Left
          .Top = Target.Top
          .Width = Target.Width + 15
          .Height = Target.Height + 5
          .ListFillRange = ws.Range(str).Address
          .LinkedCell = Target.Address
        End With
        cboTemp.Activate
        'open the drop down list automatically
        Me.ComboBox1.DropDown
      End If
    
    exitHandler:
      Application.ScreenUpdating = True
      Application.EnableEvents = True
      Exit Sub
    errHandler:
      Resume exitHandler
    
    End Sub
    '====================================
    'Optional code to move to next cell if Tab or Enter are pressed
    'from code by Ted Lanham
    '***NOTE: if KeyDown causes problems, change to KeyUp
    'Table with numbers for other keys such as Right Arrow (39)
    'https://msdn.microsoft.com/en-us/library/aa243025%28v=vs.60%29.aspx
    
    Private Sub ComboBox1_KeyDown(ByVal _
            KeyCode As MSForms.ReturnInteger, _
            ByVal Shift As Integer)
        Select Case KeyCode
            Case 9 'Tab
                ActiveCell.Offset(0, 1).Activate
            Case 13 'Enter
                ActiveCell.Offset(1, 0).Activate
            Case Else
                'do nothing
        End Select
    End Sub
    '====================================

    Yo estaba frente a todo tipo de temas, pero principalmente como se menciona en este hilo, el LinkedCell problema fue el más grande. Mi selección desde el menú desplegable ir a donde quiera en la hoja que me había hecho clic en el pasado, en lugar de la célula yo había elegido el cuadro desplegable, y en el proceso, también es preocupante el código de dondequiera que la selección iba a ir. He utilizado una simple LÍNEA de código para asegurarse de que mi programa en ActiveX sólo se ejecuta cuando es un menú desplegable. He utilizado este antes de la LinkedCell comando ejecutó:

    If Target.Validation.Type = 3 Then
    '... all the normal code here...
    End If

    Así que mi código ahora este aspecto:

    '... Code as before
    
    If Target.Validation.Type = 3 Then
    ' NEW CODE LINE ABOVE
     If Target.Count > 1 Then GoTo exitHandler
    
    Set cboTemp = ws.OLEObjects("ComboBox1")
      On Error Resume Next
    If cboTemp.Visible = True Then
      With cboTemp
        .Top = 10
        .Left = 10
        .ListFillRange = "Treatment"
        .LinkedCell = Target.Address
        .Visible = False
        .Value = ""
      End With
    End If
    End If
    ' End of the new If

    Increíblemente, esta trabajado. Y ahora mi hoja de excel no está mal comportamiento más. Espero que esto ayude.

  5. 0

    Por esta razón, el uso de celdas con validación de datos de las listas a la hora de poner los cuadros combinados en una hoja de cálculo.

    • Quería evitar que los datos de validación de la lista, porque la fuente es a menudo demasiado pequeñas para la mayoría de los usuarios para ver bien, y que no se puede mostrar varias columnas (que es necesario en este caso).
    • Verdad sobre los múltiples columnas. Como para el tamaño del texto, puede ser bastante pequeña, pero al menos escalas de tamaño de zoom. He tenido problemas con Active X, a veces porque la lista desplegable texto no escala con el zoom y los usuarios se han quejado.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea