2015-10-23 35 views
2

我一直在尋找這個特定問題的答案,但我似乎無法找到答案。我正在嘗試將我收到的多個基於Excel的列表作爲電子郵件附件進行組合。只是爲了給出一點上下文,這個宏已經工作了近兩年沒有錯誤,但我最近將它從運行Excel 2007的系統切換到運行Excel 2007的系統& Outlook 2007.通過Outlook VBA從Excel附件中查找LastRow

以下行是給我一個1004: Application-defined or object-defined error

LR = xlAtt.ActiveSheet.Range("A" & xlAtt.ActiveSheet.Rows.Count).End(xlUp).Row

上下文中的代碼是:

Private Sub ProcessAttachments(olFolder As Outlook.MAPIFolder) 

Dim xlApp As Object, xlAtt As Object 
Dim LR As Long 

Dim olItem As Outlook.MailItem 
Dim count As Integer 

Set xlApp = CreateObject("Excel.Application") 
xlApp.Visible = False 

For count = olFolder.Items.Count To 1 Step -1 
    Set olItem = olFolder.Items.Item(count) 

    If olItem.Class = olMail And olItem.Attachments.Count > 0 Then 
    'Omitted a few lines here that verify if the attachment is an Excel file 
    'and then saves it to a folder 
    Set xlAtt = xlApp.Workbooks.Open("pathToFile") 
    xlAtt.Activate 
    LR = xlAtt.ActiveSheet.Range("A" & xlAtt.ActiveSheet.Rows.Count).End(xlUp).Row 

'More VBA after 

以上僅僅是一個代碼片段,但希望提供足夠的上下文。

我試過測試每一條線給我一個錯誤,我已經能夠縮小到該行的.End(xlUp).Row部分。

任何幫助表示讚賞。

+2

它的工作原理,如果你使用'xlUp'枚舉'-4162',這是令人費解的我爲什麼它停止工作,因爲你仍然在使用XL2007並在代碼中將它綁定到XL。如果枚舉不起作用,那麼您打開的附件做了些什麼改變,可能會返回一個不同於您期望的「ActiveSheet」? –

+1

Scott,請將其置於答案中,以便我接受。使用枚舉工作!謝謝。 –

+0

我懷疑以前版本的Outlook有一個Excel庫的引用,但新的沒有。打開Outlook VB編輯器,點擊工具,然後點擊參考。在頂部附近,您應該在其左側有一個勾號框的「Microsoft Excel nn.0 Object Library」。 「nn.0」的值取決於版本。如果它不在最上面,請向下滾動到這個文件並勾選它。所有的Excel常量現在都可用。 –

回答

2

Outlook 2007不能識別Excel常量,而OL 2010不會。

而不是寫xlUpxlUp這是-4162的枚舉。

所以,你的代碼應該是這樣的:

LR = xlAtt.ActiveSheet.Range("A" & xlAtt.ActiveSheet.Rows.Count).End(-4162).Row 

要查找在Excel VBA中的任何常數任何枚舉,一旦VBE內,按F2打開對象瀏覽器,然後鍵入恆進框旁邊雙筒望遠鏡,然後單擊雙目。點擊搜索結果中的常量,底部的框將顯示枚舉。

或者,你可以一個常數變量設置爲枚舉和仍然使用xlUp在你的語法是:

Constant xlUp = -4162