尝试使用VBA在第二个工作簿中查找数据

时间:2016-02-16 15:02:44

标签: excel vba

我有一个工作簿,我正在构建一个自动电子邮件,但我希望该电子邮件包含存储在第二个工作簿中的数据。请参阅下面的代码,我确实更改了一些变量名称/数据只是为了保密,所以希望这不会让它太难阅读。

Option Explicit

Sub Button1_Click()
Dim objExcel As Object
Dim wb1 As Workbook
Dim ws1 as Worksheet

Set objExcel = CreateObject("Excel.Application")
Set wb1 = objExcel.Workbooks.Open(ThisWorkbook.Path & "\wb1.xls")
Set ws1 = wbStoreList.Worksheets("Sheet1")

Dim filePaths As Variant
Dim msg As String
Dim i As Integer

Dim objApp As Object
Dim objMail As Object
Dim fileName As String
Dim emailAddress As String
Dim subject As String
Dim name As String
Dim otherName As String
Dim rowNumber As Range

Set objApp = CreateObject("Outlook.Application")

filePaths = Application.GetOpenFilename(MultiSelect:=True)

If (IsArray(filePaths)) Then
    For i = LBound(filePaths) To UBound(filePaths)
        Set objMail = objApp.CreateItem(olMailItem)
        fileName = Dir(filePaths(i))
        If (Len(fileName) = 8) Then
            emailAddress = "email" & Mid(fileName, 1, 3) & "@emailaddress.ca"
        ElseIf (Len(fileName) = 9) Then
            emailAddress = "email" & Mid(fileName, 1, 4) & "@emailaddress.ca"
        End If
        subject = "Confidential"


        With ws1
            'On Error Resume Next
            Set rowNumber = .Range(.Cells(8, 1), .Cells(8, 10000)).Find(What:="311", LookIn:=xlValues).Row
        End With
        MsgBox rowNumber

dataFound:
        objMail.Recipients.Add emailAddress
        objMail.subject = subject
        objMail.Attachments.Add filePaths(i)
        objMail.Body = name & ", " & "(" & otherName & ")" & vbNewLine & vbNewLine & "Please see attached file."
        objMail.Display
    Next i
Else
    MsgBox "No files were selected"
End If
End Sub

错误出现在:

Set rowNumber = .Range(.Cells(8, 1), .Cells(8, 10000)).Find(What:="311", LookIn:=xlValues).Row

1 个答案:

答案 0 :(得分:0)

不确定是否可以直接获取行号,因为rowNumber是一个范围(根据您的dim语句)。试一试,把它分成两行:

Set rowNumber = .Range(.Cells(1, 8), .Cells(10000, 8)).Find(What:="311", LookIn:=xlValues)

然后

If Not rowNumber is Nothing then lngNumber = rowNumber.Row

请注意,我使用的是一个新类型的变量。

Dim lngRowNumber as Long

顺便说一下:在你的情况下,Integer实际上足以超过Long