2016-08-29 24 views
0

我有一個問題系統,用戶可以打開票並在其中輸入他們的評論。這些表是SQL鏈接表。訪問 - 對象變量或未設置塊

我試圖通過添加一個按鈕來實現自動獲取電子郵件的內容。

基本上,它將進入Outlook中的特定文件夾「Pendings」並獲取所有未標記爲「已複製」的電子郵件。

這是代碼。

Public Sub myinbox() 
Dim TempRst As DAO.Recordset 
Dim Olapp As Outlook.Application 
Dim Inbox As Outlook.MAPIFolder 
Dim InboxItems As Outlook.Items 
Dim Mailobject As Object 
Dim db As DAO.Database 
Dim Olfolder As Outlook.MAPIFolder 


'MsgBox "It will take some time. So, Hang On!" 

Set db = CurrentDb 

Set Olapp = CreateObject("Outlook.Application") 
Set Inbox = Olapp.GetNamespace("Mapi").GetFolderFromID("000000001A447390AA6611CD9BC800AA002FC45A03003683A021347CC54C82688B880BB383EC000000B95F710000") ' working folder ID 

' 
Set InboxItems = Inbox.Items 
Set TempRst = CurrentDb.OpenRecordset("working") ' Table 

For Each Mailobject In InboxItems 
    'If Mailobject.UnRead Then 
    If Mailobject.Categories <> "Copied" Then 

    With TempRst 

     .AddNew 

     !Title = Mailobject.Subject 
     ' !From = Mailobject.SenderName 
     ' !To = Mailobject.To 
     ' !Body = Mailobject.Body 
     !OpenedDate = Mailobject.ReceivedTime 
     '!email = Mailobject.SenderEmailAddress 
     !OpenedBy = "Group1" 
     !Priority = "(2) Normal" 
     !Status = "Pending" 
     .Update 
     Mailobject.Categories = "Copied" 
     Mailobject.Save 
     Mailobject.UnRead = False 


    End With 

End If 
Next 

Set Olapp = Nothing 
Set Inbox = Nothing 
Set InboxItems = Nothing 
Set Mailobject = Nothing 
Set TempRst = Nothing 

MsgBox "Emails updated successfully" 

End Sub 

上述代碼與本地表(我本地測試,而不鏈接到SQL)正常工作。但是,當我試圖運行與鏈接的SQL表相同的代碼。我收到此錯誤:

Error : "Object variable or with block not set"

在這一行:

Set TempRst = CurrentDb.OpenRecordset("working") 
+0

如果「working」是數據庫中的現有表,我很難想象這條線會如何拋出此錯誤。既然你指定了一個db變量,你應該使用'Set TempRst = db.OpenRecordset(「working」)',但這可能不會有所作爲。 – Andre

+0

P.S.這是實際的代碼,是否重現了問題?見[mcve] – Andre

+0

@Andre非常感謝您的回覆。 工作是數據庫中的表格。我有我的本地(不鏈接表)中的虛擬數據庫,上面的代碼工作正常。但是,當我在SQL鏈接表上運行相同的代碼時,該錯誤正在拋出。 我有「設置TempRst = db.OpenRecordset(」工作「),仍然得到相同的錯誤 – rocky09

回答

0

這應該工作:

Set TempRst = db.OpenRecordset("SELECT * FROM working WHERE <yourPkField> IS NULL", dbOpenDynaset, dbSeeChanges) 

您需要使用與SQL Server鏈接表dbSeeChanges。由於您只添加記錄,因此無需選擇任何現有記錄。因此,where子句。

+0

仍然會拋出同樣的錯誤,非常感謝您的回覆。 – rocky09

+0

請發表您的實際代碼並註明錯誤的確切位置。 – AVG

+0

我已經發布了實際的代碼,並在我的原始文章中提及了錯誤的確切位置,感謝您抽出寶貴時間對此進行調查 – rocky09

相關問題