· 

Windows10標準のアンチウィルスソフト(Defender)の更新後、TPiCSのExcel帳票が印刷できない

2020/05/22更新

20/5/20にお知らせした下記の事象ですが、マイクロソフトに誤検出の報告を行い、パターンファイル(セキュリティインテリジェンス)の更新が行われ、誤検出されないように改善されました。

 

■更新されたセキュリティインテリジェンスのバージョン
・セキュリティインテリジェンスのバージョン:1.315.1112.0
・作成されたバージョン:2020/05/21 12:33

 

[設定]-[更新とセキュリティ]-[Windowsセキュリティ]-[ウィルスと脅威の防止]-[ウィルスと脅威の更新]の「更新プログラムのチェッ

ク」から最新のバージョンに更新してください。

セキュリティインテリジェンスの更新が上手く行かない場合は以下をお試しください。

 

■コマンドプロンプトからの実行方法
1.コマンドプロンプトを[管理者として実行]で開き、cd c:\Program Files\Windows Defender を実行してディレクトリを変更します

2.“MpCmdRun.exe -removedefinitions -dynamicsignatures”を実行します
3.“MpCmdRun.exe -SignatureUpdate”を実行します

 

2020/05/20更新

WindowsのアンチウィルスDefenderの2020/5/20のセキュリティインテリジェンス(パターンファイル1.315.1016.0)の更新によって、Excelデザインファイルが起動したタイミングで以下のメッセージが表示され、マクロが削除される事象を確認しました。

この問題はWindows Defenderを使用している場合のみ起こります。他のアンチウィルスソフト(ESET)では正常ファイルです。

 

■VBAコードが消される可能があるファイル

  • TxPrintDesign.xlsm(注文書、作業指示書、外注注文書)
  • TxPrintDesign_Rece.xlsm(出荷指示書)
  • TxPrintDesign_Pick.xlsm(払出指示書)
  • TxPrintDesign_SAct.xlsm(実績データ伝票)
  • TxPrintDesign_RAct.xlsm(出荷実績伝票)
  • TxPrintDesign_Form.xlsm(Excel印刷)
  • TxPrintDesign_Hais.xlsm(配送作業指示書)
  • TxPrintDesign_Mitu.xlsm(見積依頼書、見積書)
  • TxPrintDesign_Srvc.xlsm(サービスパーツ伝票)

このようなメッセージが表示され、Windows10に通知が表示されて以降は、TxPrintDesgin.xlsmファイル内のVBAコードが削除されます。

削除されるVBAコードは、TxPrintMacro.xlsm内のVBAを実行するためのもので、TPiCSが書出した印刷用CSVをExcelデザインファイルに読込みを行うためのもので、TxPrintMacro.xlsm内のVBAコードは消されません。

パターンファイルのバージョン確認は、Windows10の

[設定]-[更新とセキュリティ]-[Windowsセキュリティ]-[ウィルスと脅威の防止]

から確認できます。

 

スキャンの除外設定について

Windowsセキュリティの設定で、Excelデザインファイルが格納されているフォルダーをスキャン対象から除外することにより、DefenderによるVBAコードの削除を回避することができます。

VBAコード復旧について

TxPrintDesginなどExcelデザインファイルをカスタムして使用されているお客様は、以下の「復旧用のVBAコード」をExcelデザインファイルのVBAProjectに貼り付けすることで復旧できます。

 

復旧用のVBAコード

Private Sub Workbook_Open()
    If OpenMacroBook Then
        Application.Run "'" & GetMacroBookName & "'!TPrintDenp.Design_Open", ThisWorkbook.Name
    End If
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    CloseMacroBook
End Sub

Private Sub CloseMacroBook()
    On Error GoTo skip
    Workbooks(GetMacroBookName).Saved = True
    Workbooks(GetMacroBookName).Close SaveChanges:=False
    If Workbooks.Count = 2 Then
      Application.Quit
    End If
skip:
End Sub

Private Function OpenMacroBook() As Boolean
    Dim wb As Workbook
    Dim wbName As String
    wbName = GetMacroBookName

    OpenMacroBook = True
   
    On Error Resume Next
    Err.Clear
    'ブックが既に開いているか
    Set wb = Workbooks(wbName)
    If Err.Number > 0 Then
        Err.Clear
        'ブックが存在しないか、開くことができないか
        Set wb = Workbooks.Open(ThisWorkbook.path & "\" & wbName, ReadOnly:=True)
        If Err.Number > 0 Then
            OpenMacroBook = False
            On Error GoTo 0
            Exit Function
        End If
    End If
End Function

Private Function GetMacroBookName()
    Const wbName As String = "TxPrintMacro."
    GetMacroBookName = wbName & GetFileExtention(ThisWorkbook.Name)
End Function

Private Function GetFileExtention(FileName As String)
    Dim FindPoint As Long
    Dim StrLen As Long
       
        '文字列の右端から"."を検索し、左端からの位置を取得する
        FindPoint = Strings.InStrRev(FileName, ".")
   
        '拡張子の長さを取得
        StrLen = Strings.Len(FileName) - FindPoint
   
        '拡張子の取得
        GetFileExtention = Strings.Right(FileName, StrLen)
End Function

VBAコードの貼り付け

Excelのオプション設定で[開発]のリボンを表示して[開発]-[Visual Basic]を開き、[VBAProject(TxPrintDesign.xlsm)]-[Microsoft Excel Objects]-[ThisWorkbook]をダブルクリックして、上記の「復旧用のVBAコード」コピーし、保存します。

ThisWorkBookをダブルクリックでコード編集画面を開き、以下のように貼り付けます。