1

単一の VBS ファイルに変換したいいくつかの関数を含む小さな VBA スクリプトがあります。

これが私が得たものの例です:

Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long

Private Function ReadIniFileString(ByVal Sect As String, ByVal Keyname As String) As String
    Dim Worked As Long
    Dim RetStr As String * 128
    Dim StrSize As Long
    Dim iNoOfCharInIni As Integer
    Dim sIniString, sProfileString As String

    iNoOfCharInIni = 0
    sIniString = ""
    If Sect = "" Or Keyname = "" Then
        MsgBox "Erreur lors de la lecture des paramètres dans " & IniFileName, vbExclamation, "INI"
        Access.Application.Quit
    Else
        sProfileString = ""
        RetStr = Space(128)
        StrSize = Len(RetStr)
        Worked = GetPrivateProfileString(Sect, Keyname, "", RetStr, StrSize, IniFileName)
        If Worked Then
            iNoOfCharInIni = Worked
            sIniString = Left$(RetStr, Worked)
        End If
    End If
    ReadIniFileString = sIniString
End Function

次に、この関数を使用して、いくつかの値を文字列に入れる必要があります。VBS は、私の var 宣言 ( ) を気に入らないようです(Dim) MyVar As MyType

そのコードを VBS に適合させることができれば、残りの機能も実行できるはずです。これを VBS に適応/変換するにはどうすればよいですか? ありがとうございました。

4

2 に答える 2

2

とにかく、これは以前は見ていなかった落とし穴です。今後の参考のために、iniファイルから値を読み取るための純粋なvbscriptソリューションを紹介します。使用されている正規表現について説明が必要な場合は、コメントを残してください。

'this is the contents of test.ini'
' [Brussels]
' Address = "Postbox 3245_58348 Brussels"

' [Copenhagen]
' Address = "Postbox 2455_5478347 Copenhagen"

' [Paris]
' Address = "Postbox 8546_5412557 Paris"

section = "Brussels"
key = "Address"

const ForReading = 1
set fso = CreateObject("Scripting.FileSystemObject")
set file = fso.OpenTextFile("test.ini", ForReading)

'returns "Postbox 3245_58348 Brussels"'
wscript.echo get_key_of_ini(file.readall, section, key)

function get_key_of_ini(readFile, section, key)
  set regEx = New RegExp
  with regEx
    .Pattern = "(\[" & section & "\]\r\n)([^\[]+)"
    .IgnoreCase = True 
    .Global = True
  end With

  set matches  = regEx.execute(readFile)
  for x = 0 to matches.count-1
    set match = matches(x)
    For i = 1 To match.subMatches.count-1
      subMatches = match.SubMatches(i)
      if trim(split(match.SubMatches(i),"=")(0)) = key then
        get_key_of_ini = trim(split(match.SubMatches(i),"=")(1))
      end if
    Next
  next
end function
于 2012-11-30T17:02:36.333 に答える
1

必要な処理を実行するMDBがあるため、VBSスクリプトを実行してこのmdbを開き、AutoExecマクロを設定して、これらのデータベースを圧縮する関数を実行してから、MDBを自動的に閉じます。これは少しハッキーですが、最も面倒ではないことがわかるかもしれません。

于 2012-11-30T15:22:07.590 に答える