質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

Q&A

解決済

1回答

2464閲覧

Excel VBA ENDプロパティーが使えません

tokumeiko

総合スコア2

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

0グッド

0クリップ

投稿2020/11/19 01:55

お世話になります。
こちら、エクセルVBA初心者です。
以下のコードは、アクセスVBAにて、
アクセスからエクセルにT日報テーブルを既存のエクセルファイルへ新規シートとして、
エクスポートし、一行目を削除した上で、
これを既存の貼付用シートの一番最後の行の一つ下の行に張り付けようとしています。
しかしながら、最終行を取得する処理にて、1004 アプリケーション定義またはオブジェクト定義のエラーです が出ます。
ENDプロパティーを外しますと、きちんと進みますが、一番最後の行の取得にはENDプロパティーはかかせません。
また、コピーの処理でも、.PasteSpecialの後の xlPasteValuesでひっかかります。
どうしたらよいのか、よろしくご教授ください。

ACCESS

1Public Function Startexec() 2 3Dim rs As Recordset 4Const xlMinimized = -4140 5Dim stpathname As String 6Dim stTbl As String 7Dim stvardir As String 8Dim stFilename As String 9Dim stSheet As String 10Dim stSheetQuery As String 11Dim Excel As Object 12Dim wb As Object 13Dim llastrow As Long 14 15 16 17 stSheet = "貼付用" 18 stpathname = "\ここにファイルのパスが入ります" 19 20 21 stFilename = "練習用.xlsm" 22 23 24 stvardir = stpathname & "\" & stFilename 'エクセルファイルを指定します。 25 26 27 stTbl = "T日報" 'Accessファイルを指定します。 28 29 DoCmd.TransferSpreadsheet acExport, _ 30 acSpreadsheetTypeExcel9, stTbl, stvardir, False 31 32 Set rs = CurrentDb.OpenRecordset(stTbl) 33 34 35 rs.MoveLast 36 37 stSheetQuery = "T日報" 38 39 Set Excel = CreateObject("Excel.Application") 'Excel 40 Excel.WindowState = xlMinimized '最小化 41 Excel.Visible = True '表示 42 Set wb = Excel.Workbooks.Open(stvardir) 'excelファイルを開く 43 wb.Sheets(stSheetQuery).Rows(1).Delete 'クエリシートの1行目削除 44 45 wb.Application.DisplayAlerts = False 'メッセージ非表示 46 47 llastrow = wb.Sheets(stSheetQuery).Cells(wb.Sheets(stSheetQuery).Rows.Count, 1).End(xlUp).Row 48 49 'ここで、1004 アプリケーション定義またはオブジェクト定義のエラーです が出ます。 50 51 52 wb.Sheets(stSheetQuery).Range("A1:W" & rs.RecordCount).Copy 'コピー 53 wb.Sheets(stSheet).Range("A" & llastrow).Offset(1, 0).PasteSpecial xlPasteValues 54 55 56 wb.Application.DisplayAlerts = True 'メッセージ再表示 57 58 Excel.DisplayAlerts = False '警告禁止 59 wb.Sheets(stSheetQuery).Delete 'クエリシート削除 60 Excel.DisplayAlerts = True '警告許可 61 wb.Close True '閉じる 62 Excel.Quit 'Excel終了 63 64 65 66 Exit Function 67

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

エクセルに参照設定されてないなら、xlUp というエクセルの定数は使えないので、数値で指定する必要があります。

vba

1' llastrow = wb.Sheets(stSheetQuery).Cells(wb.Sheets(stSheetQuery).Rows.Count, 1).End(xlUp).Row 2 3 llastrow = wb.Sheets(stSheetQuery).Cells(wb.Sheets(stSheetQuery).Rows.Count, 1).End(-4162).Row

数値はヘルプを調べると分かります。

xldirection 列挙 (Excel) | Microsoft Docs


参照設定をしておくとエクセルの定数が使えるだけでなく、コード入力時に選択リスト(インテリセンス)が使える、などいろいろメリットがあります。

Excelを起動する(オートメーション):Access VBA|即効テクニック|Excel VBAを学ぶならmoug

投稿2020/11/19 02:57

hatena19

総合スコア34075

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tokumeiko

2020/11/19 04:08

あああー!。そうですよね!。ツールの参照設定にチェック入れるのをすっかり忘れていました!。入れたらサクッと通りました。インクルードしなきゃ通るわけないですよね・・・・・・。
tokumeiko

2020/11/19 04:40

あ!。御礼も忘れてました。ご丁寧な回答、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問