基于excle 用vba 编写的简易订单管理

基于excle 用vba 编写的简易订单管理

板式家具生产排版录单
1.主要功能
订单号及其他客户的补全、填写相应列的固定参数、 保存录入的信息到总表、清空录入界面,针对 不同软件填写不同的参数。
2.基本原理
对单元格格式的设置、对数组内的数据的操作等

在这里插入图片描述
在这里插入图片描述

'表格滚动区域
Private Sub Workbook_Open()
    Worksheets("录单").ScrollArea = "A1:L100"
End Sub

Private Sub CommandButton13_Click()
        '数据弹窗验证
        Dim i As Integer
        lastRow = ActiveSheet.UsedRange.Rows.Count
        For i = 3 To lastRow
            ActiveSheet.Range("H" & i).Select
            result = MsgBox(Cells(i, 5) & "      高度        宽度        数量" & vbCrLf & vbCrLf & "         " & Cells(i, 8) & "        x         " & Cells(i, 9) & "        =        " & Cells(i, 11), vbOKCancel, "对照检验数据")
           If result = vbOK Then
               '用户按下“确认”,执行后续代码
           ElseIf result = vbCancel Then
              '用户按下“取消”,退出程序
              '光标移动至问题数据行
            Range("H" & i & ":K" & i).Interior.color = 255
            Exit For
          End If
          If i = lastRow Then
            MsgBox ("验单完成")
             result = MsgBox("是否保存数据到汇总表", vbOKCancel, "保存数据")
           If result = vbOK Then
               '用户按下“确认”,执行后续代码
               CommandButton6_Click
           ElseIf result = vbCancel Then
              
           End If
          End If
        Next i
End Sub

Private Sub CommandButton2_Click()
    '生成云熙数据
   ' CommandButton6_Click
    lastRow = ActiveSheet.UsedRange.Rows.Count
     For i = 3 To lastRow
            Cells(i, 12).Value = 1
            Cells(i, 13).Value = 1
            Cells(i, 14).Value = 1
            Cells(i, 15).Value = 1
    Next i
    If lastRow >= 3 Then
        Sheets("录单").Range("A3:O" & lastRow).Copy _

        MsgBox "数据已复制"
    Else
        MsgBox "未发现数据,请填写数据"
    End If
    
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
    '输入到K列自动换行
    Dim sro, sco, ro, co
    On Error Resume Next                '忽略运行时可能出现的错误
    Application.EnableEvents = False    '开启代码只执行一次
    Set mysheet1 = ThisWorkbook.Worksheets("录单")
    sro = Selection.Row      '选择单元格所在的行
    sco = Selection.Column   '选择单元格所在的列
    If sro > 3 And sco > 7 And sco <= 11 Then  '如果所选的单元格为第二行起,高~数量列之间,则
     ro = Target.Row       '获取改变单元格所在的行
     co = Target.Column    '获取改变单元格所在的列
     If co = 11 Then                    '如果已经到达K列,则
      mysheet1.Cells(ro + 1, 8).Select  '换行,选择下一个单元格
     End If
     If co > 1 And co < 11 Then        '如果只在B-k列,则
      mysheet1.Cells(ro, co + 1).Select '选择右边单元格
     End If
    End If
    Application.EnableEvents = True    '恢复代码只执行一次

End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    '输入数据跳过厚度列 并换行
   Static sRg As Range
    Dim ColumnOffset As Integer
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, Union([A:A], [J:J], [L:L])) Is Nothing Then
        With Target
        Application.EnableEvents = False
        If Not sRg Is Nothing Then
            If sRg.Column < .Column Then
                ColumnOffset = 1
            ElseIf .Column <> 1 Then
                ColumnOffset = -1
            End If
        Else
            ColumnOffset = 1
        End If
        .Offset(, ColumnOffset).Select
        Application.EnableEvents = True
        End With
    End If
    Set sRg = ActiveCell
End Sub
Sub DataAdd()
     '数据信息补全
      Dim lngLastRow As Long
      Dim i As Long
      Dim j As Long
      Dim k As Long
      Dim cdat As String
      Dim randomnum
      Randomize ' Initialize random-number generator.
      randomnum = Int((100 * Rnd) + 1)
      cdat = Format(Now(), "yyyymmdd")
       '获取 工作表中已使用区域最后一行的行号
       lngLastRow = ActiveSheet.UsedRange.Rows.Count
       '遍历行
       ' 1、补全单号信息 2、补全客户信息 3、补全厚度 封边信息
       For i = 3 To lngLastRow
            For j = 1 To 12
          '判断每行中第1列的单元格是否为空
             If IsEmpty(Cells(i, j)) Then
             '若为空则设置该行相应单元格
                If j = 1 Then
                    '补全单号信息
                     Cells(i, 1).Value = Format(Now, "yyyy") & Format(Now, "mm") & Format(Now, "dd") & randomnum & "-" & i - 2
                     
                    
                ElseIf j = 12 Then
                     Cells(i, 12).Value = "-1|-1|-1|-1"
                ElseIf j = 10 Then
                    '补全厚度信息
                     Cells(i, 10).Value = 18
                ElseIf j = 2 Then
                    On Error Resume Next
                     ' Look in column A
                    With Columns(2)
                          ' For blank cells, set them to equal the cell above
                            .SpecialCells(xlCellTypeBlanks).Formula = "=R[-1]C"
                            'Convert the formula to a value
                         .Value = .Value
                    End With
                    Err.Clear
                ElseIf j = 3 Then
                     On Error Resume Next
                     ' Look in column A
                    With Columns(3)
                          ' For blank cells, set them to equal the cell above
                            .SpecialCells(xlCellTypeBlanks).Formula = "=R[-1]C"
                            'Convert the formula to a value
                         .Value = .Value
                    End With
                    Err.Clear
                ElseIf j = 5 Then
                     On Error Resume Next
                     ' Look in column A
                    With Columns(5)
                          ' For blank cells, set them to equal the cell above
                            .SpecialCells(xlCellTypeBlanks).Formula = "=R[-1]C"
                            'Convert the formula to a value
                         .Value = .Value
                    End With
                    Err.Clear
               
                End If
            End If
          Next j
          Rows(i).RowHeight = 18
          If (i Mod 2) = 0 Then
            Range("A" & i & ":L" & i).Interior.color = 16247773
            
          Else
             Range("A" & i & ":L" & i).Interior.color = 11854022
          End If
        Next i
End Sub
Private Sub CommandButton12_Click()
    '导出天工数据到剪切板
    lastRow = ActiveSheet.UsedRange.Rows.Count
    If lastRow >= 3 Then
        For i = 3 To lastRow
            Cells(i, 12).Value = "-1|-1|-1|-1"
            Cells(i, 13).Value = ""
            Cells(i, 14).Value = ""
            Cells(i, 15).Value = ""
        Next i
        Sheets("录单").Range("A3:L" & lastRow).Copy _
        
        
        MsgBox "数据已复制"
    Else
        MsgBox "未发现数据,请填写数据"
    End If
End Sub

Private Sub CommandButton14_Click()
    '快速置顶
    Dim lastRow As Long
    Dim currentRow As Long
    '获取当前选中单元格所在行号
     currentRow = ActiveCell.Row
     lastRow = ActiveSheet.UsedRange.Rows.Count
      If currentRow > 20 Then '将焦点移动到最后一行(从第二行开始)
        ActiveSheet.Range("A" & 2).Select
      Else
        If lastRow > 1 Then
           ActiveSheet.Range("A" & lastRow + 1).Select
        End If
        
     End If
End Sub

Private Sub CommandButton6_Click()
    '存储录入数据到总表
    Dim FinalRow As Long
    Dim FinalRow2 As Long
    FinalRow = Sheets("录单").Cells(Rows.Count, 1).End(xlUp).Row
    FinalRow2 = Sheets("订单汇总表").UsedRange.Rows.Count
    
    If IsEmpty(Cells(FinalRow - 1, 1)) Then
            DataAdd
    End If
    Sheets("录单").Select
    Worksheets("录单").Range("A3:M" & FinalRow + 1).Copy
   ' Worksheets("订单汇总表").Activate
    ActiveSheet.Paste Destination:=Worksheets("订单汇总表").Range("A" & FinalRow2 + 1 & ":L" & FinalRow2 + FinalRow)
    MsgBox "数据已保存到汇总表", vbOKOnly, "提示"
End Sub

Private Sub CommandButton7_Click()
    '数据补全按钮
     DataAdd
     MsgBox "单号已填写完成"
End Sub
Private Sub CommandButton8_Click()
    '一键清空数据
    Dim lastRow As Long
    Dim lastCol As Long
    Dim l As Integer
    lastRow = ActiveSheet.UsedRange.Rows.Count
    result = MsgBox("按「确定」清空数据,按「取消」退出", vbOKCancel, "请确认数据已保存")
    If result = vbOK Then
        '用户按下“确认”,执行后续代码
        If lastRow >= 3 Then
            Range("A3:L" & lastRow).ClearContents
            Range("A3:L" & lastRow).Interior.ColorIndex = 0
            For lastRow = lastRow To 3 Step -1
                Rows(lastRow).Delete
             Next
            MsgBox "数据已清空"
        Else
            MsgBox "数据异常手动清空"
        End If
    ElseIf result = vbCancel Then
       '用户按下“取消”,退出程序
    End If
End Sub


汇总表

Private Sub CommandButton1_Click()
    ActiveSheet.Range("$A$1:$L$41500").AutoFilter Field:=1, Criteria1:=T2
     '冻结隔窗
     '  Dim sht As Worksheet
   ' For Each sht In ThisWorkbook.Worksheets
     '   sht.Activate
     ActiveSheet.Cells(2, 1).Select
     With ActiveWindow
            .ScrollRow = 1 '当前窗口最上面的行号,相当于移动最右侧的滚动条
            .SplitColumn = 0 '拆分(冻结)窗口,保留第几列
            .SplitRow = 1 '拆分(冻结)窗口,保留第几行
        End With
        ActiveWindow.FreezePanes = True
   ' Next
End Sub

Private Sub CommandButton2_Click()
    Application.ScreenUpdating = False
    Cells.Rows.Hidden = False
    Application.ScreenUpdating = True
        '取消筛选
    ActiveSheet.AutoFilterMode = False '取消筛选状态
    If ActiveSheet.AutoFilterMode = True Then '判断,并取消筛选状态
        ActiveSheet.AutoFilterMode = False
    End If
    
End Sub

Private Sub CommandButton4_Click()
    Dim lastRow As Long
    Dim targetSheet As Worksheet
    '指定目标工作表,这里为“Sheet1”
    Dim currentRow As Long
    '获取当前选中单元格所在行号
     currentRow = ActiveCell.Row
     lastRow = ActiveSheet.UsedRange.Rows.Count
      If currentRow > 20 Then '将焦点移动到最后一行(从第二行开始)
        ActiveSheet.Range("A" & 2).Select
      Else
        If lastRow > 1 Then
           ActiveSheet.Range("A" & lastRow + 1).Select
        End If
        
     End If
     
End Sub
Private Sub CommandButton3_Click()
    Dim templateSheet As Worksheet
    Dim selectedRange As Range
    Dim dataArray As Range
     Dim i As Integer, j As Integer
    '指定模板工作表,这里为“Template”
    Set templateSheet = ThisWorkbook.Sheets("出货单模板")
    '检查所选区域是否包含完整行
     '获取当前选择的区域
     Worksheets("订单汇总表").Activate
    Set selectedRange = Selection
    rows_count = selectedRange.Rows.Count  '返回选择区域的行数
    column_count = selectedRange.Columns.Count '返回选择区域列数
    If column_count < 12 Then
        MsgBox "您未选择完整行!重新选择数据"
        Exit Sub
     End If
    '检查所选区域第二列客户列是否包含相同数据
        With selectedRange.Columns(2)
            If WorksheetFunction.CountIf(.Cells, .Cells(1)) <> .Rows.Count Then
                MsgBox "请选择同一客户订单!"
                Exit Sub
            End If
        End With
        '将所选区域中的数据赋值给数组变量
        Worksheets("出货单模板").Activate
        MoveSheets
      '  Debug.Print "selectedRange(1, 1)=" & selectedRange(1, 1)
        '以2,3为订单号,以2,7为客户名 2,9为订单时间 截取订单号前八位 3,3终端客户
        '填写尺寸数据.对话框设置单位价格 计算
        Debug.Print selectedRange(1, 5)
        Set DataRange = Range("B7:E" & 6 + rows_count)
        DataRange.ClearContents
  
        With templateSheet
            .Range("C2").Value = selectedRange(1, 1).Value
            .Range("G2").Value = selectedRange(1, 2).Value
            .Range("I2").Value = selectedRange(1, 1).Value
            .Range("C3").Value = selectedRange(1, 3).Value
         End With
         For i = 1 To rows_count '行
                 With templateSheet
                 .Range("B" & 6 + i) = selectedRange(i, 5)
                 .Range("C" & 6 + i) = selectedRange(i, 8)
                 .Range("D" & 6 + i) = selectedRange(i, 9)
                 .Range("E" & 6 + i) = selectedRange(i, 11)
                 .Range("F" & 6 + i) = selectedRange(i, 7)
                End With
          Next i
End Sub

Sub MoveSheets()
    Worksheets("出货单模板").Copy
    With ActiveWorkbook
     .SaveAs Filename:=Environ("TEMP") & "\New1.xlsm", FileFormat:=xlOpenXMLWorkbook
   '  .Close SaveChanges:=False
End With
   
End Sub
    

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值