Skip to content

Instantly share code, notes, and snippets.

@furyutei
Last active July 26, 2022 03:45
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save furyutei/0c4b200ac728b0c675b8e96d9a952a4e to your computer and use it in GitHub Desktop.
Save furyutei/0c4b200ac728b0c675b8e96d9a952a4e to your computer and use it in GitHub Desktop.
Excel用CSV読込抑制アドイン(CSV Guard)

Excel用CSV読込抑制アドイン(CSV Guard)

ExcelでCSVファイルを開けないようにするためのアドインです。
ネタで作ったんですけれど💦、設定しておきたいという方がいらっしゃったので……。
CSV Guard動作イメージ 001
※画像は往復ビンタのイラスト(棒人間) | かわいいフリー素材集 いらすとやのものを調整して使わせていただいております

CSVGuard.3.mp4

■ダウンロード

こちら(Google Drive上)からダウンロードしてください。
上部に表示される「共有アイテム > CsvGuard」をクリック→「ダウンロード」(未ログインの場合は「すべてダウンロード」)をクリックでZIPファイルがダウンロードされます。
CSV Guardのダウンロード
CSV Guardのダウンロード(未ログイン時) 001
※インストールにはZIPファイルを解凍して出てくる「インストール」フォルダを使用します。

■インストール

  1. 起動中のエクセルがあればすべて終了しておく
  2. 「インストール」フォルダにある「Install.vbs」を実行して指示に従う
  3. エクセルを起動し、ファイル>オプション>アドインにて、「CSV Guard」アドインを有効にしておく

■動作

CSVファイルを開こうとすると、デフォルトでは怒られた上で閉じられてしまい、代わりにメモ帳で開き直されてしまいます。
※設定はリボンの「CSV Guard」タブで変更できます。

■アンインストール

  1. 「インストール」フォルダにある「Uninstall.vbs」を実行して指示に従う

■ライセンス

  • The MIT license
  • Copyright (c) 2022 風柳(furyu)

■免責事項

動作保証は一切ありません。ご利用の際には全て自己責任でお願いします。
不具合があったり、使用した結果等により万一何らかの損害を被ったりした場合でも、作者は一切関知いたしませんので、悪しからずご了承願います。

■ソースコード

標準モジュール

ユーザー フォーム

Microsoft Excel Objects

リボン設定

<!--RibbonX Visual Designer 2.33 for Microsoft Excel CustomUI14 . XML Code produced on 2022/01/13-->
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" >
<ribbon >
<tabs >
<tab
id="TabCsvGuard"
label="CSV Guard">
<group
id="GroupConfig"
label="設定">
<checkBox
id="CheckboxAddinIsRunning"
label="稼働中"
getPressed="RibbonControl_AddinIsRunning"
onAction="RibbonControl_UpdateAddinIsRunning"/>
<checkBox
id="CheckboxEnableDialogDisplay"
label="ダイアログ表示"
getPressed="RibbonControl_EnableDialogDisplay"
onAction="RibbonControl_UpdateEnableDialogDisplay"/>
<checkBox
id="CheckboxEnableReOpenByNotepad"
label="メモ帳で開き直す"
getPressed="RibbonControl_EnableReOpenByNotepad"
onAction="RibbonControl_UpdateEnableReOpenByNotepad"/>
</group >
</tab >
</tabs >
</ribbon >
</customUI >
Option Explicit
Const ImageSheetName = "画像"
Private Sub CommandButton1_Click()
Call Unload(Me)
End Sub
Private Sub UserForm_Initialize()
' Image1.Picture = ThisWorkbook.Worksheets(ImageSheetName).Image1.Picture
End Sub
Option Explicit
Const ConfigSheetName = "設定"
Const AddinIsRunningCellName = "稼働中"
Const EnableDialogDisplayCellName = "ダイアログ表示"
Const EnableReOpenByNotepadCellName = "メモ帳で開き直す"
Sub CsvGuard(OpenedWorkbook As Workbook)
If Not AddinIsRunning Then Exit Sub
If Not IsCsvFile(OpenedWorkbook.Name) Then Exit Sub
If EnableDialogDisplay Then
' MsgBox "エクセルでCSVを開くんじゃないっ!"
Call GuardForm.Show
End If
Dim CsvFilename: CsvFilename = OpenedWorkbook.FullName
Call OpenedWorkbook.Close(SaveChanges:=False)
If EnableReOpenByNotepad Then
Call Shell("notepad.exe """ & CsvFilename & """", vbNormalFocus)
End If
End Sub
Public Function IsCsvFile(Filepath As String) As Boolean
IsCsvFile = False
If Filepath = vbNullString Then Exit Function
If LCase(Right(Filepath, 4)) = ".csv" Then IsCsvFile = True
End Function
Property Get AddinIsRunning() As Boolean
AddinIsRunning = SettingSheet.Range(AddinIsRunningCellName).Value
End Property
Property Let AddinIsRunning(Value As Boolean)
SettingSheet.Range(AddinIsRunningCellName).Value = Value
ThisWorkbook.Save
End Property
Property Get EnableDialogDisplay() As Boolean
EnableDialogDisplay = SettingSheet.Range(EnableDialogDisplayCellName).Value
End Property
Property Let EnableDialogDisplay(Value As Boolean)
SettingSheet.Range(EnableDialogDisplayCellName).Value = Value
ThisWorkbook.Save
End Property
Property Get EnableReOpenByNotepad() As Boolean
EnableReOpenByNotepad = SettingSheet.Range(EnableReOpenByNotepadCellName).Value
End Property
Property Let EnableReOpenByNotepad(Value As Boolean)
SettingSheet.Range(EnableReOpenByNotepadCellName).Value = Value
ThisWorkbook.Save
End Property
Private Property Get SettingSheet() As Worksheet
Set SettingSheet = ThisWorkbook.Worksheets(ConfigSheetName)
End Property
Option Explicit
Sub RibbonControl_AddinIsRunning(ByVal RibbonControl As IRibbonControl, ReturnedVal)
ReturnedVal = AddinIsRunning
End Sub
Sub RibbonControl_UpdateAddinIsRunning(ByVal RibbonControl As IRibbonControl, Pressed As Boolean)
AddinIsRunning = Pressed
End Sub
Sub RibbonControl_EnableDialogDisplay(ByVal RibbonControl As IRibbonControl, ReturnedVal)
ReturnedVal = EnableDialogDisplay
End Sub
Sub RibbonControl_UpdateEnableDialogDisplay(ByVal RibbonControl As IRibbonControl, Pressed As Boolean)
EnableDialogDisplay = Pressed
End Sub
Sub RibbonControl_EnableReOpenByNotepad(ByVal RibbonControl As IRibbonControl, ReturnedVal)
ReturnedVal = EnableReOpenByNotepad
End Sub
Sub RibbonControl_UpdateEnableReOpenByNotepad(ByVal RibbonControl As IRibbonControl, Pressed As Boolean)
EnableReOpenByNotepad = Pressed
End Sub
Option Explicit
Private WithEvents TargetExcelApplication As Excel.Application
Private Sub TargetExcelApplication_WorkbookOpen(ByVal Wb As Workbook)
Call CsvGuard(Wb)
End Sub
Private Sub Workbook_AfterSave(ByVal Success As Boolean)
StartCsvGuard
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Call StopCsvGuard
End Sub
Private Sub Workbook_Open()
Call StartCsvGuard
End Sub
Private Sub StartCsvGuard()
Set TargetExcelApplication = Application
End Sub
Private Sub StopCsvGuard()
Set TargetExcelApplication = Nothing
End Sub
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment