2

2 つのブック間で一致検索を実行して、Wbook1 に入力された名前が Wbook2 の列 A にあるかどうかを確認しようとしています。たとえば... workbook1 のセル D4 に "name1" があります... 次に、マクロで workbook2 の列 A を検索して、"name1" の場所を見つけます。workbook2 に名前が存在しないことを心配する必要はありません。名前は常に存在するはずです。

Excel 2007 を使用すると、コードは次のようになります。

Sub ViewData()
    Dim xlo As New Excel.Application
    Dim xlw As New Excel.Workbook
    Dim xlz As String
    Dim result As Double
    Dim SalesExec As String
    SalesExec = Range("d4").Value 'D4 contains the name from workbook1 I want to search for
    xlz = Range("y1").value  'This cell contains the file path for workbook 2
    Set xlw = xlo.Workbooks.Open(xlz) 'Path is correct as the desired workbook does open
    result = Application.WorksheetFunction.Match(SalesExec, xlo.Worksheets("Data").Range("A:A"), 0) 'Data is the sheet in workbook2 containing the list of names
    Range("Q14").value = result
    xlw.Save
    xlw.Close
    Set xlo = Nothing
    Set xlw = Nothing
End Sub

.WorksheetFunction を削除すると、「オブジェクトまたはアプリケーション定義のエラー」が発生します。コードの状態では、「worksheetfunction クラスの一致プロパティを取得できません」というエラーが表示されますが、その理由はわかりません。

どんな助けでも大歓迎です。ありがとう!

4

1 に答える 1

2

これを試して。コードを理解する上で問題に直面しないように、コードにコメントを付けました。

Sub ViewData()
    Dim xlo As New Excel.Application
    Dim xlw As New Excel.Workbook
    Dim xlz As String
    Dim result As Double
    Dim LRow As Long
    Dim SalesExec As String

    SalesExec = Range("d4").Value

    xlz = Range("y1").Value

    Set xlw = xlo.Workbooks.Open(xlz)

    With xlw.Worksheets("Sheet1")
        '~~> Find the last row cause Range("A:A") in match will give error
        LRow = .Range("A" & .Rows.Count).End(xlUp).Row
    End With

    xlo.Visible = True

    '~~> Result is double so ensure that whatever you are trying to find is as Double
    '~~> Also It should be xlw.Worksheets("Data") and not xlo.Worksheets("Data")
    result = Application.WorksheetFunction.Match(SalesExec, xlw.Worksheets("Data").Range("A1:A" & LRow), 0)

    Range("Q14").Value = result
    xlw.Save
    xlw.Close
    Set xlo = Nothing
    Set xlw = Nothing
End Sub
于 2013-04-19T10:38:38.813 に答える