web-dev-qa-db-ja.com

VB script?

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.DisplayAlertsWorkbooks.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を使用しています(それが役立つ場合)。

14
NJP

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

お役に立てれば。

0
tysonwright

ソリューション:自動化マクロ

自動化ユーティリティを使用することでメリットが得られるようです。 Windows PCを使用している場合、 AutoHotkey をお勧めします。 Macで自動化ユーティリティを使用したことはありませんが、 このAsk Askの投稿 にはいくつかの提案がありますが、無料のものはありません。

これはVBAソリューションではありません。これらのマクロはExcelの外部で実行され、キーボードストローク、マウスの動き、クリックを使用してプログラムと対話できます。

基本的に、Excelの[名前を付けて保存]ダイアログボックスがアクティブになるのを待ち、保存アクションを完了するためにEnter/Returnキーを押し、[名前を付けて保存]ウィンドウが閉じるのを待つ簡単な自動化マクロを記録または作成します。マクロを手動で終了するまで、連続ループで実行するように設定できます。

これは、Macで行おうとしていることを実行するWindows AutoHotkeyスクリプトの簡単なバージョンです。これにより、関連するロジックがわかります。

オートメーションマクロの例: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
}
0
ChrisB

から 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コンピューターを使用することですが、それがこの場合の選択肢かどうかはわかりません。

0
jordanhill123

マクロプロンプトの有効化を回避するには、

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
0
Joshua Fenner