SeleniumeBasic examplesユーティリティサービス utilsa

リファレンス

 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
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

VBAを中心とした自動化、効率化の手法を紹介しています。現在は、SeleniumBasicのexamplesを紹介しています。その内、SeleniumBasic以外の手法も掲載したいと思っております。

目次