• ベストアンサー

マクロの解読に困っています

マクロの仕事がきましたが、初めてで苦戦しています。 5冊くらい本を読みながら、今あるマクロの解読をしています。 しかし、次のErrShori:の意味がどうしてもわかりません。 わかる方がいらっしゃいましたらぜひ教えてください。 ErrShori: Open sFilename & ".csv" For Output Shared As #1 その前の文もつけておきます。 Sub Auto_Close() On Error GoTo ErrShori Dim MaxPage As Integer Dim sFilename As String Dim sFilename2 As String Dim i As Integer Dim j As Integer Dim sKensaku As String MaxPage = 0 Do MaxPage = MaxPage + 1 Loop Until Cells(MaxPage * 17 + 21, 1) = "" ChDrive "W" ChDir "W:\" sFilename = Range("O22") sFilename2 = sFilename & ".csv" Workbooks(sFilename2).Close SaveChanges:=False ErrShori: Open sFilename & ".csv" For Output Shared As #1 以上です。 質問の仕方が悪かったらすみません。

質問者が選んだベストアンサー

  • ベストアンサー
  • dsuekichi
  • ベストアンサー率64% (171/265)
回答No.2

> ErrShori: コレは「ラベル」と言う機能で、 「ラベル名」+":" で指定します。 そうすると、「Goto ステートメント」や「Gosub ステートメント」「Resume ステートメント」で、ジャンプ先として使用できます。 コードの先頭に、 > On Error GoTo ErrShori と、ありますね。 つまり、エラーが発生した場合、標準のエラーメッセージを表示せず、 ラベル「ErrShori」の部分にジャンプして実行が続行されます。

その他の回答 (3)

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.4

>ErrShori: は、ラベルです。 「On Error GoTo ErrShori」があるので、何らかのエラーが起きたら、指定の場所(ラベル)にジャンプしなさい。という意味です。 そして、ラベル以降に記載された処理を実行します。 ラベル前後に特別なトラップが無いので、エラーが無くても前の処理が終了した後にこのラベルの処理も実行されます。 >Open sFilename & ".csv" For Output Shared As #1 指定のファイルを共有モード(Shared)で開きなさい。と言う意味になります。

dengennao
質問者

お礼

わかりやすく説明していただき、ありがとうございました 助かりました!

  • FEX2053
  • ベストアンサー率37% (7991/21371)
回答No.3

#1です。書き忘れました。 Wドライブがネットワーク上のドライブなどの場合、ネットワークが 切断された場合でも、処理そのものは正常に終了できるように、 テンポラリのファイルとしてどこかにデータを書き出しておくという 処理を入れておくことは、プログラマの一種の「常識」です。 逆に言えば、Wドライブが「絶対に切断されない場所」にあって、 別に「切断時にエラーになっても業務上大した支障はない」ならば、 「On Error」と問題の2行は、なくても大丈夫な処理です。

dengennao
質問者

お礼

VBもやったことがないので、単語を索引で調べて…とやっているので、索引にないとお手上げになっていました。 回答ありがとうございました。

  • FEX2053
  • ベストアンサー率37% (7991/21371)
回答No.1

マクロの一部から切り出しているようで、何となく意味不明の部分も あるんですが、基本的にはWドライブ下に、今開いているブックを、 セルO22に書いてある名前で保存するという処理ですね。 で、問題の2行は「保存処理中にエラーが発生した場合、カレント ドライブに現在表示されているシートを、セルO22に指定された 名前+.csvという名前のテキストファイルとして保存する」という 処理です。 先頭2行目の「On Error」文が、「エラーが発生した場合の飛び先」 を記述しており、問題の1行目が「飛び先」の目印、2行目が実際の 「テキストファイルへの書き出し」処理を負っています。 Open以下は、エクセルではなく、ごく普通のVBのコードだと思えば 大体理解できると思いますけど。

関連するQ&A