excel学习库

excel表格_excel函数公式大全_execl从入门到精通

Excel VBA 选择输入/TreeView控件

本文于2023年4月14日首发于本人同名公众号:Excel活学活用,更多文章敬请关注

上期我们分享了TextBox+ListBox的方法输入科目(Excel VBA 输入逐步提示/TextBox+ListBox),今天,我们再试试另一种VBA方法,通过TreeView控件,实现会计科目的选择输入,确保科目输入的统一性:

下面我们来简要说明的一制作过程:

首先,插入TreeView控件

然后,我们把“科目"表再优化一下,使它能够顺利地加载到TreeView控件中,加了一列“上级代码",再把科目层级完善一下,最后再按科目代码排个序。

接着我们就把worksheet,SelectionChange的科目输入部分代码修改一下:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)    Dim NodX As Node    Dim accTypeDic As Object    Dim arr5(), arr6()    If Me.CmdSwitch.Caption = "控件输入" Then Exit Sub    If Target.Row > 1 Then   '避开表头        If Selection.Cells.count > 1 Then   '避开多重选区            Me.TextBox1.Visible = False            Me.ListBox1.Visible = False            Exit Sub        End If        If Target.Column = 4 Then      '科目            Set accTypeDic = CreateObject("Scripting.Dictionary")            iRow = Sheets("科目").UsedRange.Rows.count            arr = Sheets("科目").Range("A2:F" & iRow).Value            For i = 1 To UBound(arr, 1)                If Len(arr(i, 5)) = 1 Then                    accTypeDic(arr(i, 5)) = arr(i, 6)                End If            Next            arr5 = accTypeDic.keys            arr6 = accTypeDic.items            With Me.TreeView1                .Nodes.Clear                .Visible = True                .Top = Target.Top                .Left = Target.Left + Target.Width                .Height = Target.Height * 10                .Width = Target.Width                Set NodX = .Nodes.Add(, , "Account", "科目列表")                For i = LBound(arr5) To UBound(arr5)                    Set NodX = .Nodes.Add("Account", tvwChild, "A" & arr5(i), arr6(i))                    NodX.EnsureVisible                Next                For i = 1 To UBound(arr, 1)                    If Len(arr(i, 1)) >= 4 Then                        Set NodX = .Nodes.Add("A" & arr(i, 5), tvwChild, "A" & arr(i, 1), arr(i, 3))                    End If                Next            End With            Me.TextBox1.Visible = False            Me.ListBox1.Visible = False        ElseIf Target.Column = 5 Then      '现金流量            Me.TreeView1.Visible = False            iRow = Sheets("XJLL").UsedRange.Rows.count            arr = Sheets("XJLL").Range("C2:C" & iRow).Value            If Left(Target.Offset(0, -1), 4) = "1001" Or Left(Target.Offset(0, -1), 4) = "1002" Then                With Me.TextBox1                    .Visible = True                    .Top = Target.Top                    .Left = Target.Left + Target.Width                    .Height = Target.Height                    .Width = Target.Width                    .Text = IIf(IsNull(Target.Text), "", Target.Text)                    .Activate                End With                With Me.ListBox1                    .Visible = True                    .Top = Me.TextBox1.Top + Me.TextBox1.Height                    .Left = Me.TextBox1.Left                    .Height = Target.Height * 5                    .Width = Target.Width                    If Me.TextBox1 = "" Then                        .List = arr                    End If                End With            Else                Me.TextBox1.Visible = False                Me.ListBox1.Visible = False             End If        Else            Me.TextBox1.Visible = False            Me.ListBox1.Visible = False            Me.TreeView1.Visible = False        End If    Else        Me.TextBox1.Visible = False        Me.ListBox1.Visible = False        Me.TreeView1.Visible = False    End IfEnd Sub

TreeView控件添加节点的顺序:顶级、一级、二级......,基本语句:

Set NodX = treeview1.Nodes.Add(父节点, tvwChild, key, text)

父节点:就是上节节点,最顶层可以没有,其余的都要有,否则关系就乱了。

tvwChild,子节点,表示是父节点的子节点。

key,键值,不能全部是数字,这里我们以科目代码作为key,key我们是看不到的。

text,文本,节点显示的字符,我们把科目表的第3列作为text,这就是我们要在明细账中输入的内容。

这里,我们先加一个顶级节点“Account“,文本为”科目列表"

再接着添加科目分类,然后一级、二级......

最后,我们双击TreeView控件,在其click事件中添加代码,把节点的文本填到当前单元格:

Private Sub TreeView1_Click()    If Me.TreeView1.SelectedItem.Children = 0 Then        Selection = Me.TreeView1.SelectedItem.Text        Me.TreeView1.Visible = False    End IfEnd Sub

其他地方略作修改,现金辅助列还是采用原来的方法。这样,就完成了!

好,今天我们就分享到这里,我们下期再会。

本文使用 文章同步助手 同步,本文于2023年4月14日首发于本人同名公众号:Excel活学活用,更多文章敬请关注

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«    2024年12月    »
1
2345678
9101112131415
16171819202122
23242526272829
3031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
    文章归档
      友情链接