以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- Exception from HRESULT: 0x800A03EC 报错 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=190109) |
-- 作者:creastzh -- 发布时间:2024/1/17 12:45:00 -- Exception from HRESULT: 0x800A03EC 报错 老师, 今日不知道怎么回事,我此前编制的程序运行期间不断报错,报错信息如下: .NET Framework 版本:4.0.30319.42000 Foxtable 版本:2022.8.18.1 错误所在事件:自定义函数,Import_WeeklyMachining_Schedule 详细错误信息: Exception has been thrown by the target of an invocation. Exception from HRESULT: 0x800A03EC 检查程序应该没有异常, 程序清单如下: \'Import_WeeklyMachining_Schedule 导入 生产计划 Import_WeeklyMachineSchedule V2 通过字典 \'源数据"P:\\PMS\\Weekly producion Schedule\\Weekly production Schedule.xlsm" Dim TableN As String = "WeeklyMachineSchedule" Dim yn As Integer If Not DataTables.Contains(TableN) Then DataTables.Load(tablen) yn = 1 End if DataTables(TableN).LoadFilter = "" \' "Process_Completed = false" DataTables(TableN).Load \'DataTables(TableN).DeleteFor("WO not like \'%WO\'") Dim fp As String = "P:\\General documents\\Worktime Data\\Fox Data\\Query\\" Dim ff = "Weekly Machine Schdule.xlsx" Dim fpf As String = fp & ff Dim cg As Boolean = True Dim s1 As Date Dim s2 As Date Dim s3 As TimeSpan If filesys.FileExists(fpf) Then Tables(TableN).StopRedraw \'停止屏幕刷新 Dim cn As String \'列名称 Dim i As Integer Dim App As New MSExcel.Application App.DisplayAlerts = False App.visible = True Dim Wb As MSExcel.WorkBook = App.WorkBooks.Open(fpf) s1 = Date.Now Wb.RefreshAll Dim Ws As MSExcel.WorkSheet = Wb.WorkSheets(1) Dim Rs As Integer = Ws.Range("A15000").End(MSExcel.XlDirection.xlup).Row Dim Cs As Integer = 50 Dim Rg As MSExcel.Range = Ws.Range("A1") Rg = Rg.Resize(Rs, cs) \'Dim cs As Integer = Rg.Columns.Count Dim ary = Rg.value Dim c As Integer Dim bh As Boolean Dim Dic_Ext As New Dictionary(Of DataRow, Integer) Dim Dic_New As New Dictionary(Of DataRow, Integer) SystemReady = False \'停止所有其它程序 Dim i1 As Integer = 0 Dim Filter As String Dim d1 As New Dictionary(Of String, DataRow) \'预设WOp 入字典 For Each dr1 As DataRow In DataTables("WeeklyMachineSchedule").DataRows Dim wop As String = dr1("WO") & dr1("OP") If Not d1.ContainsKey(wop) Then d1.add(wop, dr1) Else dr1.Delete End If Next Dim zwo As String For i = 2 To Rs \'If ARY(i, 5) = "IWO89801/1" Then Output.Show("i=" & i & "; op:" & ary(i, 35) & " Filter:=" & "[WO] = \'" & ary(i, 5) & "\' and [OP] = " & ary(i, 35)) \'Filter = "[WO] = \'" & ary(i, 5) & "\' and [OP] = " & ary(i, 35) \'wop \'Dim dr As DataRow = DataTables(TableN).Find(Filter) Dim wop As String = ary(i, 5) & ary(i, 35) If Not d1.ContainsKey(wop) Then Dim dr As DataRow = DataTables("WeeklyMachineSchedule").AddNew \'新增数据行 i1 = i1 + 1 Dic_New.Add(dr, i) Else \'已经存在的数据行,须判断是否有修改,简化操作改为直接重写 bh = False \'初始值 Dim dr As DataRow = d1(wop) For c = 1 To cs\' cn = ary(1, c) \'列名 If dr(cn) <> ary(i, c) Then bh = True Exit For End If Next If bh = True Then If Dic_Ext.ContainsKey(dr) = False Then \'是否存在键 Dic_Ext.Add(dr, i) i1 = i1 + 1 End If End If End If If InStr(ary(i, 5), "Z") > 0 Then If zwo = "" Then zwo = ary(i, 5) Else zwo = zwo & "\',\'" & ary(i, 5) End If End If Next If Dic_New.Count > 0 Then For Each dr As DataRow In Dic_New.Keys i = Dic_New(dr) For c = 1 To cs cn = ary(1, c) If cn = "RequiredHours" OrElse cn = "Delay_Days" Then dr(cn) = Round2(ary(i, c), 2) ElseIf cn = "RM_RequiredQty" Then dr(cn) = Round2(ary(i, c), 1) Else dr(cn) = ary(i, c) End If Next dr("TaskDate") = Date.Today Next End If If Dic_Ext.Count > 0 Then For Each dr1a As DataRow In Dic_Ext.Keys i = Dic_Ext(dr1a) For c = 1 To cs cn = ary(1, c) If cn = "RequiredHours" OrElse cn = "Delay_Days" Then dr1a(cn) = Round2(ary(i, c), 2) ElseIf cn = "RM_RequiredQty" Then dr1a(cn) = Round2(ary(i, c), 1) Else dr1a(cn) = ary(i, c) End If Next Next End If \'删除不再存在的Z工单 If zwo > "" Then zwo = "(\'" & zwo & "\')" DataTables("WeeklyMachineSchedule").DeleteFor("wo like \'Z%\' and WO not in " & zwo) End If SystemReady = True App.quit End If Dim dt1 As DataTable = DataTables("Data") Dim dr1c As DataRow = DataTables("Data").Find("文件更新_文件名 = \'" & ff & "\'") Tables(TableN).ResumeRedraw \'屏幕恢复刷新 Tables(TableN).Sort = "PartNumber" Tables("Data").Sort = "文件更新_时间 Desc" s2 = Date.Now s3 = s2 - s1 Output.Show(s1 & " -- " & s2 & " Import_WeeklyMachining_Schedule 刷新 总计经过时间s:" & s3.TotalSeconds) dr1c("SpentTime") = Round2(s3.TotalSeconds, 2) dr1c("文件更新_文件名") = ff dr1c("文件更新_时间") = Date.Now dr1c.Save DataTables(TableN).Save If yn = 1 Then DataTables.Unload(TableN) [此贴子已经被作者于2024/1/17 12:51:25编辑过]
|
-- 作者:有点蓝 -- 发布时间:2024/1/17 13:26:00 -- 这种应该是execl文档进程没有全部关闭导致的错误。把vba的代码都放入try里面,保证vba可以正常退出,类似: Dim App As New MSExcel.Application try Dim Wb As MSExcel.Workbook = App.WorkBooks.open("d:\\test.xls") ……各种vba的处理 App.Quit Catch ex As Exception MessageBox.Show(ex.message) App.Quit End try |
-- 作者:creastzh -- 发布时间:2024/1/17 16:31:00 -- 按您的方式,运行正常了, 谢谢! |