前言:
现时姐妹们对“vba代码保存”都比较讲究,看官们都想要剖析一些“vba代码保存”的相关内容。那么小编也在网上收集了一些关于“vba代码保存””的相关内容,希望看官们能喜欢,朋友们一起来学习一下吧!视频加载中...
如上面视频所示,我们用数组方式,将送货单的数据批量保存到销售记录工作表。
知识点:数组的读取及将数组释放到单元格
如上图所示,arr数组、矩形圈起来的项目是出库单的数据,每条数据共14个项目,所以定义一个n行、14列的brr数组,用以存放我们读取的数据。
如上图所示,将brr数组释放到销售记录工作表,从上到下第一个空白行的位置。
代码写到按钮的 保存_Click()事件
Private Sub 保存_Click()
Dim arr, crr, i%, j%, n%, brr(), rng As Range
'判断表头必填项是否为空
crr = Array([D5], "客户名称", [J5], "联系人", [L5], "电话", [D6], "送货地址", [J7], "制单时间", [L3], "销售单编号", [L7], "总金额", [C10], "第一个产品名称")
For j = 1 To UBound(crr)
If crr(j - 1) = "" Then
MsgBox crr(j) & "不能为空!", vbCritical, "错误!"
crr(j - 1).Activate
Exit Sub
End If
Next j
'判断销售单编号规范性
编号 = [L3]
If Len(编号) <> 13 Or VBA.InStr(编号, "XSD") < 0 Then
MsgBox "销售单编号自动生成,请不要修改!", vbCritical, "错误!"
Exit Sub
End If
'判断录入产品信息的完整性(只允许备注有空值)
Dim MaxR%
MaxR = [C20].End(xlUp).Row
If MaxR < 10 Then Exit Sub
For Each rng In Union(Range("C10:C" & MaxR), Range("F10:G" & MaxR), Range("I10:J" & MaxR))
If rng.Value = "" Then
MsgBox Cells(9, rng.Column) & "不能为空!", vbCritical, "错误!"
rng.Activate
Exit Sub
End If
Next rng
'保存销售单
arr = Range("C9:L" & MaxR)
ReDim brr(1 To UBound(arr) - 1, 1 To 14)
'将数据写入数组brr
For i = 2 To UBound(arr)
n = n + 1
brr(n, 1) = [L3].Value '销售单编号
brr(n, 2) = Format([J7].Value, "yyyy/mm/dd") '制单时间
brr(n, 3) = [D5].Value '客户名称
brr(n, 4) = [L5].Value '客户联系电话
brr(n, 5) = arr(i, 1) '产品名称
brr(n, 6) = arr(i, 3) '规格
brr(n, 7) = arr(i, 4) '数量
brr(n, 8) = arr(i, 5) '单位
brr(n, 9) = arr(i, 6) '空白
brr(n, 10) = arr(i, 7) '单价
brr(n, 11) = arr(i, 8) '应付金额
brr(n, 12) = arr(i, 9) '优惠金额
brr(n, 13) = arr(i, 10) '单品备注
brr(n, 14) = [D7].Value '整单备注
Next i
'将数组brr的数据保存到销售记录表
If MsgBox("是否保存当前销售单?", vbYesNo) = vbNo Then Exit Sub
LastR = Sheets("销售记录").Cells(Rows.Count, 1).End(xlUp).Row + 1
Sheets("销售记录").Range("A" & LastR).Resize(UBound(brr), 14) = brr
MsgBox "销售单:" & [L3].Value & "保存成功!"
'销售单序号+1
[M1] = Format(Now(), "yyyymmdd"): [N1] = [N1] + 1
Call 清空数据
Call 销售单编号
[D5] = ""
[D5].Activate
End Sub