前言:
眼前朋友们对“textbox1的值怎么调用”大概比较珍视,朋友们都需要分析一些“textbox1的值怎么调用”的相关内容。那么小编在网摘上收集了一些有关“textbox1的值怎么调用””的相关文章,希望你们能喜欢,各位老铁们快快来了解一下吧!本文于2023年7月9日首发于本人同名公众号:Excel活学活用,更多文章案例请搜索关注!
☆本期内容概要☆
VBA 类模块实现TextBox的Change事件完整代码
完整代码:
1、Sheet1_CmdShow (命令按钮)
Private Sub CmdShow_Click() UserForm1.ShowEnd Sub
代码解析:
(1)启动用户窗体UserForm1。
2、模块1
(1)Pxy自定义函数
Function Pxy(arr() As Variant, searchValue As Variant) As Long t = LBound(arr) t = 1 - t For i = LBound(arr) To UBound(arr) If arr(i) = searchValue Then Pxy = i + t Exit Function End If Next Pxy = -1 ' 如果未找到值,则返回 -1End Function
代码解析:用来查找定位查找值在数组中的位置
(A)t等于数组最大下标,再使之等于1-t,作用是修正数组最小下标不为1时对应的位置值。
(B)通过i循环数组,比对查找值与数组中的值,若找到,则函数值等于t+1。
(C)如果没有找到,则返回-1。
3、类模块(TextBoxEventHandler)
(1)定义变量
Public WithEvents txtBox As MSForms.TextBoxPrivate previousValue As String
代码解析:
(A)声明一个公共变量 txtBox,它是一个带有事件处理程序的文本框对象。
(B)声明一个私有变量 previousValue,用于存储文本框在更新前的值。
(2)ReceiveTextbox
Public Sub ReceiveTextbox(ByVal reTextbox As MSForms.TextBox) Set txtBox = reTextboxEnd Sub
代码解析:
(A)定义一个公共子过程 ReceiveTextbox,用于接收一个文本框对象,并将其赋值给 txtBox 变量。。
(B)将传入的文本框对象赋值给 txtBox 变量。
(3)txtBox_Change,文本框(TextBox)相关的事件处理程序
Private Sub txtBox_Change() On Error Resume Next Dim i As Integer i = CInt(Mid(txtBox.Name, 7)) With UserForm1 If .Controls("topLb_" & i).Caption = "金额" Then If Not IsNumeric(txtBox) Then MsgBox "请输入数字!" txtBox.Text = previousValue End If .Controls("topTb_" & i + 2).Text = CDbl(.Controls("topTb_" & i)) + CDbl(.Controls("topTb_" & i + 1)) ElseIf .Controls("topLb_" & i).Caption = "税额" Then If Not IsNumeric(txtBox) Then MsgBox "请输入数字!" txtBox.Text = previousValue End If .Controls("topTb_" & i + 1).Text = CDbl(.Controls("topTb_" & i)) + CDbl(.Controls("topTb_" & i - 1)) ElseIf .Controls("topLb_" & i).Caption = "价税合计" Then .Controls("topTb_" & i).Text = CDbl(.Controls("topTb_" & i - 2)) + CDbl(.Controls("topTb_" & i - 1)) End If End WithEnd Sub
代码解析:如果文本框发生了改变,激活其Change事件。
(A)如果当前文本框对应的标签是金额,限制仅输入数字,同时价税合计重新计算=金额+税额。如果当前文本框对应的标签是税额,操作同“金额“。
(B)如果当前文本框对应的标签是价税合计,则将其重新计算=金额+税额,直观看来,不管输入什么,价税合计总保持不变,实现价税合计不可编辑的目的。
(4)txtbox_KeyDown
Private Sub txtbox_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) ' 在按下任意键之前,存储当前值 previousValue = txtBox.ValueEnd Sub
代码解析:
(A)在按下任意键之前,将当前文本框的值存储在 previousValue 变量中,供后续调用。
(B)这样做的目的:金额、税额如果输入了非数字字符,将其返回原来的值。
4、UserForm1
(1)添加控件:FrmHeader
插入一个框架控件:FrmHeader在FrmHeader中,添加一个标签控件:LbTopAmount
(2)UserForm_Initialize(),窗体初始化过程
Dim clsTxB As New TextBoxEventHandlerDim textBoxes As CollectionPrivate Sub UserForm_Initialize() Dim tbTitle() tbTitle = Array("ID", "报销单号", "开票日期", "发票号码", "销售方全称", _ "开票项目", "金额", "税额", "价税合计", "购买方全称", "购买方税号", "销售方税号", _ "发票代码", "发票类型", "登记人", "报销人", "审核人", "登记日期", "报销日期", _ "报销项目", "发票源文件地址", "发票文件路径", "备注", "付款人", "记账人", _ "月份", "会计凭证号", "部门", "发票原文件名", "电子票号", "附件文件路径") arrWidth = Array(0, 0, 60, 0, 100, 120, 80, 60, 90, 0, 0, 120, 0, 0, _ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 125, 0, _ 0, 0, 0, 0, 0, 0, 0, 0, 0) For i = 0 To UBound(tbTitle, 1) - 1 Set lbCtrl = Me.FrmHeader.Controls.Add("Forms.Label.1", "topLb_" & i, True) Set txtBox = Me.FrmHeader.Controls.Add("Forms.TextBox.1", "topTb_" & i, True) If i = 0 Then iWidth = 0 Else iWidth = iWidth + arrWidth(i - 1) End If With lbCtrl .Caption = tbTitle(i) .Height = 20 .Top = 0 .Width = arrWidth(i) .Left = iWidth .BorderStyle = 1 .FontSize = 9 .FontName = "微软雅黑" .ForeColor = RGB(50, 50, 255) .TextAlign = 2 .ZOrder (0) End With With txtBox .Height = 20 .Top = lbCtrl.Height .Width = arrWidth(i) .Left = iWidth .BorderStyle = 1 .FontSize = 9 .FontName = "微软雅黑" .ForeColor = RGB(50, 50, 255) If i = Pxy(tbTitle, "金额") - 1 Or i = Pxy(tbTitle, "税额") - 1 _ Or i = Pxy(tbTitle, "价税合计") - 1 Then .TextAlign = fmTextAlignRight .Text = 0 Else .TextAlign = fmTextAlignLeft End If .ZOrder (0) End With clsTxB.ReceiveTextbox txtBox '将 TextBoxEventHandler 对象添加到集合中 If textBoxes Is Nothing Then Set textBoxes = New Collection End If textBoxes.Add clsTxB Set clsTxB = Nothing Next With Me.FrmHeader .Caption = "" .Width = iWidth .Height = 40 .Left = 1 .Top = 30 .Visible = True End With Set iCtr = Me.Controls("TopTb_" & Pxy(tbTitle, "价税合计") - 1) With Me.LbTopAmount .Caption = "" .Top = iCtr.Top .Left = iCtr.Left .Height = iCtr.Height .Width = iCtr.Width .ZOrder 0 End WithEnd Sub
代码解析:
(A)声明一个名为 clsTxB 的 TextBoxEventHandler 类的实例,用于处理文本框事件。
(B)声明一个集合变量 textBoxes,用于存储 TextBoxEventHandler 对象。
(C)tbTitle 数组,存放标签的标题。
(D)循环tbTitle 数组,添加标签、文本框并设置格式。
(E)调用 TextBoxEventHandler 类的 ReceiveTextbox 子过程,将当前文本框对象传递给它。将 clsTxB 添加到 textBoxes 集合中,用于后续引用。
(F)对FrmHeader 框架进行属性设置。
(G)对LbTopAmount标签进行设置,位置、大小与价税合计标签的对应的文本框相同,就是完全覆盖在其上,达到禁止修改价税合计的目的。
☆往期合集☆【2023年3月】【2023年4月】【2023年5月】【2023年6月】
☆猜你喜欢☆
Excel VBA 电子发票管理助手
Excel VBA 收费管理系统
Excel VBA 中医诊所收费系统
Excel VBA 文件批量改名
Excel VBA 酷炫的日期控件
Excel VBA 动态添加控件
Excel VBA 最简单的收发存登记系统
Excel 固定资产折旧计提表
Excel VBA 输入逐步提示
Excel 公式函数/查找函数之LOOKUP
☆我是安利达人☆
我的小店
自用产品,强烈推荐!
白茶牙膏
洗洁精
洗衣液
本文于2023年7月9日首发于本人同名公众号:Excel活学活用,更多文章案例请搜索关注!
标签: #textbox1的值怎么调用 #怎么调用textbox里的值