こんにちは~。「デザインもできるシステムエンジニア」のあつもり(@atumori17)です。今日も「時間クリエーター」としてバシバシ時短に取り組んでます!
デスクトップにプログラムやWEBサイトのショートカット、エクセルファイルやフォルダなどが散乱していていませんか?デスクトップがちらかっていると作業をする度に、まずファイルを探さなれけばなりません。その時間って無駄な時間だと思いませんか?
そんなわけで今回はエクセルVBAでショートカットランチャーを作り、デスクトップを劇的にすっきりさせる方法を紹介します。
目次
デスクトップのファイルをフォルダに移動させる
まずはデスクトップの整理整頓からはじめます。思い切ってデスクトップにあるファイルを全部1つのフォルダに放り込んじゃいましょう。
デスクトップに待機フォルダを作ってそこにすべてのファイルを移動します。使用頻度の高いファイル以外はすべて移動させましょう。
ほら。こんなにすっきりしましたね。
エクセルシートでファイルリストを作る
それではいよいよプログラムを作っていきます。まずは退避させたファイルをカテゴリに分けエクセルシートに入力していきます。例えば「よく使うファイル」「来週の会議用」「問合せ対応時の資料」などです。この作業は手間であればやらなくてもかまいません。
さきほど作成した待機フォルダを開き、ランチャーに登録したいファイルを選び右クリックします。そしてプロパティをクリックします。
セキュリティタブをクリックし、オブジェクト名のところに書かれているパス名をコピーします。
コピーしたパスをエクセルファイルのA列にペーストします。B列にファイルやフォルダの内容などのメモを書いておくとあとで便利です。
以上で準備作業は完了です。ファイル名を「ショートカットランチャー.xls」などとしてデスクトップに保存しておいてください。
次はエクセルVBAでプログラムコードを書いていきます。
エクセルVBAでプログラムコードを書く
では早速プログラムコードを書いていきます。プログラムコードを書く場所は標準モジュールではなく、シートモジュールに書いてください。
今回紹介するランチャーはワークシートのセルをダブルクリックするとファイルが立ち上がるようにします。そのためワークシートのイベント処理が必要になってくるからです。
「Worksheet」の「BeforeDoubleClick」イベントを選択します。
全体のプログラムは以下のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Dim fldPath As String Dim objFSO As Object Dim objWsh As Object Dim rtn '選択されているセルのデータ fldPath = ActiveCell.Value 'エラーの場合はスキップする On Error Resume Next Set objFSO = CreateObject("Scripting.FileSystemObject") Set objWsh = CreateObject("WScript.Shell") 'フォルダの場合 If objFSO.FolderExists(fldPath) Then Shell "C:\windows\explorer.exe " & fldPath, vbNormalFocus Else 'プログラムの場合 If Right(fldPath, 3) = "exe" Then rtn = Shell(fldPath, 1) 'ファイルの場合 Else objWsh.Run fldPath End If End If Set objWsh = Nothing Set objFSO = Nothing End Sub |
選択されているセルのデータを取得する
ワークシート上で選択されているセルのデータを取得して変数に入れる処理です。この変数にはファイルやフォルダのパスが入ります。
1 |
fldPath = ActiveCell.Value |
パスが見つからない場合にその都度エラーが出てくると使いづらいので、エラーの場合は強制的にスキップするようにします。
1 |
On Error Resume Next |
ファイルの種類によって処理を分ける
フォルダかどうかを調べるのにファイルシステムオブジェクト、ファイルを開くのにシェルオブジェクトを使います。
1 2 |
Set objFSO = CreateObject("Scripting.FileSystemObject") Set objWsh = CreateObject("WScript.Shell") |
<フォルダの場合>
フォルダかどうかを調べ、シェルにエクスプローラーとフォルダを連結させたパスを渡します
<フォルダ以外>
・拡張子がexeだったらプログラムと判断し、シェルオブジェクトにプログラムのパスを渡します
・拡張子がexe以外の場合はファイルと判断し、シェルオブジェクトにファイルのパスを渡します
このようにフォルダ、プログラム、ファイルで起動方法が異なるので注意が必要です。
1 2 3 4 5 6 7 8 9 10 11 12 |
'フォルダの場合 If objFSO.FolderExists(FldPath) Then Shell "C:\windows\explorer.exe " & FldPath, vbNormalFocus Else 'プログラムの場合 If Right(FldPath, 3) = "exe" Then rtn = Shell(FldPath, 1) 'ファイルの場合 Else objWsh.Run FldPath End If End If |
オブジェクト変数を解放します
1 2 |
Set objWsh = Nothing Set objFSO = Nothing |
ショートカットランチャーを動かしてみる
それでは出来上がったアプリケーションを動かしてみます。
先ほどのエクセルシートを開き、プログラムのセルをダブルクリックしてみてください。どうですか?ファイルは開きましたか?
まとめ
お疲れさまでした~。どうでしたかうまく動きましたか?エクセルでランチャーを作るのが面倒なかたは待機フォルダにデスクトップ上のファイルを入れるだけでもすっきして作業がはかどるようになりますよ~。
今回の内容は以下のようになります
- デスクトップのファイルを待機フォルダに移動
- エクセルでよく使うプログラムのリストを作る
- エクセルVBAでランチャープログラムを書く
ではまた。