excel - 如何在 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,不知道为什么
解决方案
推荐阅读
- python - 如果数字位于LR的N个范围内,如何返回键值?
- python - 尝试在终端上将 python2 更改为 python3
- c++ - Qt OpenGLWidget 没有完全释放内存
- javascript - 当单元格内的文本时如何获得表格单元格的正确高度
- python - Python中动态标签的问题
- android - 离子错误:无法安装'cordova-plugin-firebase':错误:呃哦-安装时
- asp.net-core-3.1 - asp-area 标签助手如何与区域路由一起使用?
- .net - 登录身份服务器后无法重定向回角度客户端
- python - 连接到 Fargate 上的端口
- websocket - Rails: Action cable 什么时候取消订阅?