共通の変数・定数を準備するVBAを記述する
参照設定で「Microsoft XML,v3.0」を追加した上、以下のように準備します。また、(アプリケーションID)はご自分で取得したものに置き換えてください。
[リスト1]共通の変数・定数を準備する
Const appID As String = "(アプリケーションID)"
(略)
カテゴリ情報取得のVBAを記述する
まず、カテゴリIDを引数に指定して、そのカテゴリ情報を取得するプロシージャgetCateを記述します。
[リスト2]プロシージャgetCate
Sub getCate(cateID As String)
'(1)カテゴリ情報のリクエスト送信
(略)
url = urlTree & "?appid=" & appID & "&category=" & cateID
xmlhttp.Open "GET", url, False
xmlhttp.send
(略)
'(2)データをXMLマップに上書きインポート
resText = xmlhttp.responseText
ActiveWorkbook.XmlMaps("ResultSet_対応付け").ImportXml
xmldata:=resText, overwrite:=True (略)
'(3)コンボボックスの選択肢を設定
Set rng = Sheets("Cate").Range("テーブル1")
cbCate.Enabled = False
cbCate.Clear
For i = 1 To rng.Rows.Count
cbCate.AddItem rng.Cells(i, colCateName).value
Next i
cbCate.Enabled = True
'(4)カテゴリパスを取得
(略)
xmldata.LoadXML resText 'レスポンスをXML文書として格納
Set ResultSet = xmldata.DocumentElement
Set Result = ResultSet.FirstChild
Range("CatePath") =
Result.getElementsByTagName("CategoryPath")(0).Text (略)
'(5)トップカテゴリの場合
If cateID = "0" Then
cbTop.Enabled = False
cbUpper.Enabled = False
End If
'(6)末端カテゴリでない場合
obPrice.Enabled = False
(略)
End Sub
(1)リクエストURLに、appIDと仮引数のカテゴリIDをパラメータとして追加して送信します。
(2)対応付けに、取得したカテゴリ情報を、上書きモードで読み込み、テーブル1を更新しています。
(3)テーブル1のカテゴリ名一覧を、コンボボックスに再設定しています。後述のcbCate_Changedイベントが発生してしまうため、設定中はEnable属性をFalseにしておきます。
(4)カテゴリパスを取得しています。
(5)トップカテゴリの場合、[上位へ][トップへ]ボタンを無効にしています。
(6)末端カテゴリでないので、商品リスト取得関連のオブジェクトを無効にしています。
カテゴリ関連のVBAを記述する
次に、カテゴリを選択した場合のプロシージャcbCate_Changeを記述します。
[リスト3]プロシージャcbCate_Change
Private Sub cbCate_Change()
'(1)選択されたカテゴリの、テーブル1上の該当行を計算
rowCate = cbCate.ListIndex + 1
'(2)選択されたカテゴリの属性に応じた、オブジェクトの有効/無効を設定
Set rng = Sheets("Cate").Range("テーブル1")
'(3)親カテゴリがトップか否かによるオブジェクトの設定
If rng.Cells(rowCate, colParentID) <> 0 Then
cbTop.Enabled = True
cbUpper.Enabled = True
Else
cbTop.Enabled = False
cbUpper.Enabled = False
End If
'(4)カテゴリが末端か否かによるオブジェクトの設定
If rng.Cells(rowCate, colIsLeaf) = False Then
cbLower.Enabled = True
obPrice.Enabled = False
(略)
Else
cbLower.Enabled = False
obPrice.Enabled = True
(略)
End If
'(5)その他のオブジェクトの設定
cbNext.Enabled = False
cbPrev.Enabled = False
End Sub
(1)カテゴリ選択コンボボックスのListIndexプロパティは0始まりなので、1を加算したものをrowCateに設定します。
(2)Cateシートのテーブル1の範囲をrngに設定します。
(3)親カテゴリがトップか否かにより、[上位へ][トップへ]ボタンを無効化/有効化します。
(4)選択カテゴリが末端か否かにより、商品リスト取得関連のオブジェクトを有効化/無効化します。
(5)商品リストは未取得なので、[次頁][前頁]ボタンを無効化します。
その他、カテゴリ情報関連のプロシージャは以下の通りです(コードは省略)。
表11.カテゴリ情報関連のプロシージャ
名前 | 処理内容 |
---|---|
cbLower_Click | 選択されたカテゴリIDの下位のカテゴリを取得 |
cbUpper_Click | 選択されたカテゴリIDの上位のカテゴリを取得 |
cbTop_Click | カテゴリID"0"を引数として最上位のカテゴリを取得 |