VBA 代码逐句翻译:工作表选择变化、文本框修改和列表框双击事件
Private Sub Worksheet_SelectionChange(ByVal Target As Range) ' 当工作表的选定范围发生变化时触发该事件 Dim dateValue As Date ' 声明日期类型变量 dateValue TextBox1.Visible = False ' 将文本框 1 的可见性设置为 False ListBox1.Visible = False ' 将列表框 1 的可见性设置为 False TextBox1.Text = "" ' 清空文本框 1 中的文本 ListBox1.Clear ' 清空列表框 1 中的所有选项 With Target ' 将 Target 赋值给 With 语句块 If .Count = 1 And .Row > 1 And .Row <= ListObjects(1).ListRows.Count + 2 Then ' 如果目标单元格的数量为 1 且所在行大于 1 且小于等于第 1 个列表对象的行数加 2 If .Column = 13 Then ' 如果目标单元格所在列为 13 dateValue = CalendarForm.GetDate ' 从日历窗体中获取日期值并赋值给 dateValue If dateValue > 0 Then ' 如果 dateValue 大于 0 .value = dateValue ' 将 dateValue 赋值给目标单元格的值 If Cells(.Row, 1).value = "" Then ' 如果目标单元格所在行的第 1 列的值为空 Cells(.Row, 1).value = Get_Code("CK") ' 调用 Get_Code 函数并将返回值赋值给目标单元格所在行的第 1 列 End If End If ElseIf .Column = 4 Then ' 否则,如果目标单元格所在列为 4 TextBox1.Visible = True ' 将文本框 1 的可见性设置为 True TextBox1.Top = .Top ' 将文本框 1 的上边距设置为目标单元格的上边距 TextBox1.Left = .Left ' 将文本框 1 的左边距设置为目标单元格的左边距 ListBox1.Top = TextBox1.Top + TextBox1.Height + 1 ' 将列表框 1 的上边距设置为文本框 1 的上边距加上文本框 1 的高度再加 1 ListBox1.Left = .Left ' 将列表框 1 的左边距设置为目标单元格的左边距 TextBox1.Activate ' 激活文本框 1 If Sheet2.ListObjects(1).ListRows.Count > 0 Then ' 如果 Sheet2 的第 1 个列表对象的行数大于 0 dataValue = Sheet2.ListObjects(1).DataBodyRange.value ' 将 Sheet2 的第 1 个列表对象的数据区域的值赋值给 dataValue End If End If End If End With End Sub
Private Sub Textbox1_Change() ' 当文本框 1 的文本发生变化时触发该事件 Dim i As Integer, Text As String, value As String ' 声明整型变量 i,字符串变量 Text 和 value Text = TextBox1.Text ' 将文本框 1 中的文本赋值给 Text If Text = "" Then ' 如果 Text 为空 ListBox1.Visible = False ' 将列表框 1 的可见性设置为 False Exit Sub ' 退出 Sub 过程 End If With ListBox1 ' 将 ListBox1 赋值给 With 语句块 .Clear ' 清空列表框 1 中的所有选项 .AddItem ' 向列表框 1 中添加一项 For i = 0 To 9 ' 循环 i 从 0 到 9 .List(0, i) = Array("货号", "名称", "厂家", "规格型号", "存放温度", "单位", "有效期", "货号", "库存数量", "ID")(i) ' 将数组中的第 i 项赋值给列表框 1 中的第 0 行第 i 列 Next For i = 1 To UBound(dataValue) ' 循环 i 从 1 到 dataValue 数组的上限 If dataValue(i, 4) Like "" & Text & "" And dataValue(i, 16) > 0 Then ' 如果 dataValue 数组第 i 行第 4 列的值符合 Text 的通配符形式且第 i 行第 16 列的值大于 0 .AddItem ' 向列表框 1 中添加一项 .List(.ListCount - 1, 0) = dataValue(i, 3) ' 将 dataValue 数组第 i 行第 3 列的值赋值给列表框 1 中的第 (.ListCount - 1) 行第 0 列 .List(.ListCount - 1, 1) = dataValue(i, 4) ' 将 dataValue 数组第 i 行第 4 列的值赋值给列表框 1 中的第 (.ListCount - 1) 行第 1 列 .List(.ListCount - 1, 2) = dataValue(i, 5) ' 将 dataValue 数组第 i 行第 5 列的值赋值给列表框 1 中的第 (.ListCount - 1) 行第 2 列 .List(.ListCount - 1, 3) = dataValue(i, 6) ' 将 dataValue 数组第 i 行第 6 列的值赋值给列表框 1 中的第 (.ListCount - 1) 行第 3 列 .List(.ListCount - 1, 4) = dataValue(i, 7) ' 将 dataValue 数组第 i 行第 7 列的值赋值给列表框 1 中的第 (.ListCount - 1) 行第 4 列 .List(.ListCount - 1, 5) = dataValue(i, 8) ' 将 dataValue 数组第 i 行第 8 列的值赋值给列表框 1 中的第 (.ListCount - 1) 行第 5 列 .List(.ListCount - 1, 6) = dataValue(i, 9) ' 将 dataValue 数组第 i 行第 9 列的值赋值给列表框 1 中的第 (.ListCount - 1) 行第 6 列 .List(.ListCount - 1, 7) = dataValue(i, 10) ' 将 dataValue 数组第 i 行第 10 列的值赋值给列表框 1 中的第 (.ListCount - 1) 行第 7 列 .List(.ListCount - 1, 8) = dataValue(i, 16) ' 将 dataValue 数组第 i 行第 16 列的值赋值给列表框 1 中的第 (.ListCount - 1) 行第 8 列 .List(.ListCount - 1, 9) = dataValue(i, 1) ' 将 dataValue 数组第 i 行第 1 列的值赋值给列表框 1 中的第 (.ListCount - 1) 行第 9 列 End If Next .Visible = .ListCount > 0 ' 如果列表框 1 中有选项,则将其可见性设置为 True,否则设置为 False End With End Sub
Private Sub ListBox1_DblClick(ByVal cancel As MSForms.ReturnBoolean) ' 当双击列表框 1 中的选项时触发该事件 Dim Row As Integer ' 声明整型变量 Row With ListBox1 ' 将 ListBox1 赋值给 With 语句块 If .ListIndex = -1 Then Exit Sub ' 如果列表框 1 中无选项被选中,则退出 Sub 过程 Row = ActiveCell.Row ' 将选定单元格所在行赋值给 Row Cells(Row, 2).value = .List(.ListIndex, 9) ' 将列表框 1 中选中的选项的第 9 列的值赋值给选定单元格所在行的第 2 列 Cells(Row, 3).value = "=INDEX(入库[货号],MATCH([@入库ID],入库[ID],),)" ' 将公式赋值给选定单元格所在行的第 3 列 Cells(Row, 4).value = "=INDEX(入库[名称],MATCH([@入库ID],入库[ID],),)" ' 将公式赋值给选定单元格所在行的第 4 列 Cells(Row, 5).value = "=INDEX(入库[厂家],MATCH([@入库ID],入库[ID],),)" ' 将公式赋值给选定单元格所在行的第 5 列 Cells(Row, 6).value = "=INDEX(入库[规格型号],MATCH([@入库ID],入库[ID],),)" ' 将公式赋值给选定单元格所在行的第 6 列 Cells(Row, 7).value = "=INDEX(入库[存放温度],MATCH([@入库ID],入库[ID],),)" ' 将公式赋值给选定单元格所在行的第 7 列 Cells(Row, 8).value = "=INDEX(入库[单位],MATCH([@入库ID],入库[ID],),)" ' 将公式赋值给选定单元格所在行的第 8 列 Cells(Row, 9).value = "=INDEX(入库[批号],MATCH([@入库ID],入库[ID],),)" ' 将公式赋值给选定单元格所在行的第 9 列 Cells(Row, 10).value = "=INDEX(入库[有效期],MATCH([@入库ID],入库[ID],),)" ' 将公式赋值给选定单元格所在行的第 10 列 If Cells(Row, 1).value = "" Then ' 如果选定单元格所在行的第 1 列的值为空 Cells(Row, 1).value = Get_Code("CK") ' 调用 Get_Code 函数并将返回值赋值给选定单元格所在行的第 1 列 End If .Visible = False ' 将列表框 1 的可见性设置为 False TextBox1.Visible = False ' 将文本框 1 的可见性设置为 False End With End Sub
原文地址: https://www.cveoy.top/t/topic/lCAr 著作权归作者所有。请勿转载和采集!