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

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

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

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

Q&A

3回答

418閲覧

VBAでの保存と閉じる方法についての質問です。

makino

総合スコア32

VBA

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

0グッド

0クリップ

投稿2017/11/19 14:46

編集2022/01/12 10:55

VBA初心者です。

下記コードを書き、実行したところ、
エクセルが開かなくなりました。

ただファイルを選択して何もせず、保存して閉じるの確認がしたかったのですが…
また、選んだエクセルを削除しようとしても、開いているので消せませんのエラーが出ます。

このコードのどこが問題なのでしょうか?

また、開いたシートに対して処理を行いたいのですが、
' 処理実行(一旦これはしない)
' Module1.Sample
と書いた場合、Sampleの先では、開いたファイルがActiveWorkbook.Worksheetsになるのでしょうか?

VBA

1Sub ボタン1_Click() 2 3 Dim OpenFileName As String 4 Dim fType As String 5 Dim wb As Workbook 6 7 ' 選択できるファイルの種類をxlsに限定(全ファイル指定はfType = "") 8 fType = "Microsoft Excelブック,*.xls?" 9 10 ' 選択画面の表示 11 OpenFileName = Application.GetOpenFilename(fType) 12 13 If OpenFileName = "False" Then 14 MsgBox "キャンセルされました" 15 Exit Sub 16 End If 17 18 Set wb = Workbooks.Open(OpenFileName) 19 Windows(wb.name).Visible = False 20 21 ' 処理実行(一旦これはしない) 22 ' Module1.Sample 23 24 wb.Save 25 wb.Close 26 27End Sub

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

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

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

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

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

guest

回答3

0

ブックが開けない件について

.Visible = Falseの状態でブックを保存しているので、Excelを終了させてブックを開きなおしてもこの状態が保存されてしまっており、見えないブックになっているものと思います。
保存前には.Visible = Trueに戻してあげれば解消されるのではないでしょうか。

また、ブックは「開いても見えない状態」になっているだけで、ちゃんと開けてはいると思います。
VBEditor画面のプロジェクトエクスプローラーのツリーには開けないはずのブックも見えているのではないでしょうか?

見えなくなってしまったブックに下記のようなマクロを作成して実行すれば、とりあえず見える状態に戻すこともできます。

Sub 見える化() Windows(ThisWorkbook.Name).Visible = True End Sub

ActiveWorkbookについて

ボタン1をクリックしたあと、何も触らずおとなしく眺めているのであれば、通常は最後に開いたブックActiveWorkbookとして参照されます。
しかし、目的のブックを開くのにちょっと時間がかかったりすると、ユーザーは別のブックを開こうとしたり、既存で開いてあった他のブックをアクティブにしたりしてしまうのが常です。

せっかくブックをオープンしたときにwbという名前の変数に格納しているのですから、Module1.sampleマクロにもこのwbを渡してあげて、対象ブックを明確にした処理にしたほうが確実だと思います。

参考になれば幸いです。

投稿2017/11/21 01:53

jawa

総合スコア3013

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

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

0

こちらの環境(Win7 32bit Office2010 32bit)で同様のコードを試してみましたが、
ファイルロックは再現できませんでした。

恐らく、Visible=Falseとしているので、
開発の途中で、開いたまま閉じずに終わった可能性が高いと考えられます。

タスクマネージャを開いてアプリケーションや、プロセスで調べてください。

また、他の関数にブックを渡したいのであれば、
Activeに頼らず、引数で渡すのが鉄則です。

投稿2017/11/20 07:56

ExcelVBAer

総合スコア1175

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

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

0

この行でExcelファイルを開いています。

Set wb = Workbooks.Open(OpenFileName)

次の行で、Excelを不可視状態に設定しています。

Windows(wb.name).Visible = False

上記のため、ファイルを開いているけど見えないといった状態になっているものと推測します。
対応としては、Rem Windows(wb.name).Visible = False等とコメントアウトすることが簡単かと思います。

どのシートが ActiveWorkbook.Worksheets となるかはすぐにはわかりませんが、開いたブックやシートに対してActivateを行わない限りは、ボタン1の配置されているシートが Active なのではないかと推測します。

投稿2017/11/19 21:55

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問