EXCELマクロウイルスの手動駆除方法。下記のマクロについて改善方法を教えてください処理内容①同一階層すべてのファイルに処理を実行する。
サブフォルダを含む②アクティブファイルと同じパス、同じファイル名でPDFのコピーを作成する。③PDFにはすべてのシートを対象とし、ファイル単位に作成する。質問事項?処理が期待通りの動作を致しません。下記マクロの改善方法を教えて頂けないでしょうか。よろしくお願い致します。マクロOption ExplicitSub S0210 Dim TargetExt As Variant TargetExt = Arrayxlsx, xls, xslm 特定拡張子適宜変更して下さい高速化のためエクセルの再描画を抑止するApplication.ScreenUpdating = False 再帰呼び出しを実行するCall recursiveTargetExt, ThisWorkbook.Path エクセルの再描画を再開するApplication.ScreenUpdating = True End Sub 再帰呼び出しSub recursiveTargetExt As Variant, Path As Variant Dim fso As Object, file As Variant, ext As Variant, folder As Variant Dim bk As Workbook Set fso = CreateObjectScripting.FileSystemObject 指定されたPath内の全てのファイルについて繰り返すFor Each file In fso.GetFolderPath.Files ファイルがこのブック以外で、かつファイルの拡張子が指定された拡張子のときFor Each ext In TargetExt If file.NameThisWorkbook.Name And ext = fso.GetExtensionNamefile Then ファイルを開くSet bk = Workbooks.Openfile 全てのシートを選択し、PDFとして保存する。 Dim i As Long Dim sh As Worksheet Dim targetSheets As String Dim myFileFullName As String Dim Thisbook_path As StringReDim targetSheets0For Each sh In ActiveWorkbook.Worksheets If sh.Visible = xlSheetVisible Then ReDim Preserve targetSheetsi targetSheetsi = sh.Name i = i + 1 End If Next sh Thisbook_path = ThisWorkbook.Path If targetSheets0 =Then Exit SubWorksheetstargetSheets.SelectmyFileFullName = ActiveWorkbook.NameActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Thisbook_path/myFileFullName.pdf, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, openafterpublish:=Falseエクセルのアラート表示を抑止するApplication.DisplayAlerts = False 保存する必要があれば上書き保存するIf Not bk.Saved Then bk.Save ブックを閉じるbk.Close False エクセルのアラート表示を再開するApplication.DisplayAlerts = True End If Next ext Next file 指定されたPath内の全てのサブフォルダについて繰り返すFor Each folder In fso.GetFolderPath.SubFolders 再帰呼び出しを実行するCall recursiveTargetExt, folder Next folderEnd Subマクロで組むと、ファイルやフォルダを扱う場合、何かやっかいに思えてなりません。そこで、外部からエクセルから離れて「VBScript」でプログラムを組みましたので、「Windows限定」です。以下のプログラムをメモ帳かテキストエディタに貼り付けて、「~.vbs」という名前で保存してください。「~」の部分は、何でもかまいませんが、「.vbs」の部分は、必ず半角です。これから「D:/pdf」のフォルダを含めて、その下層のフォルダもすべて調べ、すべてのエクセルファイルをファイル単位でpdf化したい場合、「D:/pdf」フォルダの中に、できたプログラムファイル「~.vbs」ファイルを放り込んで、ダブルクリック「シングルクリック」→「Enter」の方が確実で実行します。すべての処理がすむと、最後に「Finished!」と表示しますので、「OK」を押して、終了してください。Option ExplicitPublic a, b, c, d, w, x, y, zSet w = CreateObjectScripting.FileSystemObjectSet x = CreateObjectExcel.Applicationx.Application.DisplayAlerts = Falsex.Visible = Falsea = w.GetFolder.Set y = w.GetFolderaCall tCall uSub tFor Each b In y.Filesc = LCasew.GetExtensionNameb.NameIf c = xls or c = xlsx ThenSet z = x.Workbooks.Openy/b.Namez.ExportAsFixedFormat 0, y/w.GetBaseNameb.Name.pdfz.CloseEnd IfNextEnd SubSub uFor Each d In y.Subfoldersa = d.PathSet y = w.GetFolderaCall tCall uNextEnd SubSet z = NothingSet y = NothingSet x = NothingSet w = NothingMsgBoxFinished!簡単な説明です。Option Explicit「厳密に」というような意味ですが、気にしないでください。Public a, b, c, d, w, x, y, z「Dim」による変数の宣言ではなく、「Public」で変数を宣言しているので、すべての「Subプロシージャ」で共通の変数になります変数の値を引き渡す必要がありません。しかし、普通は、このような組み方はダメですが、私は、こちらの方が分かりやすいのです。Set w = CreateObjectScripting.FileSystemObjectファイルやフォルダを扱えるようにしています。Set x = CreateObjectExcel.Applicationエクセルを扱えるようにしています。x.Application.DisplayAlerts = Falsex.Visible = False「上書きしますか」などと聞いてこないように、また、エクセルを表示しません。a = w.GetFolder.自分自身「~.vbs」が存在するフォルダを取得しています。Set y = w.GetFolderaそのフォルダを「Get」しています。Call tSubプロシージャ「t」を呼び出していますファイル単位のpdf化Subプロシージャ。Call uSubプロシージャ「u」を呼び出していますサブフォルダを再帰的に処理するSubプロシージャ。Sub tファイル単にpdf化するSubプロシージャ。For Each b In y.Filesそのフォルダに存在するすべてのファイルを1つずつ処理。c = LCasew.GetExtensionNameb.Name「GetExtensionName」は、「Scripting.FileSystemObject」の機能を使って「w.」、拡張子を取得しますが、「LCase」関数によって、すべて小文字にしています。If c = xls or c = xlsx Then拡張子が、「xls」または「xlsx」の場合は、Set z = x.Workbooks.Openy/b.Nameそのファイルを開いています。z.ExportAsFixedFormat 0, y/w.GetBaseNameb.Name.pdfファイル単位にpdfにしています。「GetBaseName」は、拡張子を除く、ファイル名です。z.Close開いたエクセルのファイルを閉じています。を繰り返しています。Sub u再帰的にサブフォルダを巡回するSubプロシージャ。For Each d In y.Subfolders現在のサブプロシージャの中下のサブプロシージャを1つずつ処理。a = d.Pathそのフォルダのパスを取得。Set y = w.GetFolderaそれを「Get」。Call tpdf化Subプロシージャを呼び出しています。Call u自分自身を呼び出しています。
以下でどうなりますか添削するのも何なんで????変更点は、1ファイル名判別Dir と違い、隠しファイルも取得するので、元ファイルの一時ファイル? ~$ファイル名 を除外もしくは、~$ 始りのものは全部除外するとか???2拡張子判別拡張子は大文字の場合もありうるので、小文字にした後比較するように3PDF 化そのままブック単位で ExportAsFixedFormat すれば、非表示シートは出ないみたい???Option ExplicitDim oFso As ObjectDim sBasePath As StringDim sBaseName As StringPublic Sub Samp1???Set oFso = CreateObjectScripting.FileSystemObject???sBasePath = ThisWorkbook.Path/???sBaseName = ThisWorkbook.Name???Application.ScreenUpdating = False???Call Samp1SubsBasePath???Application.ScreenUpdating = True???Set oFso = NothingEnd SubPrivate Sub Samp1SubvPath As Variant???Dim ws As Worksheet???Dim vF As Variant, v As Variant???Dim sFile As String???Dim bGo As Boolean???For Each vF In oFso.GetFoldervPath.Files??????For Each v In Array, ~$?????????If vF.Name = vsBaseName Then Exit For??????Next??????If IsEmptyv Then?????????bGo = False?????????Select Case LCaseoFso.GetExtensionNamevF.Name????????????Case xlsx, xls, xlsm???????????????bGo = True?????????End Select?????????If bGo Then????????????sFile = sBasePathoFso.GetBaseNamevF.Name.pdf????????????With Workbooks.OpenvF.Path, ReadOnly:=True???????????????.ExportAsFixedFormat _??????????????????xlTypePDF, sFile, xlQualityStandard, True, False, , , False???????????????.Close False????????????End With?????????End If??????End If???Next???For Each vF In oFso.GetFoldervPath.SubFolders??????Call Samp1SubvF.Path???NextEnd Sub
EXCELマクロウイルスの手動駆除方法。EXCELマクロウイルスの手動駆除方法 . EXCELのマクロウイルスを手動で駆除する方法を教えてください。 . 検索されたXLSTARTフォルダすべてについてウイルスの . このソリューションの内容を改善するために、ご提案/ご意見がありま.