VBにすべてのXLSMファイルをXLSXとして保存するコードがあります。これを行うコードは既にありますが、すべてのアクションでダイアログボックスが表示されます。しかし、私は一度に何百ものXLSMファイルでこれを使用するつもりであり、ダイアログボックスを何度もクリックするだけで終日コンピュータに座ることはできません。
私が試したコードはほとんどです:
Application.DisplayAlerts = False
これによりエラーは発生しませんが、機能しません。
ボックスには、マクロを有効にすることに関する警告が表示され、XLSXとして保存するとすべてのマクロのファイルが削除されることも警告されます。警告の種類を考慮すると、セキュリティリスクのために、これらのダイアログボックスをオフにすることを制限していると思われます。
ExcelのVBエディターでこのコードを実行しているので、デバッグ用にダイアログボックスを無効にできるオプションがありますか?
私も試しました:
Application.DisplayAlerts = False
Application.EnableEvents = False
' applied code
Application.DisableAlerts = True
Application.EnableEvents = True
どちらも機能しませんでした。
編集:
現在のコードでは、上記のコードは次のようになります。
Public Sub example()
Application.DisplayAlerts = False
Application.EnableEvents = False
For Each element In sArray
XLSMToXLSX(element)
Next element
Application.DisplayAlerts = False
Application.EnableEvents = False
End Sub
Sub XLSMToXLSX(ByVal file As String)
Do While WorkFile <> ""
If Right(WorkFile, 4) <> "xlsx" Then
Workbooks.Open Filename:=myPath & WorkFile
Application.DisplayAlerts = False
Application.EnableEvents = False
ActiveWorkbook.SaveAs Filename:= _
modifiedFileName, FileFormat:= _
xlOpenXMLWorkbook, CreateBackup:=False
Application.DisplayAlerts = True
Application.EnableEvents = True
ActiveWorkbook.Close
End If
WorkFile = Dir()
Loop
End Sub
ActiveWorkbook.SaveAs
行ではなく、For
ループも囲みました。
Public Sub example()
For Each element In sArray
XLSMToXLSX(element)
Next element
End Sub
最後に、Application.DisplayAlerts
をWorkbooks.Open
行の上に移動しました:
Sub XLSMToXLSX(ByVal file As String)
Do While WorkFile <> ""
If Right(WorkFile, 4) <> "xlsx" Then
Workbooks.Open Filename:=myPath & WorkFile
Application.DisplayAlerts = False
Application.EnableEvents = False
ActiveWorkbook.SaveAs Filename:= _
modifiedFileName, FileFormat:= _
xlOpenXMLWorkbook, CreateBackup:=False
Application.DisplayAlerts = True
Application.EnableEvents = True
ActiveWorkbook.Close
End If
WorkFile = Dir()
Loop
End Sub
これらも機能しません。
編集:
Excel 2011 for Mac 2011を使用しています(それが役立つ場合)。
SaveAsメソッドでConflictResolution:= xlLocalSessionChangesパラメーターを使用しようとしましたか?
そのように:
Public Sub example()
Application.DisplayAlerts = False
Application.EnableEvents = False
For Each element In sArray
XLSMToXLSX(element)
Next element
Application.DisplayAlerts = False
Application.EnableEvents = False
End Sub
Sub XLSMToXLSX(ByVal file As String)
Do While WorkFile <> ""
If Right(WorkFile, 4) <> "xlsx" Then
Workbooks.Open Filename:=myPath & WorkFile
Application.DisplayAlerts = False
Application.EnableEvents = False
ActiveWorkbook.SaveAs Filename:= _
modifiedFileName, FileFormat:= _
xlOpenXMLWorkbook, CreateBackup:=False, _
ConflictResolution:=xlLocalSessionChanges
Application.DisplayAlerts = True
Application.EnableEvents = True
ActiveWorkbook.Close
End If
WorkFile = Dir()
Loop
End Sub
Access VBAでは、これを使用して、一連の更新を実行するときにすべてのダイアログをオフにしました。
DoCmd.SetWarnings False
すべての更新を実行した後、VBAスクリプトの最後の手順は次のとおりです。
DoCmd.SetWarnings True
お役に立てれば。
自動化ユーティリティを使用することでメリットが得られるようです。 Windows PCを使用している場合、 AutoHotkey をお勧めします。 Macで自動化ユーティリティを使用したことはありませんが、 このAsk Askの投稿 にはいくつかの提案がありますが、無料のものはありません。
これはVBAソリューションではありません。これらのマクロはExcelの外部で実行され、キーボードストローク、マウスの動き、クリックを使用してプログラムと対話できます。
基本的に、Excelの[名前を付けて保存]ダイアログボックスがアクティブになるのを待ち、保存アクションを完了するためにEnter/Returnキーを押し、[名前を付けて保存]ウィンドウが閉じるのを待つ簡単な自動化マクロを記録または作成します。マクロを手動で終了するまで、連続ループで実行するように設定できます。
これは、Macで行おうとしていることを実行するWindows AutoHotkeyスクリプトの簡単なバージョンです。これにより、関連するロジックがわかります。
; ' Infinite loop. End the macro by closing the program from the Windows taskbar.
Loop {
; ' Wait for ANY "Save As" dialogue box in any program.
; ' BE CAREFUL!
; ' Ignore the "Confirm Save As" dialogue if attempt is made
; ' to overwrite an existing file.
WinWait, Save As,,, Confirm Save As
IfWinNotActive, Save As,,, Confirm Save As
WinActivate, Save As,,, Confirm Save As
WinWaitActive, Save As,,, Confirm Save As
sleep, 250 ; ' 0.25 second delay
Send, {ENTER} ; ' Save the Excel file.
; ' Wait for the "Save As" dialogue box to close.
WinWaitClose, Save As,,, Confirm Save As
}
から Excel Macro Security-www.excelfunctions.net :
Excel 2007、2010、2013のマクロセキュリティ:
.....
Excelの最新バージョンで提供されるさまざまなExcelファイルの種類により、ブックにマクロが含まれていると明確になるため、これ自体が有用なセキュリティ対策になります。ただし、Excelにはオプションのマクロセキュリティ設定もあり、これはオプションメニューで制御されます。これらは :
「通知なしですべてのマクロを無効にする」
この設定は、マクロの実行を許可しません。新しいExcelブックを開くと、マクロが含まれているという事実は警告されないため、これがブックが期待どおりに機能しない理由に気付かない場合があります。
「通知ですべてのマクロを無効にする」
この設定により、マクロが実行されなくなります。ただし、ワークブックにマクロがある場合、ポップアップが表示され、マクロが存在し無効になっていることを警告します。
「デジタル署名されたマクロを除くすべてのマクロを無効にする」
この設定では、信頼できるソースからのマクロのみを実行できます。他のすべてのマクロは実行されません。新しいExcelブックを開くと、マクロが含まれているという事実は警告されないため、これがブックが期待どおりに機能しない理由に気付かない場合があります。
「すべてのマクロを有効にする」
この設定により、すべてのマクロを実行できます。新しいExcelブックを開くと、マクロが含まれているという事実は警告されず、ファイルを開いている間は実行中のマクロを認識できない場合があります。
マクロを信頼しており、マクロを有効にしても問題ない場合は、このオプションを選択します。
「すべてのマクロを有効にする」
このダイアログボックスはマクロには表示されません。
保存用のダイアログについては、これがExcel for Mac 2011で実行されていることに気付いた後、SOで次の質問に遭遇しました StackOverflow-VBAを使用してExcelファイル(.xlsm)を含むマクロを保存するときにダイアログを非表示にします)ファイル(.xlsx)を含む非マクロとして 。それから、おそらくキーボード入力シミュレーションによる場合を除いて、ダイアログを削除することはできないようです。別の質問を投稿して、それについて問い合わせます。申し訳ありませんが、途中までしか行けませんでした。もう1つの選択肢は、Microsoft Excelを備えたWindowsコンピューターを使用することですが、それがこの場合の選択肢かどうかはわかりません。
マクロプロンプトの有効化を回避するには、
Application.AutomationSecurity = msoAutomationSecurityForceDisable
完了したら、必ずデフォルトに戻してください
Application.AutomationSecurity = msoAutomationSecurityLow
.SaveAs
関数にはオプションの引数がすべて含まれています。CreatBackup:= False
必要ではないので。
私が考える最も興味深い方法は、ワークブックのオブジェクトを作成し、.SaveAs
プロパティをそのままにします。テストしていませんが、Workbooks.Open
レンダリングApplication.AutomationSecurity
該当なし。おそらくリソースと時間も節約できます。
それは、Excel 2013 Windows 10で通知なしで次を実行できたということです。
Option Explicit
Sub Convert()
OptimizeVBA (True)
'function to set all the things you want to set, but hate keying in
Application.AutomationSecurity = msoAutomationSecurityForceDisable
'this should stop those pesky enable prompts
ChDir "F:\VBA Macros\Stack Overflow Questions\When changing type xlsm to
xlsx stop popup"
Workbooks.Open ("Book1.xlsm")
ActiveWorkbook.SaveAs Filename:= _
"F:\VBA Macros\Stack Overflow Questions\When changing type xlsm to xlsx_
stop popup\Book1.xlsx" _
, FileFormat:=xlOpenXMLWorkbook
ActiveWorkbook.Close
Application.AutomationSecurity = msoAutomationSecurityLow
'make sure you set this up when done
Kill ("F:\VBA Macros\Stack Overflow Questions\When changing type xlsm_
to xlsx stop popup\Book1.xlsx") 'clean up
OptimizeVBA (False)
End Sub
Function OptimizeVBA(ByRef Status As Boolean)
If Status = True Then
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.DisplayAlerts = False
Application.EnableEvents = False
Else
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Application.DisplayAlerts = True
Application.EnableEvents = True
End If
End Function