2011-03-17 224 views
0

好的,所以我有一堆Word模板,它們在Document_New上讀取註冊表中的某些值並將它們插入到文檔的書籤中。我迄今爲止所做的這種方式是首先從INI文件中讀取,該INI文件規定模板中的書籤被稱爲什麼。這是一行一行地完成的,它又被放入一個數組中。然後我瀏覽這個數組並逐個讀取註冊表。word vba - 讀取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

您可以只使用一個字典(從MS腳本庫)。

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文件到詞典移動:在兩種情況下,您只需按名稱引用值。儘管如此,它的代碼更少... 我不確定首先將它們轉移到數組的目的嗎?你的代碼是隻返回數組的函數的一部分嗎?

Tim

+0

不,它可能寫得不好,首先。基本上,我正在做的是將數據從註冊表加載到模板中的預定義書籤。 ini文件告訴代碼註冊表中每個鍵的名字。然後它將從註冊表中收集的數據加載到數組中,並將每個數據提供給相同名稱的相應書籤。如果您有任何建議,請隨時攜帶:) – 2011-03-17 19:49:06

+0

如果您不需要存儲ini /註冊表查找結果,只需要在書籤中插入即可,只需採用循環方法,並從ini> read從註冊表>插入到循環的每個迭代中的書籤。 – 2011-03-18 18:59:18

+0

我真的不需要存儲他們沒有。我只需要查看INI文件中的值,查看書籤並查看書籤是否被稱爲「書籤+ INI值」,然後使用與INI鍵中的值相同的值,並從註冊表項,然後將其插入書籤。 – 2011-03-28 05:22:16

相關問題