如何从VBA中的子过程中获取字符串值?

如何从VBA中的子过程中获取字符串值?,vba,Vba,我需要将一些字符串变量保存到utf-8编码的文件中。 我有一个vba脚本,可以从另一个应用程序中检索变量 Sub Main ChanNum = DDEInitiate("MacroEngine","MacroGetVar") Var$ = DDERequest$(ChanNum,"VariableFromOutside") DDETerminate ChanNum sContent = Var MsgBox sContent End Su

我需要将一些字符串变量保存到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
但它不是wroking,因为scocontent变量不是从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:(为什么


如果我理解您的意思,这可能是一个解决方案,我还建议您使用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后通过命令按钮。

您从哪里调用
saveUTF_文件
,它是如何获得参数值的?下面的行是否在其他地方?saveUTF_文件获得了文件路径保存我的utf-8文件和应来自Sub-Main过程的sContent变量,其中是VariableFromOutside也是。我只需要两个脚本一起工作,其他什么都不需要。如果
Main()
的签名是
Function Main()作为String
…可能会更容易混淆。但是
Main
对于函数来说是一个非常糟糕的名字…@retailcoder,yes Main()是一个错误的函数名。但是VBA可能会容忍它。忽略变量类型有一个优势,即在VBScript中使用这种脚本而不进行修改,直接在Windows Shell中执行。VBA不关心函数名是什么:)如果不指定返回类型,它只是隐式地将其
function Main()设为Variant
。同样值得称赞的是显式声明,我甚至建议系统地使用
Option explicit
@retailcoder,是的,在这段代码中,所有都隐式地使用类型Variant。错误来自哪里?你能发布你的错误信息和全部新代码让我们看看吗?
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