2017-12-15 18 views
0

で、Vbaスクリプトを作成し、選択したフォルダ内の同じドキュメントの複数のバージョンを比較しました。このスクリプトを使用すると、結果とともに新しいレポートを作成できます。Word vbaマクロにプロセスインジケータを追加

Private Sub SummaryReportButton_Click() 
    Dim objDocA As Word.Document 
    Dim objDocB As Word.Document 
    Dim objDocC As Word.Document 

    Dim objFSO As Scripting.FileSystemObject 
    Dim objFolderA As Scripting.Folder 
    Dim objFolderB As Scripting.Folder 
    Dim objFolderC As Scripting.Folder 

    Dim colFilesA As Scripting.Files 
    Dim objFileA As Scripting.File 

    Dim i As Integer 
    Dim j As Integer 

    Set objFSO = New FileSystemObject 
    Set objFolderA = objFSO.GetFolder(ChooseFolder("Choose the folder with the original documents", ThisDocument.Path)) 
    Set objFolderB = objFSO.GetFolder(ChooseFolder("Choose the folder with revised documents", ThisDocument.Path)) 
    Set objFolderC = objFSO.GetFolder(ChooseFolder("Choose the folder for the comparisons documents", ThisDocument.Path)) 

    Set colFilesA = objFolderA.Files 

    For Each objFileA In colFilesA 
    If objFileA.Name Like "*.docx" Then 
     Set objDocA = Documents.Open(objFolderA.Path & "\" & objFileA.Name) 
     Set objDocB = Documents.Open(objFolderB.Path & "\" & objFileA.Name) 
     Set objDocC = Application.CompareDocuments(_ 
      OriginalDocument:=objDocA, _ 
      RevisedDocument:=objDocB, _ 
      Destination:=wdCompareDestinationNew) 
     objDocA.Close 
     objDocB.Close 
     On Error Resume Next 
     Kill objFolderC.Path & "\" & objFileA.Name 
     On Error GoTo 0 
     objDocC.SaveAs FileName:=objFolderC.Path & "\" & objFileA.Name 
     objDocC.Close SaveChanges:=False 
    End If 
    Next objFileA 

End Sub 

Function ChooseFolder(strTitle As String, strPath As String) As String 
    Dim fldr As FileDialog 
    Dim sItem As String 


    Set fldr = Application.FileDialog(msoFileDialogFolderPicker) 
    With fldr 
     .Title = strTitle 
     .AllowMultiSelect = False 
     .InitialFileName = strPath 
     If .Show <> -1 Then GoTo NextCode 
     sItem = .SelectedItems(1) 
    End With 

NextCode: 
    ChooseFolder = sItem 
    Set fldr = Nothing 
End Function 

私がスクリプトを改善するには、処理が完了するまでインジケータをプロセスに表示してください。

私はメッセージボックスを使用すると考えられて:あなたは私が何を助けてもらえ

...

Msgbox "Processing " & i & " of " & colFilesA.Count 

をそれはそれは最善の解決策ではありません...毎回クリックする必要があります最高のソリューション?あなたの助けを事前に

おかげで、

よろしく

答えて

0

はそのためApplication.StatusBarを使用してみてください。あなたは、このように、ステータスバーのテキストを初期化し、変更することができます:

​​

とマクロの終了時にステータスバーメッセージをきれいに次の行を追加してください:

Application.Statusbar = false 
+1

単語がファイルを結果という問題を保存する直前の数時間の間に開かれます(ポップアップで「保存された文書にはトラックの変更が保存されますか?」)。これを避けるために実装する方法はわかりません – coeurdange57

+1

'Application.DisplayAlerts = False'はプロパティを 'True'に戻すまでシステムアラートを抑制します。アラートがオフになっている間、Wordは既定の応答を選択します。警告ボックス内のどのボタンがあらかじめ選択されているかを調べることで、デフォルトをテストすることができます。 – Variatus

+1

'.ShowModal'を' False'に設定して 'UserForm'を挿入することもできます。これは必要に応じてロードされ、' Label'で進捗状況を表示します。 – macejd

関連する問題