2016-03-23 5 views
0

古いロジックには様々なエラーがあり、1つの条件に1つのエラーに絞り込まれているので、コードは消去され、前のポストから変更されます。現在、URLが値として読み取られていて、配列が初期化されていても添字が範囲外エラーになると、現在エラーが発生します。ユーザーがプリセット項目を持っているか、またはキーが全くない場合、他の条件は完全に機能します。ありがとう。あなたはone field too bigそれを作成するためアレイを使用して複数のマルチストリング値をレジストリに追加する

option explicit 
    'on error resume next 
    Dim ObjName,oADSysInfo,strComputer 
    Dim objReg,IE_Main,mstrValName,strFunctionIntranet,strNYHomepage,multiStringValues(),allURLs(),itemname,a,return 
    Set oADSysInfo = CreateObject("ADSystemInfo") 
    Set ObjName = GetObject("LDAP://" & oADSysInfo.UserName) 
    strComputer = "." 
    Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv") 
    Const HKCU = &H80000001 
    IE_Main = "Software\Microsoft\Internet Explorer\Main" 
    mstrValName = "Secondary Start Pages" 

    strNYHomepage = "http://www.google.com" 
    strFunctionIntranet = "www.mycompany.com" 

    SetHomePage 

    Sub SetHomepage 

      objReg.setStringValue HKCU,IE_Main,"Start Page",strNYHomepage 

      'Reading MultiStringValue of "Secondary Start Pages" for HKCU and continuing if it has something preset. 
      return = objReg.getMultiStringValue (HKCU,IE_Main,mstrValName,multiStringValues) 

      If return=0 Then 
         a=0 
         'Reading all items currently set to make sure users retain their existing URLs. 
         For Each itemname In multiStringValues 

         'Only continue if any of the existing URLs DO NOT MATCH what we are enforcing as the URL. 
          If itemname <> strFunctionIntranet Then 
           WScript.Echo itemname    
           WScript.Echo "itemname is NOT equal intranet" 
           a = a + 1 
           ReDim Preserve allURLs(a) 
           allURLs(a) = itemname 
           'a = a + 1 
          End If  
         Next 

         objReg.DeleteValue HKCU,IE_Main,mstrValName 
         'Enforce our URL to always be the first item. 
         allURLs(0)=strFunctionIntranet 

         'Set the new MultiStringValue registry key back. 
         objReg.setMultiStringValue HKCU,IE_Main,mstrValName,allURLs 
         WScript.echo "finished setting all secondary tabs... " 

      Else 

       strFunctionIntranet = Array(strFunctionIntranet) 
       objReg.setMultiStringValue HKCU,IE_Main,mstrValName,strFunctionIntranet      

      End If 

    End Sub 
Wscript.Quit 
+0

あなたが使用することはできません '配列()'代入の左側にあります。さらに、 'allURLs'はすでに配列なので、なぜ' Split'ですか? –

+0

こんにちはAnsgar、実際には、配列(allURLs)とReDimを取り出しましたが、型の不一致エラーです。助けてください。探して、私の質問にすばやく反応してくれてありがとう。 – NYPkgFellos

+0

正確なエラーメッセージとそれを呼び出す行を表示してください。あなたのコードによると、 "無効なパラメータ"エラーが発生しているはずです。 –

答えて

1

あなたの配列は、空の要素が含まれています。

変更この行:この中

ReDim Preserve allURLs(a+1) 

ReDim Preserve allURLs(a) 
+0

助けてくれてありがとう、私はそれをより読みやすくし、あなたが提供したものを変更するためにコードを変更しました。上記のコードを新しいロジックで更新しました。ありがとう。 – NYPkgFellos

+0

これについて別の質問があったことを認識していない、問題[ここ](http://stackoverflow.com/a/37142455/692942)を拡張しました。 – Lankymart

関連する問題