我正在從Access 2010/Windows 7遷移到Access 2016/Windows 10.我從我的SQL Server數據庫將數據讀入Excel模板,保存完成的電子表格,然後郵件它通過CDO給各種各樣的收件人。這在Access 2010/Windows 7中運行良好。必須暫停Access 2016 VBA以避免Excel致命錯誤
但是在Access 2016/Windows 10中,我最初經常得到一個「Excel已停止工作」的消息;在保存電子表格之前,Access代碼在顯然隨機的地方停止了。如果我設置了一個斷點,並通過代碼一切正常工作。然後我發現,如果我將代碼暫停500毫秒(如下面的縮寫代碼所示),一切正常(但不會暫停100毫秒)。雖然它現在正在工作,但這不是一個非常令人滿意的解決方案;有更好的嗎?
Dim Temp_rs As New ADODB.Recordset
Set ObjXL = New Excel.Application
ObjXL.Visible = False
Set ObjWkb = ObjXL.Workbooks.Open("\\xxx.xxx.xxx\xxxxa\xx\xxxxxxxx\xxxxx\xxxxxxxx\Template.xlsm")
Set ObjSht = ObjWkb.Worksheets("Audit")
ObjSht.Activate
ObjSht.Unprotect ("xxxxxxxx")
'Quite a lot of reading data from various recordsets
mod_OpenMyRecordset Temp_rs, SomeRecordSet
ObjSht.Cells(6, 4) = "Toezegging" & Str(Temp_rs!tzNummer_i)
...etc etc etc
Sleep (500) 'Wait for 0.5 second (necessary for Windows 10!)
ObjSht.Cells(7, 1).Value = " " & SomeValue
ObjSht.Cells(8, 1).Value = " " & SomeValue
ObjSht.Cells(9, 1).Value = " " & SomeValue
ObjSht.PageSetup.RightFooter = "Pagina &P van &N"
ObjSht.EnableSelection = xlUnlockedCells
ObjWkb.Worksheets("Sheet1").Visible = True
ObjSht.Visible = xlSheetVeryHidden
ObjSht.Protect ("xxxxxxxx")
MyPath = "\\xxx.xxx.xxx\xxxxa\xx\xxxxxxxx\xxxxx\xxxxxxxx\xxxxxxxxx" & Trim(ObjSht.Cells(9, 1).Value) & ".xlsm"
ObjWkb.SaveAs MyPath
ObjWkb.Close
Set ObjSht = Nothing
Set ObjWkb = Nothing
ObjXL.Quit
Set ObjXL = Nothing
Dim objMessage As Object, objBodyPart As Object
Set objMessage = CreateObject("CDO.Message")
Set objBodyPart = objMessage.BodyPart
objBodyPart.Charset = "UTF-8"
Set MyObjMessage = CreateObject("CDO.Message")
objMessage.addAttachment MyPath
objMessage.From = SomeValue
objMessage.Subject = SomeValue
objMessage.To = SomeValue
objMessage.Textbody = SomeValue
objMessage.BCC = SomeValue
With objMessage
.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = pubMailServer
.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
.Configuration.Fields.Update
.Send
End With
創建一個範圍(或幾個),您在填寫數據,而不是調用'ObjSht.Cells()'很多倍。 – Gustav