|
楼主 |
发表于 2019-8-21 16:24
|
显示全部楼层
首先,谢谢关注!
其次,我要解释一下,这个文件只是我的庞大工程的一个简单模拟。实际上,个别单个工作表列数达到40多列
1、窗体录入的必要性:工作表列数多,录入的同时需要前后检查核对,工作表中录入的话,左右拉动很费劲;
2、报告:原型大致是这样的:
1)先录入数据保存清单后,再手工填写到格式报告中(填写格式报告的时间可选)。
2) 生成报告:每次只需要生成1个订单号对应数据的报告,且是任意时间。
现在已经原型中实现的有:
a、打开工作界面→选择订单号(即ComBobox1下拉框)→界面中所有控件读取“记录表”中该订单号读取对应的数据→点击生成格式报告→写入报告模板→copy为新工作簿。
b、重复判断:点击生成报告→检索并判断记录表中(A列订单号+B列产品名称)是否存在ComoBox1和ComBobox2内的值。Yes→ 写入报告,NO→(写错,但不知错在哪里?)
3、报告编号的生成:订单号相同、产品名称相同的,报告编号相同。没想到实现的方法。
重复判断那里,与上传的附件中不同,重写了代码,但是会弹出出错提示,把“If Me.ComboBox1.Text = rng And......End If"这段注释掉,下面的运行正常。CommandButton1完整代码如下:
'对象变量和with块变量未设置
Dim arr, i%, Dim rng, ran
Application.DisplayAlerts = False
If Len(ComboBox1.Text) = 0 Then MsgBox "请输入订单号!", vbCritical, "提示": Exit Sub
If Len(ComboBox2.Text) = 0 Then MsgBox "请选择区域!", vbCritical, "提示": Exit Sub
Set rng = Sheets("销售记录").Columns(1).Find(ComboBox1.Text, lookat:=xlWhole)
Set ran = Sheets("销售记录").Columns(2).Find(ComboBox2.Text, lookat:=xlWhole)
If Me.ComboBox1.Text = rng And Me.ComboBox2.Text = rng.Offset(0, 1) Then'这个代码有问题
With Worksheets("报告")
.Cells(4, 2).Value = ComboBox1.Text
.Cells(4, 4).Value = ComboBox2.Text
.Cells(5, 2).Value = TextBox1.Text
.Cells(5, 4).Value = TextBox2.Text
.Cells(6, 2).Value = TextBox5.Text
.Cells(3, 3).Value = TextBox4.Text
.Cells(3, 7).Value = TextBox3.Text
MsgBox "报告生成完毕!", 64, "提示!"
End With
End If
If rng Is Nothing Or ran Is Nothing Then
If MsgBox("是否保存记录?", vbOKCancel) = vbOK Then
i = Sheets("销售记录").Range("A:G").Find("*", , , 1, 1, 2).Row
With Sheets("销售记录").Range("A" & i + 1)
.Offset(0, 0).Value = ComboBox1.Value
.Offset(0, 1).Value = ComboBox2.Value
.Offset(0, 2).Value = TextBox1.Value
.Offset(0, 3).Value = TextBox2.Value
.Offset(0, 4).Value = TextBox5.Value
.Offset(0, 5).Value = TextBox4.Value
.Offset(0, 6).Value = TextBox3.Value
With Worksheets("报告")
.Cells(4, 2).Value = ComboBox1.Text
.Cells(4, 4).Value = ComboBox2.Text
.Cells(5, 2).Value = TextBox1.Text
.Cells(5, 4).Value = TextBox2.Text
.Cells(6, 2).Value = TextBox5.Text
.Cells(3, 3).Value = TextBox4.Text
.Cells(3, 7).Value = TextBox3.Text
MsgBox "请查看记录和报告!", 64, "操作成功!"
End With
End With
Else
With Worksheets("报告")
.Cells(4, 2).Value = ComboBox1.Text
.Cells(4, 4).Value = ComboBox2.Text
.Cells(5, 2).Value = TextBox1.Text
.Cells(5, 4).Value = TextBox2.Text
.Cells(6, 2).Value = TextBox5.Text
.Cells(3, 3).Value = TextBox4.Text
.Cells(3, 7).Value = TextBox3.Text
MsgBox "请查看报告!", 64, "操作成功!"
End With
End If
End If
======================================================
当然,业务逻辑都还好改动,最头痛的是现在还不能实现自动报告编号,以前都人手编,要么重复,要么规则不符。
VBA我也是边用边学,请各位坛友、专家、老师不吝赐教!
|
|