|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
刚学习excel数据库方面的知识,卡在这里三天了。大致情况:
1、出问题的代码部分如下。
2、程序运行时,红色字体会卡住。
3、卡住的原因是:
---序号的样式很多,有纯数字的、有数字和字母的、还有混合文本的。
---前几十条都是数字样式的序号,字段数据类型默认成数值了,导致出现文本型的就报错。、
4、不方便修改原来的数据库,那个excel文件的使用者养不成定义成文本的习惯。
请问如何通过优化代码,解决此问题,谢谢!
StrPath = ThisWorkbook.Path & Application.PathSeparator
MyFile = Dir(StrPath & "*.xlsx")
Do While MyFile <> ""
If InStr(1, MyFile, "手糊工序日计划计件", vbTextCompare) >= 1 Then
'******************************************
'******************************************
'手糊工序
'******************************************
'******************************************
Select Case Application.Version * 1 '设置连接字符串,根据版本创建连接
Case Is <= 11
conn.Open "Provider=Microsoft.Jet.Oledb.4.0;Extended Properties=excel 8.0;Data source=" & StrPath & MyFile
Case Is >= 12
conn.Open "Provider=Microsoft.Ace.OLEDB.12.0;Extended properties='Excel 12.0;Hdr=yes;IMEX=1';data source=" & StrPath & MyFile
End Select
rst.Open "select * from [" & ShtName1 & "$A4:Z10000] as a where a.排产_数量 is not null and a.项目名称 is not null", conn, adOpenKeyset, adLockOptimistic
For x = 1 To rst.RecordCount '循环所有记录
'如果数量是空或者0、项目名称是空,则跳过
'If rst.EOF = True Then Exit For
If rst.Fields("排产_数量") = 0 Or rst.Fields("排产_数量") = "" Or rst.Fields("项目名称") = "" Then GoTo Flag1
'If Arr1(6, x) = 0 Or Arr1(6, x) = "" Or Arr1(3, x) = "" Then GoTo Flag1
'数据库里的作业者姓名全部赋值
If rst.Fields("F1") = "" Then
rst.MovePrevious
Strworkman = rst.Fields("F1")
rst.MoveNext
rst.Fields("F1") = Strworkman
End If
'检查作业人员是否在中班名单里
Int_flag = 0
Set shtSZ = WBru.Worksheets("设置")
For j = 2 To shtSZ.[A1000].End(xlUp).Row
If Strworkman = shtSZ.Cells(j, 1) Then
Int_flag = Int_flag + 1
Exit For
End If
Next j
'只处理状态里包含“起模打蜡”的数据
If (InStr(1, rst.Fields("状态"), "起模打蜡", vbTextCompare) >= 1) Then
'如果不是中班人员的,导入到今天入库计划
If Int_flag = 0 Then
Set RNG = sht.[A999999].End(xlUp)
RNG.Offset(1, 0) = "手糊工序"
RNG.Offset(1, 0).Interior.ThemeColor = xlThemeColorAccent4
RNG.Offset(1, 1) = rst.Fields("项目名称")
RNG.Offset(1, 2) = rst.Fields("产品品号")
RNG.Offset(1, 3) = rst.Fields("产品名称")
RNG.Offset(1, 4) = rst.Fields("排产_数量")
RNG.Offset(1, 6) = rst.Fields("序号")
RNG.Offset(1, 7) = rst.Fields("状态")
Else
'如果是中班人员的,导入到明天入库计划
Set RNG = sht1.[A999999].End(xlUp)
RNG.Offset(1, 0) = "手糊工序"
RNG.Offset(1, 0).Interior.ThemeColor = xlThemeColorAccent4
RNG.Offset(1, 1) = rst.Fields("项目名称")
RNG.Offset(1, 2) = rst.Fields("产品品号")
RNG.Offset(1, 3) = rst.Fields("产品名称")
RNG.Offset(1, 4) = rst.Fields("排产_数量")
RNG.Offset(1, 6) = rst.Fields("序号")
RNG.Offset(1, 7) = rst.Fields("状态")
End If
End If
rst.MoveNext
Flag1:
Next x
rst.Close
conn.Close
Set rst = Nothing
Set conn = Nothing
|
|