使用多行文本框值作为文件名vba创建文本文件
大家好,有人可以帮助我们如何使用文本框的多行值作为文件名来创建文本文件吗 我在userform中有一个多行文本框,在其中输入多个值。我的代码可以创建文本文件,如果我只输入一个值,但如果我输入2个或更多值,则不会创建任何内容。您能帮我确定我的代码中缺少哪些代码只是为了创建文本文件,并且文件名应该是多行文本框中的每个值吗?我已经试过搜索了,但似乎没有什么话题和我关心的一样。提前感谢您的帮助 下面是我的代码使用多行文本框值作为文件名vba创建文本文件,vba,Vba,大家好,有人可以帮助我们如何使用文本框的多行值作为文件名来创建文本文件吗 我在userform中有一个多行文本框,在其中输入多个值。我的代码可以创建文本文件,如果我只输入一个值,但如果我输入2个或更多值,则不会创建任何内容。您能帮我确定我的代码中缺少哪些代码只是为了创建文本文件,并且文件名应该是多行文本框中的每个值吗?我已经试过搜索了,但似乎没有什么话题和我关心的一样。提前感谢您的帮助 下面是我的代码 Private Sub CREATE_REQ_Click() Dim sExport
Private Sub CREATE_REQ_Click()
Dim sExportFolder, sFN
Dim oFS As Object
Dim oTxt As Object
sExportFolder = TextBox1 ' "D:\TEST\REQ_FILES_CREATED_HERE"
Set oFS = CreateObject("Scripting.Filesystemobject")
For Each strLine In TextLogistic
'Add .txt to the article name as a file name
sFN = "-" & TextLogistic.Value & ".req"
Set oTxt = oFS.OpenTextFile(sExportFolder & "\" & ListBox1 & sFN, 2, True)
oTxt.Write combo1.Value
oTxt.Close
Next
End Sub
使用Split()从文本框内容创建一个数组,然后循环该数组并创建文件。@TimWilliams:
Split()
关于什么;)@sayjon:在文本编辑器(例如记事本++)中复制多行文本,并使不可打印的字符可见,然后您就会看到问题。使用Replace()
或按照Tim建议的Split()
删除字符,然后Join()
。您可能需要vbLf
need@TimWilliams:对不起,不小心按了回车键;),但它应该是vbCrLf
?为了安全起见,我会先Replace(myString,Chr(10),vbNullString)
然后Replace(myString,Chr(13),vbNullString)
。我是Vba新手,能告诉我怎么做吗,或者给我举个例子。。这对我来说很复杂。谢谢你…很好!一些赏金的提示;)。定义所有vartypes explict、Dim sExportFolder、sFN
get implict variant,但应为字符串(如key
和sFN
)。在每个模块顶部使用选项Explicit
(必须声明所有变量),以防止输入错误。无需替换(TextLogistic,Chr(13),”)
,只需拆分(TextLogistic,Chr(13)和Chr(10),”)
。最后一个:检查sExportFolder&“\”&ListBox1&sFN
中的..Hi@BitAccesser您是否可以重写我的答案以便我更清楚?我对Vba真的很陌生,这就是为什么如果它是工作,我不知道检查语法是否错误或正确的原因。如果我看到正确的语法,它会给我更多启发。非常感谢。
Here's the solution for the above issue.
Private Sub CREATE_REQ_Click()
Dim sExportFolder, sFN
Dim oFS As Object
Dim oTxt As Object
Dim v As Variant
Dim vlist As Variant
Dim key As Variant
Set oFS = CreateObject("Scripting.Filesystemobject")
vlist = Split(Replace(TextLogistic, Chr(13), ""), Chr(10))
For Each v In vlist
key = Trim(v)
sFN = "-" & key & ".req"
Set oTxt = oFS.OpenTextFile(sExportFolder & "\" & ListBox1 & sFN, 2, True)
oTxt.Write combo1.Value
oTxt.Close
Next
End Sub