Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : Excel 2016)
入力訂正の機会を与えた上で
投稿日時: 20/03/23 15:24:22
投稿者: Yoasn_3218

(先にコード開示なく質問。しばらく自力で考えるとしましたが)
以下、質問用に作成した疑似コードで質問させて頂きます。
 
レポート表に入力し、それを名前を付けて保存。
保存しますか?でいいえの場合に、入力内容を訂正する機会を与え、訂正後に名前をつけて保存させる。
その際にキャンセルしたという記録ファイルを残す。という意図です。
 
Sub レポート提出()
 
Dim Savefilename As String 
 
Savefilename=Application.GetSaveAsFilename(Initialfilename:="個別Report”,_
FileFilter:="Excel File(*.xlsx),*xlsx")  ’名前を付けて保存のファイル名を既定 
 
’ 保存を拒否した場合のIf構文
If Savefilename<>"False" Then  ’ 名前をつけて保存
ActiveWorkbook.SaveAs Savefilename,FileFormat:=xlOpenXMLWorkbook,CreateBackup:=False
 
Else
Dim ans As Integer
 
ans=Msgbox("訂正しますか?”,VbYesNo,"入力訂正”)
 
Select Case ans
  Case vbYes   ’ 以下、不完全。 質問事項1:いいえの場合に入力を訂正、その後保存したい(手動?マクロ終了?)
 
 
 Case vbNo
  MsgBox" レポート中止。キャンセル記録を残します”
   Sheets("Report").Range("A1")="Cancel"  ’いいえ、訂正しない時 A1にキャンセルと入力
  ActiveWorkbook.SaveAs Filename=”キャンセル.xlsx",Fileformat:=xlOpenXMLWorkbook,_
  CreateBackup:=False  ’キャンセル記録のためのファイルを保存
 
End Select
 
 
End If   ’  質問事項2:Select と If のend はこれで良いのか。各使用法が誤っている?
 
MsgBox" Excelを終了します"   ’Excelを閉じて終了
Application.Quit
 
End Sub
 
 
入力訂正にはそこでマクロ処理を中断(終了?)、そこからは手動で名前をつけて..しか方法ない?
何かトリガー(イベント?)でマクロ処理再開できないか?等々。
何かとんでもない勘違い、コード文法間違いをしているように思います。
 
よろしくお願いします。
 
 

回答
投稿日時: 20/03/23 16:58:25
投稿者: WinArrow
投稿者のウェブサイトに移動

先に
>質問事項2:Select と If のend はこれで良いのか。各使用法が誤っている?
 の方から・・回答
  
インデントを付ければ、ストーリ(構造)が見えています。
  
本題の方
まず、QUITはやめましょう。
 
 このプロシジャは、どのように起動しているのかしら?
修正する場合は、「新しいブック」のまま、メモリに残っていますよね?
このまま、マクロを終了すればよいでしょう。(QUITはなし)
修正後、同じ、マクロを実行すればよいのでは?
 
 
>キャンセル.xlsx
別のファイル保存は、無駄・・と思います。

回答
投稿日時: 20/03/24 09:48:58
投稿者: mattuwan44

ネガティブな意見ですみません。
 
ダイアログボックスをわざわざ出したところで、
操作者は、「終わった」と思っているので再度確認するとは思えません。
 
つまりマクロ化する意味が薄いと感じました。

回答
投稿日時: 20/03/24 14:48:37
投稿者: WinArrow
投稿者のウェブサイトに移動

mattuwan44 さんの引用:
ネガティブな意見ですみません。
 
ダイアログボックスをわざわざ出したところで、
操作者は、「終わった」と思っているので再度確認するとは思えません。
 
つまりマクロ化する意味が薄いと感じました。

 
なるほど…そうですね・・・
 
このマクロをどのように起動するのか
よくわかりません(なにかのイベントを捉えて、自動で起動するなんて考えにくい)が、
ボタンを用意してクリックさせる方法と「名前を付けて保存」をクリックする方法と
大差ないと思います。
マクロ化する目的もよくわからないですね?
 
マクロ終了と同時に消えていまうようなマクロの操作支援は、まったく迷惑な話です。
そのために、「キャンセル.xlsx」で保存することを考えたと思いますが、本末転倒です。
 
 

投稿日時: 20/03/25 10:20:03
投稿者: Yoasn_3218

そもそもマクロ化する必要があるのか?実は私も思っていたこと。
 
裏をお話しすれば
 
ルールを定めても全く守らない、倫理観に欠けたような人がいるので強制的に決めてしまえ
的な発想、何でもペーパーレス、電子化すべしの気運からも取り組み始めたことです。
自動で保存ファイル名形式とか、管理番号などを発行、保存フォルダも定めてしまう..とか。
 
 
お察し頂いているように、運用している正コードでは、起動ボタンをワンクリックさせて
これら等が自動完結するようにさせているものです。
 
今回の質問内容に対して「本末転倒」のご意見、もっともだと思いました。
 
 
>このプロシジャは、どのように起動しているのかしら?
>修正する場合は、「新しいブック」のまま、メモリに残っていますよね?
>このまま、マクロを終了すればよいでしょう
 
GetSave..の段階で新しいブックができている、ということですね。
それを利用すればマクロ終了しても構わない、の方向で考え直してみます。
 
 
>つまりマクロ化する意味が薄いと感じました。
 
最初はダイアログなんて無しで終了させていました。
「ダイアログ表示もないのは不親切だ」という外野が出てきたので、では入れてやる
くらいの気持ちからでした。 
 
 
無駄、無意味なことは行わない、という視点からも再考してみます。
ご意見、ご指導どうもありがとうございました。