tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルGetObject
記事No12635
投稿日: 2008/06/26(Thu) 10:15
投稿者VB
☆VB☆
With GetObject("winmgmts:\root\default:StdRegProv")
    Dim keyList() As Variant, varKey As Variant, varValue As Variant
    .EnumKey HKEY_LOCAL_MACHINE, subkey, keyList
    For Each varKey In keyList
        If .GetStringValue(HKEY_LOCAL_MACHINE, _
            subkey & "\" & varKey, KeyName, varValue) = 0 Then
            略
        End If
    Next
End With

この文でレジストリのサブキーの名前を取得するプログラムを書いたのですが
keyListにその取得したサブキー名が入るわけですが
もしもそこに何も入ってこなかった場合、
if keyList = "" then
    For Each varKey In keyList
       If .GetStringValue(HKEY_LOCAL_MACHINE, _
            subkey & "\" & varKey, KeyName, varValue) = 0 Then
            略
        End If
    Next
end if
としてkeyListに何も入っていなかったらfor文は実行せずにしようと思ったのですが
型が違うようで実行できません。
keyListにサブキー名が入ってこない場合に、for文を実行させないプログラムの
書き方を教えてください。
宜しくお願い致します。

[ツリー表示へ]
タイトルRe: GetObject
記事No12636
投稿日: 2008/06/26(Thu) 10:24
投稿者いな

>if keyList = "" then
>
>ならばkeyListが""の時、For文を実行しようとしている?
>と見えるのですがそこは、大人の対応でさらっとスルーして置きます。

こんな感じでいかが?配列の要素数をUboundなどで調べてみましょう。
ここでは、動的配列であるKeyListが初期化されていない可能性を考慮し、
少し工夫した自作関数を利用しています。

if cmnUbound(keyList) >= 0 then
    For Each varKey In keyList
       If .GetStringValue(HKEY_LOCAL_MACHINE, _
            subkey & "\" & varKey, KeyName, varValue) = 0 Then
            略
        End If
    Next
end if


'*********************************************************************
' 機    能  : 配列の要素数を返す
' 引 き 数  : Ary  配列
'*********************************************************************
Public Function cmnUBound(Ary() As Variant) As Long
    
    On Error GoTo cmnUBound_ERR
    
    cmnUBound = UBound(Ary)
    Exit Function

cmnUBound_ERR:
    If Err.Number = 9 Then
        cmnUBound = -1
    End If
End Function

[ツリー表示へ]
タイトル解決☆
記事No12637
投稿日: 2008/06/26(Thu) 10:47
投稿者VB
>
> >if keyList = "" then
> >
> >ならばkeyListが""の時、For文を実行しようとしている?
> >と見えるのですがそこは、大人の対応でさらっとスルーして置きます。
>
> こんな感じでいかが?配列の要素数をUboundなどで調べてみましょう。
> ここでは、動的配列であるKeyListが初期化されていない可能性を考慮し、
> 少し工夫した自作関数を利用しています。
>
> if cmnUbound(keyList) >= 0 then
>     For Each varKey In keyList
>        If .GetStringValue(HKEY_LOCAL_MACHINE, _
>             subkey & "\" & varKey, KeyName, varValue) = 0 Then
>             略
>         End If
>     Next
> end if
>
>
> '*********************************************************************
> ' 機    能  : 配列の要素数を返す
> ' 引 き 数  : Ary  配列
> '*********************************************************************
> Public Function cmnUBound(Ary() As Variant) As Long
>    
>     On Error GoTo cmnUBound_ERR
>    
>     cmnUBound = UBound(Ary)
>     Exit Function
>
> cmnUBound_ERR:
>     If Err.Number = 9 Then
>         cmnUBound = -1
>     End If
> End Function

なるほど〜。
こんな方法があったんですね。。
本当に助かりました。
ありがとうございました。。<(_ _)>

[ツリー表示へ]