2017-10-11 11 views
0

多くのプロセスを自動化する一連のマクロがあります。私はこれをExcelアドインを介して私の同僚に配布したいと思います。私はちょうど正しいとは思わない1つのコードを持っています。ここでExcel VBA:ユーザーに.xlsmとして保存させる

は(正常に動作します)「マスター」のコードです:

Option Explicit 

Sub MIUL_Run_All() 

Dim StartTime As Double 
Dim SecondsElapsed As String 

'Remember time when macro starts 
StartTime = Timer 

Call OptimizeCode_Begin 

Call Save_As 
Call Format_MIUL 
Call Custom_Sort_MIUL 
Call Insert_Process_List 
Call Format_Process_List 

Call OptimizeCode_End 

'Determine how many seconds code took to run 
SecondsElapsed = Format((Timer - StartTime)/86400, "ss") 

'Notify user in seconds 
MsgBox "This code ran successfully in " & SecondsElapsed & " seconds", 
vbInformation 

End Sub 

私に迷惑を与えているコードは「Save_As」です。ユーザーが最初にやりたいことは、ファイルをマクロ対応ファイルとして保存することです。理想的には、私は、コードがユーザーのためにこれらの事をしたい:

  1. フォース彼らはすでににファイル名を持っているので、.xlsm
  2. として保存するユーザーがダイアログボックスとして保存して、現在のファイル名を指定してくださいと連携。
  3. CANCELボタンを押すと、マクロ全体が停止する必要があります。

これはかなり些細なことだと思っていましたが、これまでのところ私のコードの中で最も難しい部分でした。

​​

このコードは非常にシンプルですが、それはキャンセルボタンに対応していません。ここで

は、私がSave_Asコードを試してみましたものです。

Dim userResponse As Boolean 

On Error Resume Next 
userResponse = Application.Dialogs(xlDialogSaveAs).Show(52) 
On Error GoTo 0 
If userResponse = False Then 
Exit Sub 
Else 
End If 

これもやはりキャンセルボタンには対応していません。

私はおそらく上記のコードに似ている半ダースのものを試しました。

何か助けていただければ幸いです。

+0

userResponse = Application.Dialogs(xlDialogSaveAs).SHOW(52)とたダイアログボックスが表示されます52.xlsxをファイル名として使用します。ダイアログボックスの最初の引数はファイル名です。 52を2番目の引数として使用すると、XLSMファイルタイプが強制的に実行されます。私はあなたのコードを実行し、それは完全に働いた。エラーラインが必要かどうかはわかりません。 – mooseman

+0

@mooseman問題は、次のコードがその特定のSubを終了し、 "Call Format_MIUL"という次のコードに移動するときに実行を開始することです。どうすればコード全体から壊れるのですか? – CC268

+0

あなたはこのサブを別のものから呼び、キャンセルが選択されたときにすべてのコードを停止したいとお考えですか?それは全体的なデザインになります。グローバル変数を設定し、userResponse = Falseの場合に設定します。 – mooseman

答えて

0

あなたは、この持っている:単純な状態を認識し、エラーを考慮していない

If FileDialog.Show = False Then 
    Exit Sub 
End If 

を。エラーがある場合にのみExit Subを実行することをお勧めします。


このエラー処理は、置き換えることによって実施することができる:

On Error Resume Next 
userResponse = Application.Dialogs(xlDialogSaveAs).Show(52) 
On Error GoTo 0 
If userResponse = False Then 
    Exit Sub 
Else 
End If 

付:

On Error GoTo Cat 
userResponse = Application.Dialogs(xlDialogSaveAs).Show(52) 

Cat: 
    Exit Sub 
+0

私はちょっと混乱しています。あなたは私のOPに2番目のコードを記述して最初のコードを実装すると言っていますか? – CC268

+0

@ CC268申し訳ありません。私は、(投稿されたコードから)userResponseがExit Subをトリガーした後に何が起こったとしても、トリガーされたエラーが発生していると言っていました。これは、ファイルダイアログが表示された後にIf文が必要ないことを意味します。あなたが書いたように(私が私の答えの最初の部分に到達しようとしていた)If文は、コードの残りの部分と順番に並んでいて、エラーが発生しても起こっていませんでした。 – Cyril

+0

@ CC268もっと分かりやすいように投稿を更新しました。 – Cyril

関連する問題