
Access VBA で VLookup を使いたいと思っていたのですが、
「メソッドまたはデータメンバが見つかりません。」とエラーになります。
箇条書きになりますが、行いたいことは以下のとおりです。
・「D:\0402\コメント.xlsx」を開き、最初のシート(sheet1)を選択する。
・sheet1の A列には検索対象の文字列が、B列にはそれに対するコメントが文字列で入っています。
・VLookup 関数を使用し、変数「vDir.Name」を検索値、sheet1全体が検索範囲、
B列の情報がほしいので、列は「2」、完全一致で取りたいので「False」としています。
・B列の返り値を変数「vComment」に代入します。
下記が書いたソースなのですが、「vComment = ~」を記述すると、
冒頭の「メソッドまたはデータメンバが見つかりません」とエラになってしまいます。
前後のプログラムの関係上、Accessのクエリの使用や、Excelをリンクテーブルにすることはできません。
解決方法がわかる方、助けていただけますでしょうか。
Access は 2010 になります。よろしくお願い致します。
'エクセルを開く
Dim oCommentXLS As Object
Dim oCommentXLSWorkbook As Object
Dim vFileCommentXLS As String
vFileCommentXLS = "D:\0402\コメント.xlsx"
Set oCommentXLS = CreateObject("Excel.Application")
Set oCommentXLSWorkbook = oCommentXLS.Workbooks.Open(vFileCommentXLS)
Dim oSheet As Object
Set oSheet = oCommentXLS.Worksheets(1)
Dim raCommentFind As Range
Dim vComment As String
Set raCommentFind = Cells.Find(What:=vDir.Name, LookIn:=xlValues, LookAt:=xlWhole)
If Not raCommentFind Is Nothing Then
Debug.Print "みつかりました。"
vComment = Application.WorksheetFunction.VLookup(vDir.Name, Range("A1:B1000"), 2, False)
Debug.Print vComment
Else
Debug.Print "見つかりませんでした"
End If
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
提示されたのは、どのような環境で記述されたものなのでしょうか。
> Dim raCommentFind As Range
がエラーになっていない?であれば、Excel は参照設定されているのでしょう。
参照設定しているのであれば、
> Dim oCommentXLS As Object
> Dim oCommentXLSWorkbook As Object
> Dim oSheet As Object
部分は、
Dim oCommentXLS As Excel.Application
Dim oCommentXLSWorkbook As Excel.Workbook
Dim oSheet As Excel.Worksheet
と記述しておけば、例えば、oSheet と記述した後に . を入力すると、候補が表示され便利です。
また、
> Set oCommentXLS = CreateObject("Excel.Application")
する必要はなく、
Set oCommentXLS = New Excel.Application
で事済みます。
また、Excel で良く使う Application は、oCommentXLS にあたるので
Application.WorksheetFunction
↓
oCommentXLS.WorksheetFunction
参照設定していないのであれば、xlValues xlWhole 等の Excel での定数は定義しておく必要があります。
また、Cells Range を記述する時には、誰の下で・・・を指定します。
Cells.Find( → oSheet.Cells.Find(
Range("A1 → oSheet.Range("A1
余談)
参照設定すれば Cells Range はそのまま記述しても動くようですが、
誰の下で・・・を指定しておいた方が良いかも
以下、Excel を参照設定してある環境で実行してみます。
Public Sub test1()
Dim oApp As Excel.Application
Set oApp = New Excel.Application
oApp.Visible = True
oApp.Workbooks.Add
oApp.Range("B2") = "ABCD" ' Range("B2") = "ABCD" でも同じ結果に
Set oApp = Nothing
End Sub
※ Application 直下に Range 記述しているので、アクティブブックのアクティブシートが隠れているようですが、
さて、以下での ★ は、どこに記述されるのでしょう
Public Sub test2()
Dim oApp1 As Excel.Application
Dim oApp2 As Excel.Application
Set oApp1 = New Excel.Application
Set oApp2 = New Excel.Application
oApp1.Visible = True
oApp2.Visible = True
oApp1.Workbooks.Add
oApp2.Workbooks.Add
oApp1.Range("B2") = "ABCD"
oApp2.Range("B2") = "abcd"
Range("C2") = "1234" ' ★
Set oApp1 = Nothing
Set oApp2 = Nothing
End Sub
Public Sub test3()
Dim oApp As Excel.Application
Set oApp = New Excel.Application
oApp.Visible = True
oApp.Workbooks.Add
oApp.Range("B2") = "ABCD"
Set oApp = Nothing
Set oApp = New Excel.Application
oApp.Visible = True
oApp.Workbooks.Add
oApp.Range("B2") = "abcd"
Range("C2") = "1234" ' ★
Set oApp = Nothing
End Sub
※ エラーになる場合もありますね。
エラーにならない時には、どちらも 1234 の左側は ABCD でしたね
(Vista + Access2007 にて)
No.1
- 回答日時:
Accessからなのだから、ライブラリ名を省略しちゃだめでしょう。
(参照設定はExcel2010だとMicrosoft Excel 14.0 Object Libraryかな)
>vComment = Application.WorksheetFunction.VLookup(vDir.Name, Range("A1:B1000"), 2, False)
vComment = Excel.Application.WorksheetFunction.VLookup(vDir.Name, Range("A1:B1000"), 2, False)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel VABについて 下記記述が...
-
フォートラン(fortran)のエラー...
-
43:syntax error at end of input
-
End Sub が必要です。
-
教えて下さい
-
特定のPCだけ動作しないVBAマク...
-
配列数式の解除
-
ExcelVBAでPDFを閉じるソース
-
UserForm1.Showでエラーになり...
-
String""から型'Double'への変...
-
wordを起動した際に特定のペー...
-
【エクセル】測定時間がバラバ...
-
【VBA】ワークブックを開く時に...
-
VBAでfunctionを利用しようとし...
-
エクセルに張り付けた写真のフ...
-
TERA TERMを隠す方法
-
メモ帳(テキストデータ)をExc...
-
エクセルのマクロでワードの任...
-
Excel マクロ VBA プロシー...
-
エクセルで特定の列が0表示の場...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
End Sub が必要です。
-
フォートランのエラーについて...
-
VBでエラー'ActiveX component ...
-
他クラスからForm1内コントロル...
-
対応する関数ヘッダーがありません
-
intel fortranのエラーで困って...
-
フォートラン(fortran)のエラー...
-
クラスに volatile は必要?
-
Excel VABについて 下記記述が...
-
Delphiでif文がうまく書けないです
-
ラズパイ上の、pythonのエラー...
-
Excel VBA: UserForm.Show で実...
-
コンパイルエラー
-
ISLispのsetq関数について教え...
-
C# IEnumerable が IEnumerable...
-
typedef による2重定義
-
構造体のポインタ参照
-
C2065: 'EnumDisplayDevices' :...
-
STL mapでアクセス違反
-
43:syntax error at end of input
おすすめ情報