VBA 售后任务信息查询

领导想做一个功能,从售后任务信息表,能查到该任务下的明细内容,但我们目前售后任务信息是放在12#表,明细是放在2#表。

解决思路是先取12#表和2#表的数据,在同一个个表格内,通过任务编号进行关联。可以借用"在制物料任务查询"的框架进行开发

1、设计"售服任务"表格如下

2、打开文件先清除数据

建"openfile"的模块,代码如下:

vbnet 复制代码
Option Explicit

 Sub Auto_Open()

   MsgBox "欢迎使用任务零件查询功能!" & vbCrLf & _
   "第一次查询和刷新数据会较慢,请耐心等待。"
   
    'Worksheets("查询汇总").Select
    'ActiveSheet.CommandButton1.BackColor = RGB(255, 69, 0)
    'ActiveSheet.CommandButton2.BackColor = RGB(255, 255, 0)
    'ActiveSheet.CommandButton3.BackColor = RGB(0, 191, 255)
    
 ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  '售服任务时隐藏
    ActiveSheet.ListBox1.Visible = False
    ActiveSheet.CommandButton4.Visible = False
    ActiveSheet.CommandButton1.Visible = False
    ActiveSheet.CommandButton2.Visible = False
    ActiveSheet.CommandButton3.Visible = False
      
 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''   
    
    '清除"查询汇总"原有数据
Dim rowsnum As Long
Dim RNG As Range
Range("A4:Z7").value = ""
rowsnum = ActiveSheet.Range("A10").End(xlDown).Row
If rowsnum <> 0 Then
  Set RNG = ActiveSheet.Range("A10:Z" & rowsnum)
  RNG.Clear ' 清除数据
  RNG.Borders.LineStyle = xlNone  ' 移除边框
End If
    ActiveWindow.FreezePanes = False '解除窗口冻结
            
''处理售服任务表
rowsnum = 0
Set RNG = Nothing
 Worksheets("售服任务").Select
Range("A3:Z5000").value = ""
rowsnum = ActiveSheet.Range("A1").End(xlDown).Row
If rowsnum <> 0 Then
  Set RNG = ActiveSheet.Range("A1:Z" & rowsnum)
  RNG.Clear ' 清除数据
  RNG.Borders.LineStyle = xlNone  ' 移除边框
End If
    
End Sub

3、获取2#12#表

按钮"获取2#12#表格数据"代码

vbnet 复制代码
Private Sub CommandButton1_Click()
getSHdate.GetDataFromSH
End Sub

模块"getSHdate"代表如下

vbnet 复制代码
'''用于取另外工作表的数据
Sub GetDataFromSH()
    Dim sourceWorkbook As Workbook
    Dim sourceWorksheet As Worksheet
    Dim targetWorkbook As Workbook
    Dim targetWorksheet As Worksheet
    Dim sourceRange As Range
    Dim targetRange As Range
    Dim MAXRGN As Long
    Dim MAXRGN2 As Long
    Dim ws As Worksheet
    Dim i As Long
    Dim SHname As String, SJname As String
 
'
''''''''''检查工作表是否存在,不存在则新建一个
  sheetexist.sheetexist
'
'    ' 设置要检查的工作表名称
    SJname = "数据"
    SHname = "售服任务"


    '清除原有数据
    ActiveWorkbook.Sheets(SJname).Visible = True
    ActiveWorkbook.Sheets(SJname).Select
     MAXRGN = Worksheets(SJname).Range("a" & Rows.Count).End(xlUp).Row
    If MAXRGN <> 0 Then
      Set RNG = ActiveSheet.Range("A1:AZ" & MAXRGN)
      RNG.Clear ' 清除数据
      RNG.Borders.LineStyle = xlNone  ' 移除边框
    End If
    
'打开提示框,进行数据处理




UserForm2.Show 0
Application.ScreenUpdating = False '禁止屏幕更新
Application.Interactive = False  '禁止用户干预宏代码的执行
    
''''''''''取2#表信息
calldate.GetDataFromAnotherWorkbook


    
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''处理12#表数据

    '清除售服任务数据

    ActiveWorkbook.Sheets(SHname).Select
     MAXRGN = Worksheets(SHname).Range("a" & Rows.Count).End(xlUp).Row
    If MAXRGN <> 0 Then
      Set RNG = ActiveSheet.Range("A1:AZ" & MAXRGN)
      RNG.Clear ' 清除数据
      RNG.Borders.LineStyle = xlNone  ' 移除边框
    End If
 
    
  ''''''''取12#表格信息
  
''      UserForm3.Show 0
  
    '设置源工作簿、工作表、范围
     f = Dir(ThisWorkbook.Path & "\12#售后配件任务单.xlsx")
    If f = "" Then
        MsgBox "12#表源文件不存,请查看"
        Exit Sub
    Else
        Set sourceWorkbook = Workbooks.Open(ThisWorkbook.Path & "\" & f)
    End If
    Set sourceWorksheet = sourceWorkbook.Worksheets("在制") '获取源表格

'    如果源工作表有过滤,则显示所有数据
    If sourceWorksheet.FilterMode = True Then
     sourceWorksheet.ShowAllData
    End If


''获取关键信息
Dim rngnew As Range

Set rngnew = sourceWorksheet.Range("B1:B5000").SpecialCells(xlCellTypeVisible)
Set rngnew = Union(rngnew, sourceWorksheet.Range("D1:E5000").SpecialCells(xlCellTypeVisible))
Set rngnew = Union(rngnew, sourceWorksheet.Range("G1:H5000").SpecialCells(xlCellTypeVisible))
Set rngnew = Union(rngnew, sourceWorksheet.Range("L1:P5000").SpecialCells(xlCellTypeVisible))
Set rngnew = Union(rngnew, sourceWorksheet.Range("S1:S5000").SpecialCells(xlCellTypeVisible))

    '设置目标工作簿、工作表、范围
    Set targetWorkbook = ThisWorkbook
    Set targetWorksheet = targetWorkbook.Worksheets(SHname)
    Set targetRange = targetWorksheet.Range("A3")

    '复制数据
    rngnew.Copy targetRange

    '关闭源工作簿,并不保存更改
    sourceWorkbook.Close SaveChanges:=False
    '设置筛选
    ActiveSheet.Range("A3:K3").Select
    Selection.AutoFilter
'
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    '获取库存
    getkc.GetDataFromSQL
    
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
 Application.ScreenUpdating = True '允许屏幕更新
Application.Interactive = True  '允许用户干预宏代码的执行
'Application.Visible = True
       
  ''        隐藏工作表
    ThisWorkbook.Sheets("数据").Visible = False
    ThisWorkbook.Sheets("库存").Visible = False
    ThisWorkbook.Sheets("到货").Visible = False
    

 ''转到"售服任务"表
    Sheets(SHname).Select
    
   ActiveWorkbook.Sheets(SJname).Visible = False
    
   Set sourceWorkbook = Nothing
   Set sourceWorksheet = Nothing
   Set targetWorkbook = Nothing
   Set targetWorksheet = Nothing
   Set sourceRange = Nothing
   Set targetRange = Nothing
   Set ws = Nothing
    
    
End Sub

12#表的数据获取如下:

2#表的明细数据获取如下:

4、其中获取库存的功能,是从数据库中获取的

模块" getkc"代码如下:

vbnet 复制代码
 Sub GetDataFromSQL()

    Dim sqlstr As String
    Dim ws As Worksheet
    Dim RNG As Range
    Dim sheetname As String
    Dim i As Long, MAXRGN As Long
    Dim conn As ADODB.Connection  '定义数据连接对象 ,需要添加ADO引用Microsoft ActiviteX Data Objects 2.8 Library
    Dim dataset As ADODB.Recordset  '定义记录集对象,需要添加ADO引用Microsoft ActiviteX Data Recordset Objects 2.8 Library

''''''''''检查工作表是否存在,不存在则新建一个
  sheetexist.sheetexist
'    ' 设置要检查的工作表名称
    sheetname = "库存"

    '清除原有数据
    ActiveWorkbook.Sheets(sheetname).Visible = True
    ActiveWorkbook.Sheets(sheetname).Select
     MAXRGN = Worksheets(sheetname).Range("a" & Rows.Count).End(xlUp).Row
    If MAXRGN <> 0 Then
      Set RNG = ActiveSheet.Range("A1:AZ" & MAXRGN)
      RNG.Clear ' 清除数据
      RNG.Borders.LineStyle = xlNone  ' 移除边框
    End If
    

    '连接数据库并执行SQL语句
    Set conn = New ADODB.Connection
    conn.ConnectionString = "Provider=SQLOLEDB;Data Source=192.168.100.3;Initial Catalog=AIS20150813141843;User ID=sa;Password=Chr_2016"
    conn.Open
    
    sqlstr = sqlstr + "SELECT  t_icitem.fnumber 零件代码, t_icitem.fname 零件名称, t_icitem.fmodel 零件规格, t_Stock.FName 仓位, "
    sqlstr = sqlstr + "t_StockPlace.fname 仓位, convert(float,sum(icinventory.fqty )) 数量 FROM icinventory  "
    sqlstr = sqlstr + "inner join  t_icitem   on ( icinventory.fitemid = t_icitem.fitemid )  and  t_icitem.fnumber not like '3.10.%'   "
    sqlstr = sqlstr + "inner join t_item a on t_icitem.FItemID=a.FItemID "
    sqlstr = sqlstr + "inner join t_Stock  on icinventory.FStockID=t_Stock.FItemID "
    sqlstr = sqlstr + "inner join t_StockPlace on icinventory.FStockPlaceID=t_StockPlace.FSPID "
    sqlstr = sqlstr + "WHERE 1=1 and icinventory.fqty<>0 group by t_icitem.fitemid,  t_icitem.fnumber,t_icitem.fname,  "
    sqlstr = sqlstr + "t_icitem.fmodel,   t_Stock.FName,t_StockPlace.fname order by t_icitem.fnumber "

        '执行查询并获取结果集
    Set dataset = New ADODB.Recordset
    dataset.Open sqlstr, conn
      
  
      
    '将结果集保存到工作表
    Set ws = ThisWorkbook.Worksheets(sheetname) '
    '将标题写入工作表
     For i = 0 To dataset.Fields.Count - 1
        ws.Cells(1, i + 1).value = dataset.Fields(i).Name
     Next i
    ActiveSheet.Range("A2").CopyFromRecordset dataset
    '关闭记录集和连接
    dataset.Close
    conn.Close
    
  
 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
 ''使用字典方法汇总零件库存数

    Dim dict As Object
    Set dict = CreateObject("Scripting.Dictionary")
    Dim MaxRow As Long
    Dim key As Variant, value As Double
     
    With ActiveSheet
    ' 获取数据范围
    MaxRow = .Cells(Rows.Count, "A").End(xlUp).Row
    i = 0
     ' 遍历数据并汇总
    For i = 2 To MaxRow
        key = .Cells(i, 1).value ' 零件代码为键
        value = .Cells(i, 6).value '数量为值
        
        ' 键存在则累加,不存在则添加
        If dict.Exists(key) Then
            dict(key) = dict(key) + value
        Else
            dict.Add key, value
        End If
    Next i
    
    '''另起两列汇总库存数量
    i = 1
    .Cells(1, 10).value = "零件代码"
    .Cells(1, 11).value = "汇总数量"
    
    For Each key In dict.Keys
        i = i + 1
        .Cells(i, 10).value = key
        .Cells(i, 11).value = dict(key)
    Next key
    
    End With
    
 '''''''''''''''''''''''''''''''''''''''''''
     
    '释放对象
    Set dataset = Nothing
    Set conn = Nothing
    Set ws = Nothing
    Set RNG = Nothing
    Set dict = Nothing
     '将第一行设置成筛选
    ActiveSheet.Range("A1:F1").AutoFilter
    
    
    ActiveWorkbook.Sheets(sheetname).Visible = False
    
 '''转到"查询汇总"表
    Sheets("查询汇总").Select

End Sub

主要用的是汇总数量

5、售服任务的过滤

这里的未完成和延期是以预计完成日期为标准对比的。

代码如下:

vbnet 复制代码
Private Sub OptionButton1_Click()
'全部
   Dim rowsnum As Long
   With Worksheets("售服任务")
      rowsnum = .Range("A" & Rows.Count).End(xlUp).Row '总行数
            
      If .AutoFilterMode Then .AutoFilterMode = False  ' 清除原有筛选(避免冲突)
      .Range("$A$3:$K$" & rowsnum).AutoFilter Field:=10  ''显示全部数据
      
            
   End With

End Sub

Private Sub OptionButton2_Click()
'未完成
   Dim rowsnum As Long
   With Worksheets("售服任务")
      rowsnum = .Range("A" & Rows.Count).End(xlUp).Row '总行数
      
        
      If .AutoFilterMode Then .AutoFilterMode = False  ' 清除原有筛选(避免冲突)
     .Range("$A$3:$K$" & rowsnum).AutoFilter Field:=9, Criteria1:="=", Operator:=xlOr, Criteria2:="待提货"   '预计完成日期为空,未完成的
            
   End With
End Sub

Private Sub OptionButton3_Click()
'延期
   Dim rowsnum As Long
   With Worksheets("售服任务")
      rowsnum = .Range("A" & Rows.Count).End(xlUp).Row '总行数
      
     If .AutoFilterMode Then .AutoFilterMode = False  ' 清除原有筛选(避免冲突)
     .Range("$A$3:$K$" & rowsnum).AutoFilter Field:=10, Criteria1:=""  '筛选J列实际完成日期为空的
     .Range("$A$3:$K$" & rowsnum).AutoFilter Field:=9, Criteria1:=">=" & Date '筛选I列"预计完成日期"日期大于等于当前日期的数据
            
   End With

End Sub

6、查询

vbnet 复制代码
Private Sub CommandButton2_Click()
Dim selectedCell As Range
    Dim cellValue As Variant
    
    ' 错误处理:未选择单元格
    If TypeName(Selection) <> "Range" Then
        MsgBox "请先选择一个单元格!", vbExclamation
        Exit Sub
    End If
    
    ' 错误处理:选择多个单元格
    Set selectedCell = Selection
    If selectedCell.Count > 1 Then
        MsgBox "请选择单个单元格!", vbExclamation
        Exit Sub
    End If
    
    ' 获取单元格值
    cellValue = selectedCell.value
    
    ' 创建并显示UserForm
    With UserFormSH
        .TextBox1.value = cellValue
        .TextBox1.Enabled = False
        .Show
    End With
End Sub

窗体UserFormSH设计如下:

"确定"代码如下:

vbnet 复制代码
Private Sub ButtonOK_Click()
    
    
    Dim RNG As Range
    Dim RGE1 As Range
    Dim RGE2 As Range
    Dim RGE3 As Range
    Dim RGE4 As Range
    Dim RGE5 As Range
    Dim unionRGE As Range
    Dim jcbh As String
    Dim rowsnum As Long
    Dim JCROWS As Long
    Dim JCROWS2 As Long
    Dim JCROWS3 As Long
    Dim JCROWS4 As Long
    Dim JCROWS5 As Long
    Dim JCROWS6 As Long
    Dim JCROWS7 As Long
    Dim JCROWS8 As Long
    Dim visibleCells As Range
    Dim X As Variant
    
    
    
    
    '清除"查询汇总"原有数据
    Sheets("查询汇总").Select
    Range("A4:D8").value = ""
    rowsnum = ActiveSheet.Range("A10").End(xlDown).Rows
    If rowsnum <> 0 Then
        Set RNG = ActiveSheet.Range("A10:Z" & rowsnum)
        RNG.Clear ' 清除数据
        RNG.Borders.LineStyle = xlNone  ' 移除边框
    End If
    
    ActiveWindow.FreezePanes = False '解除窗口冻结
    '
    
    '重新选择数据
    'JCBH = InputBox("请录入机床编号,尽量完整录入,不要模糊查询")
    jcbh = Me.TextBox1.value
    If IsNull(jcbh) Or jcbh = "" Then
        MsgBox "机床编号不能为空"
        Exit Sub     '终止执行代码
    Else
        jcbh = UCase(jcbh)
    End If
    
    
    'Application.ScreenUpdating = False '关闭屏幕更新
    
    
    'ActiveSheet.CommandButton1.JCBH = 选择窗口.TextBox1.Value
    
    ThisWorkbook.Sheets("数据").Visible = True
    ThisWorkbook.Sheets("库存").Visible = True
    Sheets("数据").Select '转到"数据"表
    
    
    '如果筛选功能打开,则显示所有数据
    If ActiveSheet.FilterMode = True Then
        ActiveSheet.ShowAllData
    End If
    
    
    '查找B列是否包含JCBH,如果有则过滤复制,没有则退出
    Set RNG = ActiveSheet.Range("B:B").Find(jcbh)
    
    If Not RNG Is Nothing Then
        
        '填充相关数据
        Dim RNG1 As Range
        Dim RNG2 As Range
        With Worksheets("数据")
            'Set RNG1 = .Columns("AD:AD")
            'Set RNG2 = .Columns("AE:AE")
            '240510改成只看"配送单提供日期"
            Set RNG1 = .Columns("AC:AC")
            
            
            
            JCROWS = WorksheetFunction.CountIf(.Columns("B:B"), "*" & jcbh & "*") '包含JCBH的总行
            JCROWS2 = WorksheetFunction.CountIfs(.Columns("B:B"), "*" & jcbh & "*", .Columns("AA:AA"), "/") '包含/的行数,有可能是组部件
            JCROWS3 = WorksheetFunction.CountIfs(.Columns("B:B"), "*" & jcbh & "*", .Columns("AA:AA"), ">" & DateAdd("d", -999, Date))   '到货日期是有效日期的数量
            JCROWS4 = WorksheetFunction.CountIfs(.Columns("B:B"), "*" & jcbh & "*", .Columns("AA:AA"), ">" & DateAdd("d", -999, Date), RNG1, ">" & Now() - 999) '配送日期是有效日期的数量
            'JCROWS5 = WorksheetFunction.CountIfs(.Columns("B:B"), "*" & jcbh & "*", .Columns("AA:AA"), ">" & DateAdd("d", -999, Date), RNG1, "", RNG2, ">" & Now() - 999) '当配送日期为空时,看实际配送日期
            JCROWS5 = 0
            JCROWS6 = WorksheetFunction.CountIfs(.Columns("B:B"), "*" & jcbh & "*", .Columns("AA:AA"), "<>" & "/", .Columns("D:D"), "机加") '机加任务数量
            JCROWS7 = WorksheetFunction.CountIfs(.Columns("B:B"), "*" & jcbh & "*", .Columns("AA:AA"), "<>" & "/", .Columns("D:D"), "采购") '采购任务数量
            JCROWS8 = WorksheetFunction.CountIfs(.Columns("B:B"), "*" & jcbh & "*", .Columns("AA:AA"), "<>" & "/", .Columns("D:D"), "新核") '新核任务数量
            
            
        End With
        With Sheets("查询汇总")
            .Range("C5").value = JCROWS - JCROWS2 '物料总项数
            .Range("E5").value = JCROWS3 '已到货项数
            .Range("G5").value = JCROWS4 + JCROWS5 '已配送
            .Range("F5").value = (JCROWS3 / (JCROWS - JCROWS2)) * 100 & "%" '齐套率
            .Range("H5").value = ((JCROWS4 + JCROWS5) / (JCROWS - JCROWS2)) * 100 & "%" '配送率
            .Range("A7").value = JCROWS7 '机加任务数量
            .Range("E7").value = JCROWS8 '新核任务数量
            .Range("G7").value = JCROWS6 '采购任务数量
            
            '''''''''''''''''''''''''''''''''2024115增加到货率图表数据
            .Range("P16").value = "采购"
            .Range("P17").value = "机加"
            .Range("P18").value = "新核"
            .Range("P19").value = "合计"
            .Range("Q15").value = "总数"
            .Range("R15").value = "到货"
            .Range("S15").value = "辅助列"
            .Range("T15").value = "到货率"
            
            .Range("Q16").FormulaR1C1 = "=R[-9]C[-16]"
            .Range("Q17").FormulaR1C1 = "=R[-10]C[-10]"
            .Range("Q18").FormulaR1C1 = "=R[-11]C[-12]"
            .Range("R16").FormulaR1C1 = "=R[-9]C[-17]-R[-9]C[-15]"
            .Range("R17").FormulaR1C1 = "=R[-10]C[-11]-R[-10]C[-10]"
            .Range("R18").FormulaR1C1 = "=R[-11]C[-13]-R[-11]C[-12]"
            .Range("Q19").FormulaR1C1 = "=SUM(R[-3]C:R[-1]C)"
            .Range("R19").FormulaR1C1 = "=SUM(R[-3]C:R[-1]C)"
            .Range("T16").FormulaR1C1 = "=RC[-2]/RC[-3]"
            .Range("T16").NumberFormatLocal = "0.00%"
            .Range("T17").FormulaR1C1 = "=RC[-2]/RC[-3]"
            .Range("T17").NumberFormatLocal = "0.00%"
            .Range("T18").FormulaR1C1 = "=RC[-2]/RC[-3]"
            .Range("T18").NumberFormatLocal = "0.00%"
            .Range("T19").FormulaR1C1 = "=RC[-2]/RC[-3]"
            .Range("T19").NumberFormatLocal = "0.00%"
            .Range("S16").FormulaR1C1 = "1"
            .Range("S17").FormulaR1C1 = "1"
            .Range("S18").FormulaR1C1 = "1"
            .Range("S19").FormulaR1C1 = "1"
            .Range("P14").FormulaR1C1 = "=R[-9]C[-15]&""到货率"""
            
            ''''''''''''''''''''''''''''''''''''''''''''
            
            
        End With
        

        
        With Worksheets("数据")
            rowsnum = .Range("A" & Rows.Count).End(xlUp).Row '总行数
            '
         
            datesumcg = WorksheetFunction.CountIfs(.Columns("B:B"), "*" & jcbh & "*", .Columns("D:D"), "采购", .Columns("S:S"), "<2958465")
            Sheets("查询汇总").Range("C7").value = JCROWS7 - datesumcg
            'ActiveSheet.Range("$A$1:$AJ$" & rowsnum).AutoFilter Field:=4
            
            
            
            
           
            datesumsl = WorksheetFunction.CountIfs(.Columns("B:B"), "*" & jcbh & "*", .Columns("D:D"), "新核", .Columns("V:V"), "<2958465")
            Sheets("查询汇总").Range("F7").value = JCROWS8 - datesumsl
           
            datesumjj = WorksheetFunction.CountIfs(.Columns("B:B"), "*" & jcbh & "*", .Columns("D:D"), "机加", .Columns("Z:Z"), "<2958465")
            Sheets("查询汇总").Range("H7").value = JCROWS6 - datesumjj
            'ActiveSheet.ShowAllData
            
        End With
        
        ''进行数据过滤,单选框选择,当OptionButton1选中时显示全部物料,当OptionButton2选中时显示未发物料
        '如果筛选功能打开,则显示所有数据
        If ActiveSheet.FilterMode = True Then
            ActiveSheet.ShowAllData
        End If
        
        
        ''''''''''''''''''''''''''''''''''''''''''''''
        '
        ActiveSheet.Range("$A$1:$AJ$" & rowsnum).AutoFilter Field:=2, Criteria1:="*" & jcbh & "*" '选中数据范围内第2列,过滤值1为JCBH
        Set RNG = ActiveSheet.UsedRange.SpecialCells(xlCellTypeVisible, 12)
        
        'rng.Copy ThisWorkbook.Sheets("SHEET2").Range("A1")
        
        If Me.OptionButton2.value = True Then
            
            RNG.AutoFilter Field:=27, Operator:=xlFilterValues, Criteria2:=Array(0, "12/31/1900")
            Sheets("查询汇总").Range("A9").value = "未到物料:"
        ElseIf Me.OptionButton1.value = True Then
            
            RNG.AutoFilter Field:=27, Criteria1:="<>" & "/"
            Sheets("查询汇总").Range("A9").value = "全部物料:"
        ElseIf Me.OptionButton3.value = True Then
            
            RNG.AutoFilter Field:=29, Criteria1:="", Operator:=xlOr, Field:=30, Criteria1:=""  '10.12增加过滤出未配送的物料
            Sheets("查询汇总").Range("A9").value = "未配送物料:"  '
                     
        End If

        
        ''选择多区域数据

        If rowsnum > 0 Then
            
       
          
            Dim rngnew As Range
            Set rngnew = ActiveSheet.Range("A1:H" & rowsnum).SpecialCells(xlCellTypeVisible)
            Set rngnew = Union(rngnew, ActiveSheet.Range("M1:M" & rowsnum).SpecialCells(xlCellTypeVisible))
            Set rngnew = Union(rngnew, ActiveSheet.Range("AA1:AA" & rowsnum).SpecialCells(xlCellTypeVisible))
            Set rngnew = Union(rngnew, ActiveSheet.Range("AD1:AD" & rowsnum).SpecialCells(xlCellTypeVisible))
            Set rngnew = Union(rngnew, ActiveSheet.Range("AG1:AG" & rowsnum).SpecialCells(xlCellTypeVisible))
            Set rngnew = Union(rngnew, ActiveSheet.Range("AE1:AE" & rowsnum).SpecialCells(xlCellTypeVisible))
            Sheets("查询汇总").Select '转到"查询汇总"表
            
            
            ActiveSheet.Range("A10").Select  '选择A4单元格
            rngnew.Copy ActiveSheet.Range("A10")
            
            
        End If
        
        

     '''''''''''''''''''''''''''''''''''''''''''''''''''''''

'
        With Sheets("查询汇总")
            
            '取物料库存
            rowsnum = 0
            If Not IsEmpty(.Range("A11").value) Then
                rowsnum = .Range("A11").End(xlDown).Row
                Range("N11").Select
                ActiveCell.Offset(-1, 0).value = "即时库存"
                ActiveCell.FormulaR1C1 = "=IFERROR(VLOOKUP(RC[-8],库存!C[-4]:C[-3],2,FALSE),0)"
                Selection.AutoFill Destination:=Range("N11:N" & rowsnum), Type:=xlFillDefault
            End If
            
            '冻结第11行
            .Rows("11:11").Select
            ActiveWindow.FreezePanes = True
        End With
        
        
        '文本框置空,并且隐藏窗体
        Me.TextBox1.value = ""
        UserFormSH.Hide
        
    Else
        MsgBox "机床编号" & jcbh & "不存在"  '提示
        ThisWorkbook.Sheets("数据").Visible = False '隐藏数据表
        ThisWorkbook.Sheets("库存").Visible = False '隐藏库存表
        Sheets("查询汇总").Select  '转回"查询汇总"表
        Exit Sub     '终止执行代码
    End If
    
    
    moformat.moformat jcbh '格式设置传递JCBH
    
    Worksheets("数据").ShowAllData '显示所有数据
    Application.ScreenUpdating = True '开启屏幕更新
    
    ThisWorkbook.Sheets("数据").Visible = False '隐藏数据表
    ThisWorkbook.Sheets("库存").Visible = False '隐藏库存表
    
    
    
    Set RNG = Nothing
    Set RGE1 = Nothing
    Set RGE2 = Nothing
    Set RGE3 = Nothing
    Set RGE4 = Nothing
    Set RGE5 = Nothing
    Set unionRGE = Nothing
    Set visibleCells = Nothing

    
    
    Sheets("查询汇总").Select  '转回"查询汇总"表
    
    
    
End Sub

"清除"代码

vbnet 复制代码
Private Sub ButtonDEL_Click()
       Me.TextBox1 = ""
End Sub

"退出"代码:

vbnet 复制代码
Private Sub ButtonEXIT_Click()
 ThisWorkbook.Sheets("数据").Visible = False '隐藏数据表
 ThisWorkbook.Sheets("库存").Visible = False '隐藏库存表
  Unload Me
End Sub

6、运行效果

选择任务编号单元格,点击"查询数据"时

然后选择"全部物料","未到物料",还是"未配送物料"

选择全部物料时:

注意最后序号为801的那行,选择"未到物料"就少了,上面也少了几行,说明这些物料已经到了。这样方便按需要查询

"返回"按钮的代码就是返回"信服任务"表。

相关推荐
测试者家园21 小时前
从需求文档到测试点:利用大模型实现需求理解的自动化
软件测试·自动化·llm·需求分析·持续测试·智能化测试·功能点
中小企业实战军师刘孙亮1 天前
农贸批发市场招商难?从卖摊位变经营赋能破局-佛山鼎策创局破局增长咨询
职场和发展·新媒体运营·创业创新·需求分析·内容运营
测试_AI_一辰3 天前
AI系统到底怎么测?一套六层测试框架(Agent案例)
人工智能·功能测试·需求分析·ai编程
弹简特4 天前
【测试基础】03-软件测试需求分析及常见控件的测试点
功能测试·需求分析
黄焖鸡能干四碗9 天前
业务数据中台技术方案(PPT)
大数据·数据库·人工智能·安全·需求分析
rgb2gray9 天前
论文详解 | HDAM:破解 MAUP 的城市出行需求分析新方法,实现关键驱动精准识别
人工智能·python·llm·大语言模型·需求分析·多模态·maup
知行EDI10 天前
欧洲零售行业EDI:REWE Group EDI 需求分析
edi·需求分析·电子数据交换·知行之桥·零售·知行软件·rewe group edi
知行EDI12 天前
UNFI United Natural Foods EDI 需求分析
需求分析·电子数据交换·知行之桥·知行edi·unfi
weiyvyy12 天前
机械臂控制开发实战-机械臂控制系统架构
人工智能·嵌入式硬件·机器学习·架构·机器人·需求分析·嵌入式实时数据库