首页 > 解决方案 > 如何在 Excel VBA 中调试用户窗体

问题描述

我需要在 UserForm 的 Initialize Sub 例程中设置 CheckBox 的属性,所以我需要调用 show 方法,但是 Excel 会显示工作簿和点击我的代码的 UserForm 当我返回调试器时无法调试它在 whitch 声明中没有显示黄色标记。

    Public c_esc As Variant
    Public c_enter As Variant

    Public ExcelObj As Application
    Public RegistroObj As Worksheet
    Public DebitoObj, CreditoObj As Worksheet
  
    Public UserFormContabilizaButton As Integer

    Public Cuenta_Activa As String
    Public Cuenta_Pasiva As String
    Public Cuenta_ActivaObj As Worksheet
    Public Cuenta_PasivaObj As Worksheet

    Private Sub UserFormContabilizar_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  
    'Determinar con cual tecla salió el usuario del formulario
    Select Case (KeyCode)
    Case KeyCode = "{ESC}"
    UserFormContabilizaButton = 2
    Case KeyCode = "c"
      UserFormContabilizaButton = 2
    Case KeyCode = "z"
      UserFormContabilizaButton = 1
  
      End Select

    End Sub

    Private Sub Button1_MouseDown()
    'To handle keyboard combinations (using SHIFT,
    'CONTROL, OPTION, COMMAND, and another key),
    'or TAB or ENTER, use the KeyDown or KeyUp event.
    UserFormContabilizaButton = 1
    End Sub

    Private Sub Button2_MouseDown()
    'To handle keyboard combinations (using SHIFT,
    'CONTROL, OPTION, COMMAND, and another key),
    'or TAB or ENTER, use the KeyDown or KeyUp event.
    UserFormContabilizaButton = 2
    End Sub

    Private Sub UserFormContabilizar_Initialize()
      Const HintContabilizar As String = "Concidera que según las reglas internacional los puestos y contabilizados no se debe corregir o borrar"
  
      Set RegistroObj = ThisWorkbook.Worksheets("Registro")
  
      UserFormContabilizaButton = 0
  
      'Dar los valores a los Constante publico que no se permita en Seattle,
      'aunque Office es programado en C y alla si se puede definir Constantes publicas
      c_esc = "{ESCAPE}"
      c_enter = "{ENTER}"
  
      ComboBox1.ColumnCount = 4
      ComboBox1.ColumnWidth = "0;200 pt;0;0"
      ComboBox1.LinkedCell = "C2"
      ComboBox1.ListFillRange = "DropDown"
      ComboBox1.ListWidt = "200 pt"
      Button1.EnterKeyBehavior = True
      Button2.EnterKeyBehavior = True
      Button1.Hint = HintContabilizar

    End Sub 'UserFormContabiliza_Initialize
 
    Private Sub Entrar_Datos_Cuenta()
    Dim i, r, a, p, c As Integer
  
    'De primero en el Registro buscar la primera línea libre
     For r = 2 To 51 Step -1
       If (Not IsEmpty(RegistroObj.Cells(r, 4))) Then
       c = r + 1 'decliné una vez demasiado
        
       End If
     Next

     With RegistroObj
        'Desde aquí la falta de un Object el debugger reclama
        .Cells(c, 2) = TextBox2.Text
        .Cells(c, 3) = TextBox3.Text
        .Cells(c, 4) = ComboBox1.Text  'Cuenta_Activa
        .Cells(c, 5) = ComboBox2.Text  'Cuenta_Pasiva
        .Cells(c, 6) = TextBox6.Text 'Aumento
        .Cells(c, 7) = Lable4.Text 'Fecha de Contabiliza
        .Cells(c, 8) = Label10.Text 'Contador
      End With

      'Y ahora buscar las tablas para la cuenta áciva y pásiva entrada
      Cuenta_Activa = ComboBox1.Text
      Cuenta_Pasiva = ComboBox2.Text
      MaxTable = ThisWorkbook.Sheets.Count
  
      'Esta rutina funciona porque en el nombre de las Tablas de las cuentas
      'empiezan con el número de la cuenta nadie debe cambiar este nombre
      For i = 1 To MaxTable
        If (Left(ThisWorkbook.Sheets(i).Title, 3) = Cuenta_Activa) Then
          a = i
        End If
      Next
      For i = 1 To MaxTable
        If (Left(ThisWorkbook.Sheets(i).Title, 3) = Pasiva) Then
          p = i
        End If
      Next
   
      'Buscar las primeras líneas libres como en el Registro
       For r = 2 To 51 Step -1
         If (Not IsEmpty(Cuenta_ActivaObj.Cells(r, 2))) Then
           a = r + 1 'decliné una vez demasiado
        
         End If
       Next

       For r = 2 To 51 Step -1
         If (Not IsEmpty(Cuenta_PasivaObj.Cells(r, 2))) Then
           p = r + 1 'declinó una vez demasiado
        
         End If
       Next
  
      'Entrar los datos por seguridad del Registro ya que el formulario podría ser cambiado mientras         
      Cuenta_ActivaObj.Cells(a, 1) = RegistroObj.Cells(c, 1)
      Cuenta_PasivaObj.Cells(p, 1) = RegistroObj.Cells(c, 1)
      Cuenta_ActivaObj.Cells(a, 2) = RegistroObj.Cells(c, 2)
      Cuenta_PasivaObj.Cells(p, 2) = RegistroObj.Cells(c, 2)
      Cuenta_ActivaObj.Cells(a, 3) = RegistroObj.Cells(c, 2)
      Cuenta_PasivaObj.Cells(p, 3) = RegistroObj.Cells(c, 2)
      Cuenta_ActivaObj.Cells(a, 4) = RegistroObj.Cells(c, 6)
      Cuenta_PasivaObj.Cells(p, 5) = RegistroObj.Cells(c, 6)
      'Listo todos los datos nuevos estan en el Registro y las cuentas
   End Sub 'Entrar_Datos_Cuenta()

   Public Sub Contabilizar()
   'El único macro visible para el usuario
   UserFormContabiliza.Show
  
   If (UserFormContabilizaButton > 0) Then
    'Significa que el usuaro quiere salir del formulario
    If UserFormContabilizaButton = 1 Then
      Entrar_Datos_Cuenta
    Else
      GoTo Salida:
    End If 'UserFormButton = 1
   End If 'UserFormContabilizaButton > 0
  
   Salida:
  
     UserFormContabiliza.Hide 'Esta es la forma sintactica que es acceptada
   End Sub 'Contabilizar
   'Fin del código

唉 ComboBox 呈现为 ListBox,不知道为什么

标签: excelvbauserform

解决方案


推荐阅读