工作表中插入了一些可供选择的ActiveX控件,想在关闭工作簿之前提示是否将信息录入到汇总表中。但程序运行后sheet2工作表会变成sheet21,sheet2变成了Activex部件,后续运行sheet2后面都会增加个1。运行几次后:
选择sheet2111工程后是这样的:
代码:
Option Explicit
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim response
response = MsgBox("是否将修改的文件保存并同步到到委托信息统计表中?", vbYesNoCancel)
If response = vbYes Then
Dim wb, sht, wb1, sht1, arr, currentPath As String, parentPath As String, x As String, y As String, r As Long, _
strkey As String, myrange, myrow, trow As Long, i As Integer
Set wb = ActiveWorkbook
Set sht = wb.Sheets("检测委托书")
ReDim arr(1 To 22)
With sht
arr(1) = .Range("B2")
arr(2) = .Range("F2")
arr(3) = .Range("C3")
arr(4) = .Range("C4")
arr(5) = .Range("C9")
If .OptionButton1 = True Then arr(6) = "委托检测"
If .OptionButton2 = True Then arr(6) = "比对检测"
If .OptionButton3 = True Then arr(6) = "复检"
If .OptionButton4 = True Then arr(6) = "体系认证"
If .OptionButton5 = True Then arr(6) = "环评"
If .OptionButton6 = True Then arr(6) = .Range("J6")
If .CheckBox1 = True Then arr(7) = "技术说明书 "
If .CheckBox2 = True Then arr(7) = arr(7) & "企业标准 "
If .CheckBox3 = True Then arr(7) = arr(7) & .Range("H7")
If .CheckBox4 = True Then arr(8) = "采样检测 "
If .CheckBox5 = True Then arr(8) = arr(8) & "现场检测 "
If .CheckBox6 = True Then arr(8) = arr(8) & .Range("I8")
arr(9) = "采样"
arr(10) = "/"
arr(11) = "/"
arr(12) = "/"
arr(13) = "/"
arr(14) = "/"
arr(15) = .Range("G9")
If .OptionButton7 = True Then arr(16) = "每个样品出一份"
If .OptionButton8 = True Then arr(16) = "每个委托单出一份"
If .CheckBox7 = True Then arr(17) = "附采样点照片 "
If .CheckBox8 = True Then arr(17) = arr(17) & "附点位图 "
If .CheckBox9 = True Then arr(17) = arr(17) & "报告副本 "
If .CheckBox10 = True Then arr(17) = arr(17) & "附限值"
If .OptionButton9 = True Then arr(18) = "否"
If .OptionButton10 = True Then arr(18) = "是"
If .OptionButton11 = True Then arr(19) = "否"
If .OptionButton12 = True Then arr(19) = "是"
If .CheckBox11 = True Then arr(20) = "自取 "
If .CheckBox12 = True Then arr(20) = arr(20) & "邮寄 "
If .CheckBox13 = True Then arr(20) = arr(20) & "电传 "
If .CheckBox14 = True Then arr(20) = arr(20) & .Range("H14")
arr(21) = .Range("D15")
arr(22) = .Range("B17")
End With
currentPath = wb.Path
parentPath = Left(currentPath, InStrRev(currentPath, "\"))
x = "20" & Mid(sht.Range("B2"), 3, 4) & "委托信息统计表.xlsx"
y = sht.Range("K2")
Workbooks.Open (parentPath & x)
Set wb1 = ActiveWorkbook
Set sht1 = wb1.Sheets(y)
trow = sht1.Cells(Rows.Count, 2).End(xlUp).Row
strkey = sht.Range("B2")
Set myrange = sht1.Range("B2:B" & trow).Find(what:=strkey, lookat:=xlWhole)
If myrange Is Nothing Then
r = trow + 1
Else
r = myrange.Row
End If
For i = 2 To 23
sht1.Cells(r, i) = arr(i - 1)
Next i
wb1.Save
wb1.Close
Set sht = Nothing
Set sht1 = Nothing
Set wb = Nothing
Set wb1 = Nothing
Set myrange = Nothing
Else
Cancel = True
End If
End Sub
程序运行正常。