SeleniumBasicのExamplesで紹介されているユーティリティサービスの利用方法をご案内します。注意点として、構文内容はSelenium(ブラウザ)を利用していません。SeleniumBasicのExamplesで紹介されている、その他便利な自作関数の紹介、といった感じです。SleniumBasicとはほぼ関係ない内容なので、構文解説はせず、機能の紹介をします。
- 利用目的は業務効率化です。(テスト自動化ではありません)
- ブラウザはGoogleChromeが対象です。(EdgeやFirefoxは対象外)
- 原文のVBAでは現在エラー発生する場合が多いため、修正を加えてます。
Examples.xlsmの保存場所(ここをクリック)
Examples.xlsmが保存されている場所は、SeleniumBasicがインストールされているサブフォルダ内になります。SeleniumBasicのインストール完了時に保存フォルダを確認することができます。ただ、大体以下フォルダのどちらかにファイル保存されています。
- C:\Program Files\Seleniumbasic\Examples\Excel
- shell:Local AppData\SeleniumBasic\Examples\Excel
辞書の利用
Collection型を利用した辞書(Dictionary)の利用になります。VBAで辞書を利用するのであれば、CreateObject(“Scripting.Dictionary”)を使った連想配列があるので、わざわざ以下構文を利用する必要ないと思いますが、一応内容だけさらっておきます。
ここでは予め、ExcelでSheet5シートを新規作成し、テーブルデータを作っておきます。テーブルデータは、usate_tableで紹介しているPrivate Sub Scrap_Table_ToExcelにて作成しています。usage_tableは以下リンク参照してみてください。
Sheet5の作成イメージは以下のとおりです。
以下が構文の紹介です。Private Sub Utility_Dictionaryを実行すると、2列目のデータをキーにして、1列目のデータをアイテムに登録します。"Frank"を検索すると、"Bach"をイミディエイトウィンドウに出力します。
Private Sub Utility_Dictionary()
Dim dict As Collection
Set dict = LoadTranslation(Sheet5)
Debug.Print dict("Frank")
End Sub
Public Function LoadTranslation(sheet As Worksheet) As Collection
Dim target(), translation As String
Set LoadTranslation = New Collection
target = sheet.Cells.CurrentRegion
For r = LBound(target) To UBound(target)
If Not IsEmpty(target(r, 1)) Then translation = target(r, 1)
LoadTranslation.Add translation, target(r, 2)
Next r
End Function
Excelのアクティブインスタンスを取得
Private Sub GetActiveInstanceを実行すると、現在のアクティブ状態のExcelインスタンス名をイミディエイトウィンドウに出力します。
Private Sub GetActiveInstance()
Debug.Print GetExcelInstances(1)
End Sub
Public Function GetExcelInstances() As Collection
Dim guid&(0 To 4), app As Object, hwnd
guid(0) = &H20400
guid(1) = &H0
guid(2) = &HC0
guid(3) = &H46000000
Set GetExcelInstances = New Collection
Do
hwnd = FindWindowExA(0, hwnd, "XLMAIN", vbNullString)
If hwnd = 0 Then Exit Do
hwnd = FindWindowExA(hwnd, 0, "XLDESK", vbNullString)
If hwnd Then
hwnd = FindWindowExA(hwnd, 0, "EXCEL7", vbNullString)
If hwnd Then
If AccessibleObjectFromWindow(hwnd, &HFFFFFFF0, guid(0), app) = 0 Then
GetExcelInstances.Add app.Application
End If
End If
End If
Loop
End Function
指定したファイルのロック状態確認
Private Sub isLocktestを実行すると、指定したフルパスのファイルがロック状態かTrue or Falseでイミディエイトウィンドウに出力します。
Private Sub isLocktest()
Dim isLock As Boolean
Debug.Print isLock = IsFileLocked("C:\Program Files\SeleniumBasic\Examples\Excel\Examples.xlsm")
End Sub
Public Function IsFileLocked(file_path As String) As Boolean
Dim num As Long
On Error Resume Next
Name file_path As file_path
num = Err.Number
On Error GoTo 0
If num <> 0 And num <> 75 Then Error num
IsFileLocked = num <> 0
End Function
ハッシュ値の取得
Private Sub hash_testを実行すると、指定した文字列に対し、ハッシュ値を取得し、イミディエイトウィンドウに出力します。
Private Sub hash_test()
Debug.Print HashFnv("hoge")
End Sub
Public Function HashFnv(str As String)
Dim bytes() As Byte, i As Long, lo As Long, hi As Long
lo = &H9DC5&
hi = &H11C&
bytes = str
For i = 0 To UBound(bytes) Step 2
lo = 31& * ((bytes(i) + bytes(i + 1) * 256&) Xor (lo And 65535))
hi = 31& * hi + lo \ 65536 And 65535
Next i
lo = (lo And 65535) + (hi And 32767) * 65536 Or (&H80000000 And -(hi And 32768))
HashFnv = Hex(lo)
End Function