Не могли бы вы прочитать этот код и сообщить мне, где я ошибаюсь?Ошибка «индекс вне диапазона» при попытке установить вторичную стартовую страницу
Для получения краткого обзора, я читаю HKCU MultiStringValue для вторичных стартовых страниц для домашних страниц IE и применяю свой собственный как первый элемент в списке, сохраняя пресеты пользователя как остальную часть значений.
Когда у меня есть URL и пользователя предварительно все объединенные возвращается, скрипт работает нормально, но если у меня есть только мое множество, то allURLs
выдает ошибку
Subscript из диапазона
даже хотя я размещаю свой принудительный URL-адрес в allURLs(0)
, поэтому он не пуст и правильно инициализирован сверху.
Option Explicit
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 '<<< This is the ERROR
'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
Спасибо Ansgar, я изменю и опубликую результаты. – NYPkgFellos
Хорошо, поэтому я внес изменения, которые улучшили логику все вместе. Я изменил Dim allURLs() на Dim allURLS (0) сверху и внесло изменения, которые вы разместили выше с помощью UBound.Now ошибка изменилась на «Этот массив исправлен или временно заблокирован «на линии». ReDim Сохраняет allURL (UBound (allURLs) +1) ». В настоящее время у меня есть свои собственные, msn и google, возвращающиеся с линии getvalue. Благодарю. – NYPkgFellos
Это 'ReDim allURLs (0)', а не 'Dim allURLs (0)'. Последний создаст массив фиксированного размера. –