2016-08-28 22 views
-2

コード:VBAオブジェクト変数が割り当てられていません

辞書項目を変数にすることに問題があります。

Dim facebook As Object, instagram As Object, twitter As Object, name As Object 
name = InputBox("Enter the name of the channel", "Channel") 
Dim type_name As String 
type_name = InputBox("Enter the type of value you want", "Type") 

Set facebook = CreateObject("Scripting.Dictionary") 

With facebook 

    .comparemode = vbTextCompare 
    .Add "brand", 5 
    .Add "post", 6 
    .Add "likes", 7 

End With 

Set instagram = CreateObject("Scripting.Dictionary") 

With instagram 

    .comparemode = vbTextCompare 
    .Add "brand", 8 
    .Add "post", 9 
    .Add "likes", 10 

End With 

Set twitter = CreateObject("Scripting.Dictionary") 

With twitter 

    .comparemode = vbTextCompare 
    .Add "brand", 11 
    .Add "post", 12 
    .Add "likes", 13 

End With 

MsgBox (name & "." & type_name & "=" & name(type_name)) 

このコードは、入力ボックスの後に "名前"という値をとるエラー "オブジェクト変数またはWithブロック変数が設定されていません"を返します。あなたは、スクリプトの最初の行でnameのための間違った型指定されている

答えて

1

Dim facebook As Object, instagram As Object, twitter As Object, name As Object 

をそれは次のようになります。

Dim facebook As Object, instagram As Object, twitter As Object, name As String 

あなたの最後の行にエラーがありますスクリプト:

name(type_name) 

nameは両方とも文字列と辞書オブジェクトを同時に使用できます。この種の構文では、 "facebook"、 "instagram"、 "twitter"というキーを持つ別の辞書オブジェクトを作成し、それらの値として既に作成した辞書を返す必要があります。だから、ネストされた構造を取得します。ここで

はコードです:

Dim facebook As Object, instagram As Object, twitter As Object, channels as Object 
Dim name As String, type_name As String 

name = InputBox("Enter the name of the channel", "Channel") 
type_name = InputBox("Enter the type of value you want", "Type") 

Set facebook = CreateObject("Scripting.Dictionary") 
With facebook 
    .comparemode = vbTextCompare 
    .Add "brand", 5 
    .Add "post", 6 
    .Add "likes", 7 
End With 

Set instagram = CreateObject("Scripting.Dictionary") 
With instagram 
    .comparemode = vbTextCompare 
    .Add "brand", 8 
    .Add "post", 9 
    .Add "likes", 10 
End With 

Set twitter = CreateObject("Scripting.Dictionary") 
With twitter 
    .comparemode = vbTextCompare 
    .Add "brand", 11 
    .Add "post", 12 
    .Add "likes", 13 
End With 

Set channels = CreateObject("Scripting.Dictionary") 
With channels 
    .comparemode = vbTextCompare 
    .Add "facebook", facebook 
    .Add "instagram", instagram 
    .Add "twitter", twitter 
End With 

MsgBox (name & "." & type_name & "=" & channels(name)(type_name)) 
+0

ありがとうございました!出来た!今では別の問題が発生しています。 "Expected Array"というエラーが表示され、 "name(type_name)"の "name"が強調表示されています –

+0

実際、エラーのように、 'name'は配列ではありません。私はあなたが何をすることを期待しているのか理解していません。 – trincot

+0

チャンネルの値(Facebookなど)を保存する "名前"と、タイプ(たとえばブランド)の値を保存する "タイプ名"が必要です。 "name(type_name)"は、そのチャンネルにその特定のタイプの項目を表示する必要があります。 –

関連する問題