VBA代码详解:Excel合同台账数据查询功能实现

本文将详细解读一段VBA代码,该代码实现了在Excel中根据用户输入的条件查询'合同台账'工作表中的数据,并将结果显示在'合同查询'工作表的功能。

**代码:**vbaPrivate Sub CommandButton1_Click()On Error Resume NextWith Sheets('合同台账') r = .Cells(.Cells.Rows.Count, 'C').End(3).Row arr = .Range('C4:AE' & r)End With

Dim str1 As String, str2 As String, str3 As String With Me str1 = .tt1.Value str2 = .tt2.Value str3 = .tt3.Value End With

If str1 = '' And str2 = '' And str3 = '' Then MsgBox '请输入至少一个查询条件,以方便系统为您查询相应数据!', vbInformation, '系统提示': Exit Sub

ReDim brr(1 To UBound(arr), 1 To UBound(arr, 2) + 1) For i = 1 To UBound(arr) If (str1 = '' Or (arr(i, 1) Like '' & str1 & '') And str1 <> '') _ And (str2 = '' Or (arr(i, 2) Like '' & str2 & '') And str2 <> '') _ And (str3 = '' Or (arr(i, 21) Like '' & str3 & '') And str3 <> '') Then m = m + 1 For j = 1 To UBound(arr, 2) brr(m, 1) = m brr(m, j + 1) = arr(i, j) Next End If Next With Sheets('合同查询') If m > 0 Then .Range('B4:AE60000').ClearContents .Range('B4').Resize(UBound(brr), UBound(brr, 2)) = brr MsgBox '数据查询完毕', vbInformation, '系统提示' Else .Range('B4:AE60000').ClearContents MsgBox '抱歉,没有符合条件的数据,请您再次查证所录入的查询条件是否存在!', vbInformation, '系统提示' End If End WithEnd Sub

代码逐行解释:

  1. Private Sub CommandButton1_Click(): 定义名为 'CommandButton1_Click' 的私有过程,该过程在按钮 'CommandButton1' 被点击时触发。

  2. On Error Resume Next: 错误处理语句,遇到错误时继续执行下一行代码。

  3. With Sheets('合同台账') ... End With: 引用 '合同台账' 工作表,简化代码。

    • r = .Cells(.Cells.Rows.Count, 'C').End(3).Row: 获取 '合同台账' 工作表中 C 列最后一个非空单元格的行号,存储在变量 r 中。 * arr = .Range('C4:AE' & r): 将 '合同台账' 工作表中从 C4 单元格到 AE 列第 r 行的数据存储到数组 arr 中。
  4. Dim str1 As String, str2 As String, str3 As String: 声明三个字符串变量,用于存储用户输入的查询条件。

  5. With Me ... End With: 引用当前用户窗体。

    • str1 = .tt1.Value: 获取名为 'tt1' 的控件的值,存储到变量 str1 中。 * str2 = .tt2.Value: 获取名为 'tt2' 的控件的值,存储到变量 str2 中。 * str3 = .tt3.Value: 获取名为 'tt3' 的控件的值,存储到变量 str3 中。
  6. If str1 = '' And str2 = '' And str3 = '' Then ... End If: 判断用户是否输入了至少一个查询条件。

    • 如果三个条件都为空,则弹出提示信息,并退出程序。
  7. ReDim brr(1 To UBound(arr), 1 To UBound(arr, 2) + 1): 重新定义数组 brr 的大小,用于存储查询结果。

  8. For i = 1 To UBound(arr) ... Next: 遍历数组 arr 中的每一行数据。

    • If (str1 = '' Or (arr(i, 1) Like '*' & str1 & '*') And str1 <> '') _ ...: 判断当前行数据是否满足所有查询条件,使用模糊查询。 * 如果满足条件,则将该行数据存储到数组 brr 中。
  9. With Sheets('合同查询') ... End With: 引用 '合同查询' 工作表。

    • If m > 0 Then ... Else ... End If: 判断是否有查询结果。 * 如果有结果,则将结果写入 '合同查询' 工作表,并弹出提示信息。 * 如果没有结果,则清空 '合同查询' 工作表的内容,并弹出提示信息。

总结:

这段VBA代码通过读取用户输入的查询条件,在 '合同台账' 工作表中进行模糊查询,并将符合条件的数据显示在 '合同查询' 工作表中,实现了简单的合同台账数据查询功能。


原文地址: https://www.cveoy.top/t/topic/bIg4 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录