TeamsやOneDriveのExcelへのショートカットを作成するExcelアドイン

# 概要
- TeamsやOneDrive、SharePoint上のExcelファイルをよく使う場合は、デスクトップにショートカットを作成しておくと便利です。
- Excelからワンボタンで作成できた方が便利だと思ってアドインを作成してみました。
- デスクトップのOneDriveでフォルダを同期してもいいのですが、一ライブラリごとに同期するのが面倒、また同期が禁止されているといった場合もあります。

[手動で、デスクトップのExcelで開くショートカットを作成する方法はこちらです。](https://qiita.com/Rambosan/items/34fd50aea330355b94c2)

## 使い方イメージ
TeamsなどのExcelファイルをデスクトップアプリで開き、アイコンをクリック
するとデスクトップにショートカットが作成されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/293667/6a33edc1-26f1-24d3-ca4c-9b0fe6a944fa.png)



# アドインのVBAコード
Excelで新規ファイルを作成し、標準モジュールを追加して以下のコードを貼り付けます。
※開発タブ→VisualBasic→挿入→標準モジュールで標準モジュールを追加し以下のコードに置き換えます。
※開発タブが出ていない場合はリボンの設定から表示が必要です。

```VisualBasic:Excelショートカット作成ツール.xlam
Option Explicit
Private Const protocol_ As String = "https://"

'

Public Sub CreateShortcut()

    Dim appName  As String: appName = ThisWorkbook.Name

    Dim fileName As String, filePath As String, shortcutExt As String
    fileName = ActiveWorkbook.Name
    filePath = ActiveWorkbook.FullName
    shortcutExt = ".lnk"


    If ActiveWorkbook.Path = "" Then MsgBox "ブックが保存されていません", vbInformation, appName: Exit Sub


    If IsOnlineFile(filePath) Then
        filePath = "ms-excel:ofe|ofc|u|" & filePath
        shortcutExt = ".url"
    End If
   
    Dim wsh As Object
    Set wsh = CreateObject("WScript.Shell")
    
    Dim desktop As String, shortcutName As String
    desktop = wsh.SpecialFolders("Desktop")
    shortcutName = desktop & "\" & fileName & shortcutExt


    If Dir(shortcutName) <> "" Then
        If MsgBox("既に作成済みです。上書きしますか？", vbYesNoCancel) <> vbYes Then
            Exit Sub
        End If
    End If

    Dim shortcut As Object
    Set shortcut = wsh.CreateShortcut(shortcutName)
    shortcut.TargetPath = filePath
    shortcut.Save

    MsgBox "デスクトップショートカットを作成しました。" & vbNewLine & fileName, vbInformation, appName

End Sub


Private Function IsOnlineFile(path As String) As Boolean
    
    If Left(path, Len(protocol_)) = protocol_ Then
        IsOnlineFile = True
    Else
        IsOnlineFile = False
    End If

End Function
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/293667/5d5d358e-1aa4-a191-7650-a877cf05e408.png)


### 簡単に解説
- 現在開いているブックのパスは```ActiveWorkbook.FullName```で取得可能です。
- ローカルファイルならC:\～、オンラインファイルならhttps://～になります。
- オンラインファイルの場合はSharePointのパスのコピーから取得できるURLになります。
- これにURIスキーマである```ms-excel:ofe|ofc|u|```をつけて開くようにショートカットを作成すると、クリックしたときにデスクトップのExcelでオンラインファイルを開けるようになります。

# アドインとしての登録方法
### アドインの登録

- 先程のファイルで、名前をつけて保存→ファイルの種類でExcelアドインを選択して保存します。
    - ※保存フォルダが自動的にアドインのフォルダに設定されます。
    - C:\Users\UserName\AppData\Roaming\Microsoft\AddIns

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/293667/e32ade00-fe78-5656-20b2-15a23909dafb.png)

- Excelを開いて開発タブ→Excelアドインを開き、先程保存したアドインにチェックをつけ有効化します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/293667/50d35018-d626-c132-0fc0-f749e54bf60c.png)

### ショートカットアイコンから呼び出せるように設定
- ツールバーで右クリック→クイックアクセスツールバーのユーザー設定を開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/293667/6a8bb2e8-d5a5-7632-b3f7-88a2be543cb3.png)

- コマンドの選択をマクロにし、先程登録したアドインのプロシージャ名、CreateShortcutを選択
- 変更で分かりやすいアイコンに変更し、追加をクリックして保存します。<br>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/293667/3bb57b9f-65e6-8fd2-b111-16a9345e1f03.png)

# 使い方
1. TeamsやSharePointからデスクトップアプリでExcelを開く。
1. 先程登録したショートカット作成アイコンをクリックする。
1. デスクトップにショートカットが作成されます。 <br>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/293667/3126408a-aea2-3804-a5b2-56ea3283460b.png)

1. クリックするとデスクトップのExcelでファイルが開かれます。 
※オンプレファイルの場合も通常のショートカットとして利用可能です。

# 不具合的なもの
Excelアドインを登録した状態でオンラインファイルを開くと何故か空白のウィンドウが開かれてしまうことがあります。
対処方法は不明です。
Excelアドイン有効化のチェックを外すと消えます。アドイン実行のアイコンを登録後なら外しても使えます。

# おまけ
やっぱりOutlookが一番だ、なんていってるおじさんにTeamsのファイルをデスクトップアプリで開かせる場合、
作成されたショートカットカットをファイルサーバーに置き、ファイルへのリンクと同じように
\<file://ショートカットのパス.url>としてリンクを貼ってあげると、パスをクリックしたときにデスクトップアプリで開きます。