2015-10-23 32 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