如何从VBA中的子过程中获取字符串值?
我需要将一些字符串变量保存到utf-8编码的文件中。 我有一个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
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