none
No funcionas las instrucciones en un evento de excel. RRS feed

  • Pregunta

  • Buenas a todos, coloque este post en el foro de office pero, no recibí respuesta alguna y verdaderamento estoy bastante estancado.

    Estuve estudiando como controlar eventos en Excel, y encontre el siguiente codigo de ejemplo: Cómo controlar eventos para Excel mediante Visual Basic .NET  

    El codigo muestra como obtener datos de excel al producirse determinado evento y lo muestra en la consola.

    Mi problema es cuando quiero llamar a un procedimiento desde el evento, este no funciona (Solo funciona la consola y las ventanas de dialogo MenssageBox).

    • Ningunga instruccion que se refiera a el formulario funciona.
    • Hice una prueba creando un nuevo formulario en tiempo de ejecucion y funciona aunque se congela el formulario y deja de responder.

    Ejemplo Fragmento de codigo:

        Private Sub Datos_seleccion(ByVal sh As Object, ByVal Target As Excel.Range) Handles xlApp.SheetSelectionChange
           
            'Mostrar las celdas seleccionadas
    
            MessageBox.Show(Target.Address) 'Funciona
          
            Form1.Text = Target.Address 'No funciona en ningun control del fomulario.
    
        End Sub

    Bajar toda la solucion.

    Ejemplo codigo completo:

    • Pegar el texto completo en un modulo nuevo.
    • Importar referencia a Microsoft Excel 12.0 Objet Library
    • Crear un boton en el formulario y llamar a la subfunción abrir()
    Option Explicit On
    Imports Microsoft.Office.Interop
    
    Module Module1
    
        Private WithEvents xlApp As New Excel.Application
    
        Private xlBook As Excel.Workbook
    
    'Para abrir la planilla
    
    Public Sub abrir()
    
            Dim OpenFileDialog As New OpenFileDialog
    
            OpenFileDialog.InitialDirectory = My.Computer.FileSystem.SpecialDirectories.Desktop
            OpenFileDialog.Filter = "Archivos Excel (*.xls)|*.xls| Archivos Excel 2007 (*.xlsx)|*.xlsx | Todos los archivos (*.)|*."
    
            If (OpenFileDialog.ShowDialog(Form1) = System.Windows.Forms.DialogResult.OK) Then
                Dim FileName As String = OpenFileDialog.FileName
                xlApp.Workbooks.Open(FileName)
                xlApp.Visible = True
    
            End If
    
    End Sub
    
        'Evento que se produce cuando se cambia la seleccion de las celdas
    
        Private Sub Datos_seleccion(ByVal sh As Object, ByVal Target As Excel.Range) Handles xlApp.SheetSelectionChange
           
            'Mostrar las celdas seleccionadas
    
            MessageBox.Show(Target.Address) 'Funciona
          
            Form1.Text = Target.Address 'No funciona en ningun control del fomulario.
    
        End Sub
    
     End Module

    Les agradezco cualquier consejo que me puedan brindar.

    miércoles, 18 de septiembre de 2013 22:06

Todas las respuestas

  • YA LO SOLUCIONE:

    SI A ALGUIEN LE SIRVE SE SOLUCIONADA CREANDO UN THREAD CON LOS PROCEDIMIENTOS. EN MI CASO UTILICE UN CONTROL BACKGROUNWORKER PARA CREAR UN PROCESO EN SEGUNDO PLANO.

    SI DA ERROR BASTA CON COLOCAR ESTE CODIGO EN EL EVENTO LOAD DEL FORMULARIO:

    CheckForIllegalCrossThreadCalls = False

    NI IDEA PORQUE FUNCIONA ASI, PERO FUNCIONA, SOY NOVATO Y PERDON SI NO ME EXPRESO CON PROPIEDAD.
    jueves, 19 de septiembre de 2013 21:58