

マクロ初心者です。
インデックスが有効範囲にありませんとエラーになりました。
Dim OpenFileName As string
Dim book1 As Workbook
Dim sheet1 As worksheet
sub 問題 ()
OpenFileName = GetOpenFileName(”エクセルファイル,*.*”)
If OpenFileName <>”False” Then
workbooks.Open OpenFileName
Else
msgbox ”キャンセルしました”
Exit sub
EndIf
Set book1 = Activeworkbook
Activesheet.Copy Before:=Thisworkbook.sheet(1)
workbooks(”book1”).Close SaveChanges:=False
Set sheet1 = Activesheet
ここまで作りました。
管理台帳を開き、
別ファイルにコピーし
管理台帳は閉じる、というところで、
実行するとエラーとなり、
デバッグをクリックしたら、管理台帳を閉じるコードが黄色くなります。
()の中の”を消してもダメでした。
配列数が大きい時と存在しない名前を指定した時になるとのことですが、、
Set〜のコードは、取得できていないのでしょうか?
No.2ベストアンサー
- 回答日時:
こんにちは
>Set〜のコードは、取得できていないのでしょうか?
ご提示のコードではbook1が変数(=ワークブック)として設定されており、
Set book1 = Activeworkbook
によって、Activeworkbookのオブジェクトが代入されています。
それなので、このブックを閉じるのであれば
book1.Close SaveChanges:=False
で良いはずです。
>ネットでは、workbook(book1).Close〜
>もしくはworkbook(”book1.xls”)など
workbooks(”book1.xls”).Closeは、”book1.xls”(=文字列)という名のブックを閉じる際に用いますし、workbooks(book1).Closeの場合は、book1が文字列変数等であると考えられます。
例えば
book1 = ”book1.xls”
workbooks(book1).Close
で、一行目と同じ意味になりますよね。
変数とその意味するところを理解して使い分けることが必要です。
というか、意味を決めているのはそのコードを作成している質問者様なのですが。
No.1
- 回答日時:
変数名を「book1」などとするから混乱するのですよ。
例えば「objBook」とすればイメージが掴みやすくなりませんか?
Dim objBook As Workbook
Set objBook = Activeworkbook
・・・
objBook.Close SaveChanges:=False
> カッコの中の書き方が人それぞれですが、
人それぞれではなく、カッコの中が何を表しているかによります。
◆ネットでは、workbook(book1).Close〜 '正しくは Workbooks ですよ
この場合 book1 は ワークブック名を表す文字列です。
Dim strBook As String
strBook = "管理台帳.xlsx"
・・・
Workbooks(strBook).Close.SaveChanges:=False
◆もしくはworkbook(”book1.xls”)など
これは上記の 変数を使わず、ダイレクトに文字列で指定したケースですね。
Workbooks("管理台帳.xlsx").Close.SaveChanges:=False
クローズするのは Workbook オブジェクトですから、
単体の Workbook オブジェクトを取得するいずれかの書き方をすれば良いのです。
【参考】
Workbook オブジェクト (Excel)
https://msdn.microsoft.com/ja-jp/library/office/ …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
worksheetFunctionクラスのVloo...
-
VBAからPDFファイルにパスワー...
-
AccessVBAで「dim dbs as datab...
-
VBA:オートシェイプの線の長...
-
エクセルのVBAの標準モジュール...
-
エクセル エラー438
-
「Columns("A:C")」の列文字を...
-
VBA オブジェクトが空かどうか...
-
エクセルマクロエラー「'Cells'...
-
コンパイルすると「メソッドま...
-
VBAでエクセルに入力された複数...
-
メモリ解放について(ASP)
-
<excel vba>selenium basicのWe...
-
VBでPDFファイルを編集する
-
VBScriptからDLL参照設定したい
-
Excel VBA オブジェクトマクロ ...
-
上下の位置揃えについて
-
マクロ初心者です。 インデック...
-
ExcelVBAのコントロールの種類...
-
どう増強すべきか
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
worksheetFunctionクラスのVloo...
-
「Columns("A:C")」の列文字を...
-
PowerPointVBAでスライドマスタ...
-
エクセルのVBAの標準モジュール...
-
Excelでフィルタをかけると警告...
-
実行時エラー 3265「要求された...
-
テキストボックス中の文字列の...
-
VBAからPDFファイルにパスワー...
-
VBAで既に開いている別アプリケ...
-
Excel VBAでIEにアクセスするプ...
-
オブジェクトが見つかりません
-
ExcelVBAでのNZ関数について
-
エクセルVBAでcode128のバー...
-
WordにOLEで埋め込んだExcelでW...
-
AccessVBAで「dim dbs as datab...
-
エクセルマクロエラー「'Cells'...
-
エクセル エラー438
-
[VBA]CDOメッセージ送信エラー
-
VBAで作成するメール(開封確認...
-
VBScriptでファイルの日時順(降...
おすすめ情報
ネットでは、workbook(book1).Close〜
もしくはworkbook(”book1.xls”)など
カッコの中の書き方が人それぞれですが、
それでも動いてるようですし、どれでもいいんでしょうか?