Excelに対応してコンボボックスを選択するマクロ
Excelのコンボボックスの表記と同じ表記のものをゆっくりムービーメーカーという別アプリの指定したコンボボックスから選ぶVBAマクロを開発したいです。カスタムと書かれたコンボボックスを動かしたいです。ですが、他にもclassnameやAoutmationIDが同じコンボボックスがあります。その中で自分の指定したコンボボックスを動かす方法も教えて頂きたいです。エクセルの「セリフ」sheetのE列にコンボボックスがあり、コンボボックスの中身は「表情」sheetのA列の表記(例魔理沙笑う)
Excelのコンボボックスの表記と同じ表記のものをゆっくりムービーメーカーという別アプリの指定したコンボボックスから選択するVBAマクロを開発したいです。見づらいですが画像の右端の真ん中くらいにあるカスタムと書かれたコンボボックスを動かしたいです。ですが、他にもclassnameやAoutmationIDが同じコンボボックスがあります。その中で自分の指定したコンボボックスを動かす方法も教えて頂きたいです。エクセルの「セリフ」sheetのE列にコンボボックスがあり、コンボボックスの中身は「表情」sheetのA列の表記(例:魔理沙笑う)です。ゆっくりムービーメーカーのコンボボックスにも「表情」sheetのA列の表記(例:魔理沙笑う)と同じものが複数存在します。私はゆっくりムービーメーカーのコンボボックスの中からExcelのコンボボックスの表記と同じ表記のものを選択するVBAマクロを開発したいです。ご指導よろしくお願いします。下のマクロを改良したいですが、あくまで前のバージョンかつ私が作りたいマクロと似ていますが違うものなので参考程度にお願いします。
これと全く違うスクリプトでも構いません。よろしくお願いいたします。
Private Sub zputTachieParam(Param() As Variant)
Dim i, j, k, row_blank, f_hetitem As Integer
Dim x_char As String
Dim tmp, x_last_item As Variant
Dim elmYukkuri_tachie As IUIAutomationElement
'RegExpオブジェクトの作成
Dim reg As Object
Set reg = CreateObject("VBScript.RegExp")
'正規表現の指定
With reg
.Pattern = "[^0-9]" 'パターンを指定
.IgnoreCase = False '大文字と小文字を区別するか(False)、しないか(True)
.Global = True '文字列全体を検索するか(True)、しないか(False)
End With
hWnd = FindWindowA(vbNullString, C_アプリ名)
Set uiAuto = New CUIAutomation
Set elmYukkuri = uiAuto.ElementFromHandle(ByVal hWnd)
Set iCnd = uiAuto.CreatePropertyCondition(UIA_ClassNamePropertyId, "ItemEditorView")
Set elmYukkuri = elmYukkuri.FindFirst(TreeScope_Subtree, iCnd)
Set iCnd = uiAuto.CreatePropertyCondition(UIA_ClassNamePropertyId, "ScrollViewer")
Set elmYukkuri = elmYukkuri.FindFirst(TreeScope_Subtree, iCnd)
Set iCnd = uiAuto.CreatePropertyCondition(UIA_ClassNamePropertyId, "Editor")
Set elmYukkuri = elmYukkuri.FindFirst(TreeScope_Subtree, iCnd)
Set iCnd = uiAuto.CreatePropertyCondition(UIA_NamePropertyId, "立ち絵")
Set elmYukkuri = elmYukkuri.FindFirst(TreeScope_Subtree, iCnd)
Dim elms_ComboBox As IUIAutomationElementArray
Set iCnd = uiAuto.CreatePropertyCondition(UIA_ClassNamePropertyId, "ComboBox")
Set elms_ComboBox = elmYukkuri.FindAll(TreeScope_Children, iCnd)
Dim ptnVal As IUIAutomationSelectionItemPattern
f_hetitem = 0
x_last_item = ""
For j = 0 To elms_ComboBox.Length - 1
tmp = Split(elms_ComboBox.GetElement(j).CurrentHelpText, "\")
If UBound(tmp) > 0 Then
'選択されてるコンボボックス
'現状の設定とパラメータ値を比較
If Param(j) <> Int(Replace(tmp(UBound(tmp)), ".png", "")) Then
elms_ComboBox.GetElement(j).SetFocus
'ENDキーで最後の選択肢に持っていく
wshSendKeys "{END}", True
f_hetitem = 0
For k = 0 To 200
elms_ComboBox.GetElement(j).SetFocus
'Debug.Print "1> " & elms_ComboBox.GetElement(j).CurrentHelpText
tmp = Split(elms_ComboBox.GetElement(j).CurrentHelpText, "\")
If UBound(tmp) > 0 Then
'Debug.Print "2> " & reg.Replace(tmp(UBound(tmp)), "")
If Param(j) = Int("0" & reg.Replace(tmp(UBound(tmp)), "")) Then
f_hetitem = 1
Exit For
End If
wshSendKeys "{UP}", True
Else
'Debug.Print "nohit!"
wshSendKeys "{DOWN}", True
Exit For
End If
Next
End If
End If
Next
Sleep 100
End Sub
お礼
整理して教えていただけると なるほどと思いました。 参考にさせていただきます。 ありがとうござました。