简体   繁体   中英

Trying to find data in a second workbook using VBA

I have a workbook where I am building an automated e-mail but I want that e-mail to contain data that is stored in a second workbook. Please see my code below, I did change some variable names/data just for confidentiality so hopefully that doesn't make it too difficult to read.

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

The error is on the line with:

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

Not sure if you can directly get the row number like that because rowNumber is a Range (according to your dim statement). Give it a try and break it down into two lines:

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

and then

If Not rowNumber is Nothing then lngNumber = rowNumber.Row

Note that I am using a new variable which should be of type long.

Dim lngRowNumber as Long

By the way: in your case Integer would actually suffice over Long .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM