Word vba - читает все значения из INI-файла и помещает их в массив - PullRequest
0 голосов
/ 17 марта 2011

Хорошо, у меня есть несколько шаблонов Word, которые в Document_New читают реестр для некоторых значений и вставляют их в закладки в документе. До сих пор я делал так, чтобы сначала прочитать INI-файл, который определяет, как называются закладки в шаблонах. Это делается построчно, что снова помещается в массив. Затем я прохожу этот массив и читаю реестр по одному.

Теперь, можно ли прочитать весь раздел INI и поместить его в массив напрямую? Как это?:

Dim strIniKey as String
strIniKey = INI key

If bookmark exists strIniKey Then
   pick up registry string from strIniKey
   Insert into bookmark
End if

И просто зациклите это на каждом значении INI?

Вот как я это делаю сейчас:

    Dim objShell
Dim strShell
Dim strDataArea
Dim Verdier() As String
Dim regPath
Dim regString
Dim Felter
Dim WScript

' Klargjør stringverdier fra INI-fil

regPath = ReadIni(File, "Registry", "Path")
regString = ReadIni(File, "Registry", "String")
regStrFornavn = ReadIni(File, strRegArea, "Fornavn")
regStrEtternavn = ReadIni(File, strRegArea, "Etternavn")
regStrInitialer = ReadIni(File, strRegArea, "Initialer")
regStrBrevnavn = ReadIni(File, strRegArea, "Brevnavn")
regStrStilling = ReadIni(File, strRegArea, "Stilling")
regStrStilling_EN = ReadIni(File, strRegArea, "Stilling_EN")
regStrAvdeling = ReadIni(File, strRegArea, "Avdeling")
regStrAvdeling_EN = ReadIni(File, strRegArea, "Avdeling_EN")
regStrEnhetoffnavn = ReadIni(File, strRegArea, "Enhetoffnavn")
regStrEnhetoffnavn_EN = ReadIni(File, strRegArea, "Enhetoffnavn_EN")
regStrVisitaddress1 = ReadIni(File, strRegArea, "Visitaddress1")
regStrVisitpostnrsted = ReadIni(File, strRegArea, "Visitpostnrsted")
regStrPostadresse1 = ReadIni(File, strRegArea, "Postadresse1")
regStrPostadresse2 = ReadIni(File, strRegArea, "Postadresse2")
regStrPostnrsted = ReadIni(File, strRegArea, "Postnrsted")
regStrLeveringsadresseNr = ReadIni(File, strRegArea, "LeveringsadresseNr")
regStrLeveringsadresseSted = ReadIni(File, strRegArea, "LeveringsadresseSted")
regStrTelesentralbord = ReadIni(File, strRegArea, "Telesentrbord")
regStrDirekteinnvalg = ReadIni(File, strRegArea, "Direkteinnvalg")
regStrMobil = ReadIni(File, strRegArea, "Mobil")
regStrTelefax = ReadIni(File, strRegArea, "Telefax")
regStrWebadresse = ReadIni(File, strRegArea, "Webadresse")
regStrSentrepostmottak = ReadIni(File, strRegArea, "Sentrepostmottak")
regStrEpost = ReadIni(File, strRegArea, "Epost")
regStrForetaksnr = ReadIni(File, strRegArea, "Foretaksnr")

'Klargjør array av alle verdier fra INI-fil
Felter = Array(regStrFornavn, regStrEtternavn, regStrBrevnavn, regStrInitialer, _
regStrStilling, regStrStilling_EN, regStrAvdeling, regStrAvdeling_EN, regStrEnhetoffnavn, _
regStrEnhetoffnavn_EN, regStrVisitaddress1, regStrVisitpostnrsted, regStrPostadresse1, _
regStrPostadresse2, regStrPostnrsted, regStrLeveringsadresseNr, regStrLeveringsadresseSted, _
regStrTelesentralbord, regStrDirekteinnvalg, regStrMobil, regStrTelefax, regStrWebadresse, _
regStrSentrepostmottak, regStrEpost, regStrForetaksnr)

Это в основном создает массив, полный значений из файла INI.

Код продолжает захватывать каждую часть массива и проходить по закладкам, искать совпадения и затем вставлять соответствующее значение из реестра.

Set objShell = CreateObject("Wscript.Shell")

    For iTeller = 0 To UBound(Felter)
    Dim sBookMarkName, sVerdi
    Dim myRange As Range

    On Error Resume Next
    sBookMarkNametemp = "Bookmark" & Felter(iTeller)

    sVerdi = ""
    sVerdi = objShell.RegRead(regPath & "\" & Felter(iTeller))
    sBookMarkName = ""
    sBookMarkName = ActiveDocument.Bookmarks(sBookMarkNametemp).Name

    With ActiveDocument
        If .Bookmarks.Exists(sBookMarkNametemp) Then
        Set myRange = .Bookmarks(sBookMarkName).Range
        myRange.Text = sVerdi
        .Bookmarks.Add sBookMarkName, myRange
        End If
        End With

    On Error GoTo 0

    objShell = Nothing
WScript = Nothing

Каждая закладка называется «закладка» + значение каждой строки из INI. Например, "bookmarkFIRSTNAME" и т. Д.

1 Ответ

1 голос
/ 17 марта 2011

Вы можете просто использовать словарь (из библиотеки MS Scripting).

Dim oDict as new scripting.dictionary
Dim arrVals, x

arrVals = Array("Path","String","Fornavn") 'etc etc
for x=lbound(arrVals) to ubound(arrVals)
   oDict.Add arrVals(x), ReadIni(File, strRegArea, arrVals(x))
next x

Теперь вы можете ссылаться на свои значения как (например.): oDict ( "Путь")

Тем не менее, все, что вы сделали, это переместили их из INI-файла в словарь: в обоих случаях вы просто ссылаетесь на значения по имени. Тем не менее, это меньше кода ... Я не уверен в цели первой передачи их в массив? Является ли ваш код частью функции, которая просто возвращает массив?

Тим

...