[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『アプリケーション定義またはオブジェクト定義のエラーメッセージが表示されます』(こまったちゃん)
下記のVBAを作動すると、実行時エラーエラー1004「アプリケーション定義またはオブジェクト定義のエラーです」と表示され、Set dataTable = ThisWorkbook.Names("報告書一覧").RefersToRangeが黄色になります。いくら見直してもわかりません。VBA初心者です。ご教授お願い致します。
Sub 新規レコード転記()
Dim formSheet As Worksheet, dataTable As Range Dim newRecordRange As Range, i As Long Dim addressList()
'入力用のシートをセット Set formSheet = Sheets("報告書") '転記先の「社員テーブル」をセット Set dataTable = ThisWorkbook.Names("報告書一覧").RefersToRange
'転記したいセルの位置を配列に格納 addressList = Array("M7", "F13", "D13", "G5", "I5", "F7", "D19", "F19", "B5", "D16", "A25") '新規レコードの入力位置を取得 Set newRecordRange = dataTable.Rows(1).Offset(dataTable.Rows.Count) '配列に指定した順番でレコードの値を転記 For i = 0 To UBound(addressList) newRecordRange.Cells(1, i + 1).Value = formSheet.Range(addressList(i)).Value Next
End Sub
< 使用 Excel:Excel2013、使用 OS:Windows10 >
ThisWorkbook.Names("報告書一覧").RefersToRange は ThisWorkbook.Worksheets("報告書一覧").RefersToRange か? (ねむねむ) 2019/04/15(月) 13:55
また、”報告書一覧”が存在している場合、”報告書一覧”は定義された名前ですか?
それともテーブルですか?
どちらかわからない場合は、「名前の管理」画面で、名前の横に表示されるアイコンで確認できます。
参考:定義された名前とテーブルのアイコンの違いは、以下のサイトに画像があります。
https://hamachan4.exblog.jp/17408176/
(う) 2019/04/15(月) 16:01
すまない。 NamesをNameと勘違いしていた。 (ねむねむ) 2019/04/15(月) 13:55 は無視してくれ。 (ねむねむ) 2019/04/15(月) 16:14
報告書一覧という名前はブックに対して作成されているのかシートに対して作成されているのかどちらだろうか? もし、シートに対して作成されていて、そのシートが一番左端(Worksheets(1)でない場合)エラーになるようだ。
(ねむねむ) 2019/04/15(月) 16:31
もし、その場合は名前をブックに対して作成するか ThisWorkbook.Names("報告書一覧") を ThisWorkbook.Names("シート名!報告書一覧") としてみてくれ。 (ねむねむ) 2019/04/15(月) 16:32
おっと、カッコの位置が。 >そのシートが一番左端(Worksheets(1)でない場合)エラーになるようだ。 は そのシートが一番左端(Worksheets(1))でない場合エラーになるようだ。 で。
(ねむねむ) 2019/04/15(月) 16:38
(こまったちゃん) 2019/04/15(月) 17:25
>ThisWorkbook.Names("シート名!報告書一覧") とするのはシートに対して設定している場合。 ブックに対してして設定しているのであれば私の指摘は的外れということになる。 (ねむねむ) 2019/04/15(月) 17:27
ListObjects について調べてみてはいかがでしょうか。
なお、私はテーブルについて詳しくないので、ListObjectsで調べて分からない場合は、どなたかフォローをお願いします。
試してみたところ Set dataTable = Thisworkbook.worksheets(1).ListObjects("業務報告書").range 取得できましたが、これで正しいのかわかりません。。。。
(ワークシートは適当です。)
中途半端で、すみません。。。
(う) 2019/04/15(月) 17:40
↑は、Thisworkbookとは別のブックのシートですか
つまりThisworkbookがActiveでないとしたら、
これでは、だめですか?
ThisWorkbook.Activate Set DataTable = Range("報告書一覧")
(マナ) 2019/04/15(月) 21:14
(こまったちゃん) 2019/04/16(火) 09:27
「ワークシートは適当です」ともコメントしたのですが、テーブル「業務報告書」はworksheets(1)にあるのでしょうか?
worksheets(1)の部分は、テーブル「業務報告書」があるワークシートを指定してください、
また、マナさんのコメントで気づいたのですが、ワークシートを指定して範囲を取得するのであれば、ListObjectsは必要はなく、Rangeで十分だなと。。。。
Set dataTable = Thisworkbook.worksheets(1).Range("業務報告書")
※ワークシート(worksheets(1))は、テーブル「業務報告書」があるワークシートを指定してください。
ワークシート名を指定せずに、名前「業務報告書」のみで指定したいのであれば、マナさんの方法が良いかと思います。
マナさんの記述をよく見てください。
Namesは使用していません。
(う) 2019/04/16(火) 14:16
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.