はじめに
Box Edit とは、Boxに格納されているOffice文書をofficeデスクトップアプリケーションで開ける機能です。
Boxに関わらず、通常、ExcelマクロはOffice Onlineでは実行できません。
そのことから、BoxとExcelマクロの関係について、
「ファイルサーバからBoxに移行したらExcelマクロは使えなくなる」
「ExcelマクロはBox Driveでしか使用できない」
のようなイメージを持っている人も多いのではないでしょうか?
今回は、Box Edit を使用して Excelマクロ が動作する であろうケースについて、いくつか実際に検証してみました。
結果
1つ目は、1ブック内でマクロが完結しているケース
このケースは、以下の動画の通り、問題なく動作しました。
この検証では、次のことを行っています。
1. Box内に保存されているExcel(マクロ有効化ファイル)をBox Editで開く
2. そのファイル内に予め作成しておいたマクロでフォームを開く
3. 範囲を選択して、書式設定用のマクロが関連付けられたボタンをクリック
4. 予め設定された条件(Deploy<80, Active<50)に従って、書式設定(赤字網掛け)される
使用したコードは以下の通り。
Private Sub Format_Active_Click()
'
' Deploy率が80%以下を赤くする
'
Selection.FormatConditions.Add _
Type:=xlCellValue, _
Operator:=xlLess, _
Formula1:="=50"
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Font
.Color = -16383844
.TintAndShade = 0
End With
With Selection.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.Color = 13551615
.TintAndShade = 0
End With
Selection.FormatConditions(1).StopIfTrue = False
End Sub
Private Sub Format_Deploy_Click()
'
' Deploy率が80%以下を赤くする
'
Selection.FormatConditions.Add _
Type:=xlCellValue, _
Operator:=xlLess, _
Formula1:="=80"
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Font
.Color = -16383844
.TintAndShade = 0
End With
With Selection.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.Color = 13551615
.TintAndShade = 0
End With
Selection.FormatConditions(1).StopIfTrue = False
End Sub
2つ目は、外部のテキストファイルを読み込むケース
このケースも、マクロから参照するファイル(データファイルなど)が絶対パス参照出来る環境(PC上などのBox外)にあれば動作しました。
一方で、Box内にあるファイルはUNCを含めたパス指定が出来ないため、Box Editから参照することはできませんでした。
この検証では、次のことを行っています。
1. Box内に保存されているExcel(マクロ有効化ファイル)をBox Editで開く
2. 絶対パス参照出来る位置にデータファイルを置く(C:\ExcelVBA\data2.txt)
3. 外部ファイル参照用のマクロを実行
4. データファイル内の文字列を読み込んで表示される
使用したコードは以下の通り。
Sub 外部ファイル参照_絶対()
Dim n As Integer, i As Integer, txtLine As String
If Dir("C:\ExcelVBA\data2.txt") = "" Then
MsgBox "ファイルが存在しません"
Exit Sub
End If
n = FreeFile
Open "C:\ExcelVBA\data2.txt" For Input As #n
Do While Not EOF(n)
i = i + 1
Line Input #n, txtLine
MsgBox txtLine
Loop
Close #n
End Sub
3つ目は、Boxに格納された複数のExcel間でデータをやり取りするケース
このケースも、関連するExcelブックを予め開いておけば、問題なく動作しました。
一方で、マクロ内で参照するBox内のファイルに直接アクセスすることは出来ないため、ファイルを開いている状態で作業する必要があります。
この検証では、次のことを行っています。
1. Box内に保存されているExcel(マクロ有効化ファイル)をBox Editで開く
2. Box内に保存されているExcel(通常のファイル)をBox Editで開く(データファイル)
3. Active Book 間のデータ転送用マクロを実行
4. 片方のExcelからデータが読み込まれて、もう片方のExcelへ書き込まれる
使用したコードは以下の通り。
Sub Box内のExcelファイル間データ転送()
For i = 1 To 10
ActiveCell.Value = Workbooks("データ.xlsx").Worksheets("データ").Cells(i + 1, 2)
ActiveCell.Offset(1, 0).Select
Next i
End Sub
まとめ
BoxとExcelマクロは相性が悪いと思われがちですが、実はマクロの作り方次第で、多くのユースケースがBox Editでも実行可能であることが分かりました。
WebアプリケーションからのExcelマクロ活用の一助になれば幸いです。