C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: VBAでエクセルのシートを変更して保存したい


(過去ログ 177 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■101591 / inTopicNo.1)  VBAでエクセルのシートを変更して保存したい
  
□投稿者/ 一二三 (1回)-(2023/03/17(Fri) 17:23:43)

分類:[.NET 全般] 

掲題の通りなのですが、特定のフォルダ内にある、大量のEXCELファイルがあり、そのEXCELを開いた時に最初に開かれるシートがバラバラな状態です。
全て1番目のシートに変更したいのですが、どのようにすればよろしいでしょうか。
引用返信 編集キー/
■101594 / inTopicNo.2)  Re[1]: VBAでエクセルのシートを変更して保存したい
□投稿者/ 魔界の仮面弁士 (3595回)-(2023/03/17(Fri) 18:22:24)
No101591 (一二三 さん) に返信
> 掲題の通りなのですが、特定のフォルダ内にある、大量のEXCELファイルがあり、
> そのEXCELを開いた時に最初に開かれるシートがバラバラな状態です。
> 全て1番目のシートに変更したいのですが、どのようにすればよろしいでしょうか。

(案1) アクティブシートを手動で変更して上書き保存する運用にする。

(案2) ファイルを順次開いて、アクティブシートを変更して上書き保存していくプログラムを書く。

(案3) 元ファイルは更新せず、ファイルが開かれたとき(例:WorkbookOpen イベント)にて
 先頭シートをアクティブにするアドインを作成する。


今回は案2ですよね。
やりたいことは分かりましたが、肝心の「何が分からないのか」が書かれていない…。


・フォルダ内のファイルを列挙するには?
 → Dir 関数を使う。もしくは Directory オブジェクトの Files プロパティでも可。

・ファイルを開くには?
 → Application.Workbooks.Open メソッド。戻り値は Workbook 型の変数に Set すべし。

・第一シートをアクティブにするには?
 → 単純には「Workbook変数.Sheets(1).Activate」なのだけれど、一つ注意。
  第一シートが非表示になっている可能性があるので、実際は For ループで
  1 〜 .Sheets.Count まで列挙していき、そのシートの .Visible プロパティが
  最初に xlSheetVisible を指し示すものを Activate する必要がある。

・アクティブシートを変更した後、それを保存するには?
 → 上書き保存なら、基本的には「Workbook変数.Save」だけで OK 。
  別名で保存したいなら .SaveAs メソッド。

・保存時に確認メッセージを表示したくない
 → 「Application.DisplayAlerts = False」にしておけばメッセージが抑制される。
  処理が終わった後は True に戻しておくこと。

・保存が終わったブックを閉じるには?
 → 「Workbook変数.Close」で OK 。保存後、Workbook 変数には Nothing を Set しておきましょう。
  ちなみに、変更後に未保存で .Close する場合、「.Close True」や「.Close True, filePath」などとして
  保存と閉じる動作を同時に行わせることもできます。


今回の要件にはなかったですが、仮に第一シートを仮にアクティブにできたとしても、
アクティブセルの位置がブックによって違っている(スクロールされた場所になっている)
…という可能性はありそうですね。
引用返信 編集キー/
■101603 / inTopicNo.3)  Re[1]: VBAでエクセルのシートを変更して保存したい
□投稿者/ 大谷刑部 (233回)-(2023/03/20(Mon) 11:37:00)
No101591 (一二三 さん) に返信
> 掲題の通りなのですが、特定のフォルダ内にある、大量のEXCELファイルがあり、そのEXCELを開いた時に最初に開かれるシートがバラバラな状態です。
> 全て1番目のシートに変更したいのですが、どのようにすればよろしいでしょうか。

基本的に直前にセーブしたときにアクティブになってるシートが開かれるはずなので運用上、「1シート目を選択してセーブしてから閉じろ」
というのが守られてれば、VBAで制御しなくても必ず1シート目にはなるはずです。

そもそもその「大量」のファイルはプログラムで出力したものでしょうか?それとも手作業で特定のフォルダにコピーしたものでしょうか?

シートをSelectするか、Activateで狙いのシートを選択した状態でセーブして閉じたら次回開いた時はそのシートが選択された状態になるはずで、
当然それをVBAのコードで書くこと自体は可能ですが、開くというより、その前に閉じるときがどの状態であるかがキーです。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -