1

文字列変数をutf-8でエンコードされたファイルに保存する必要があります。別のアプリケーションから変数を取得できる vba スクリプトがあります。

Sub Main
    ChanNum = DDEInitiate("MacroEngine","MacroGetVar")
    Var$ = DDERequest$(ChanNum,"VariableFromOutside")
    DDETerminate ChanNum
    sContent = Var
    MsgBox sContent         
End Sub

そのスクリプトは sContent のみを表示できますが、以下に示すように、次のスクリプトでこの文字列をさらに処理する必要があります

Sub saveUTF_File(FileUrl,sCode)
    ' save text into utf-8 format
    Set objStream = CreateObject("ADODB.Stream")
    With objStream
        .Open
        .Charset = "utf-8"
        .Position = objStream.Size
        .WriteText=sCode
        .SaveToFile FileUrl,2
        .Close
    End With
    Set objStream = Nothing
End Sub

FilePath = "C:\file.html"
saveUTF_File FilePath,sContent

しかし、sContent 変数が Sub Main プロシージャから継承されていないため、うまくいきません。私の質問は、どうすればそれができるのですか? 助けてくれてありがとう。

私のコードは今

    Function TextOutside() As Variant

    ChanNum = DDEInitiate("MacroEngine","MacroGetVar")
    Var$ = DDERequest$(ChanNum,"VariableFromOutside")
    DDETerminate ChanNum
    TextOutside = Var
    ' MsgBox TextOutside        

    End Function

    Sub saveUTF_File(FileUrl,sCode)

    Set objStream = CreateObject("ADODB.Stream")
    With objStream
    .Open
    .Charset = "utf-8"
    .Position = objStream.Size
    .WriteText=sCode
    .SaveToFile FileUrl,2
    .Close
    End With
    Set objStream = Nothing
    End Sub

    FilePath = "C:\file.html"
    sContent = TextOutside()
    saveUTF_File FilePath, sContent

以下のスクリプトはエラーなしで動作しますが、残念ながら結果を C:\file.html に保存したくありません :( なぜ?

    Global sContent

    Sub Main()
    ChanNum = DDEInitiate("MacroEngine","MacroGetVar")
    Var$ = DDERequest$(ChanNum,"VariableFromOutside")
    DDETerminate ChanNum
    sContent = Var
    MsgBox sContent         
    End Sub

    Sub saveUTF_File(FileUrl,sCode)
    ' save text into utf-8 format
    Set objStream = CreateObject("ADODB.Stream")
    With objStream
    .Open
    .Charset = "utf-8"
    .Position = objStream.Size
    .WriteText = sCode
    .SaveToFile FileUrl,2
    .Close
    End With
    Set objStream = Nothing
    End Sub

    Sub DoAll()
    Dim FilePath 
    '
    ' Main is called before here.
    '
    FilePath = "C:\file.html"
    saveUTF_File FilePath, sContent
    End Sub
4

1 に答える 1

3

私があなたを理解していれば、これは解決策かもしれません.Dimキーワードですべての変数を明示的に宣言することも提案します.ダーティグローバル変数ソリューションを使用しましょう:

Global sContent

Sub Main()
  ChanNum = DDEInitiate("MacroEngine","MacroGetVar")
  Var$ = DDERequest$(ChanNum,"VariableFromOutside")
  DDETerminate ChanNum
  sContent = Var
  MsgBox sContent         
End Sub

Sub saveUTF_File(FileUrl,sCode)
  ' save text into utf-8 format
  Set objStream = CreateObject("ADODB.Stream")
  With objStream
    .Open
    .Charset = "utf-8"
    .Position = objStream.Size
    .WriteText=sCode
    .SaveToFile FileUrl,2
    .Close
  End With
  Set objStream = Nothing
End Sub

Sub DoAll()
  Dim FilePath 
'
' Main is called before here.
'
  FilePath = "C:\file.html"
  saveUTF_File FilePath, sContent
End Sub

Main を呼び出した後、コマンド ボタンで DoAll() を呼び出します。

于 2013-10-26T23:44:02.773 に答える