所以这是我的代码的相关代码段(COPSFolder是在其他地方定义的常量):
Sub CreateReport(ByRef InfoArray() As String)
Dim BlankReport As Workbook
Dim ReportSheet As Worksheet
Dim ProjFolder As String
ProjFolder = COPSFolder & "InProgress\" & InfoArray(3)
If Not Dir(ProjFolder, vbDirectory) = vbNullString Then
Debug.Print ProjFolder
MkDir ProjFolder <-----ERROR 76 HAPPENS HERE
End If
在指示的行上,
ProjFolder & "InProgress\"
是现有目录。我正在尝试根据字符串数组中的值在其中创建一个文件夹。这就是让我感到困惑的地方。如果我将“ InfoArray(3)”替换为字符串(例如“ 12345”),则可以正常工作,但是尝试在数组中使用元素会引发错误。数组在被引用的任何地方都被定义为字符串,并且在模块的其他地方没有类型不匹配。
编辑:
Public Const COPSFolder As String = "\\ktch163\COPS\"
edit2:这是另外一件奇怪的事情-如果我将
InfoArray(3)
替换为Str(InfoArray(3))
,这似乎可以工作。我不明白的是,InfoArray(3)的值已经定义为字符串。同样,它在值前面添加了一个空格。我猜我可以使用Right(Str(InfoArray(3)), 5)
,但想弄清楚真正的问题是什么。edit3:根据要求,以下是InfoArray()的填充方式:
Public Function GetPartInfo(ByRef TextFilePath As String) As String()
'Opens text file, returns array with each element being one line in the text file
'(Text file contents delimited by line break character)
Dim fso As FileSystemObject: Set fso = New FileSystemObject
Dim Info As Variant
Dim txtstream As Object
Dim item as Variant
Debug.Print TextFilePath
Set txtstream = fso.OpenTextFile(TextFilePath, ForReading, False)
GetPartInfo = Split(txtstream.ReadAll, Chr(10))
For Each item In GetPartInfo
item = Trim(item)
Next
End Function
稍后在代码中-
InfoArray = GetPartInfo(File.Path)
。 (File.Path正常工作,运行GetPartInfo时没有错误 最佳答案
问题是您正在使用Chr(10)
进行拆分。这不会删除空格。因此,当您呼叫ProjFolder = COPSFolder & "InProgress\" & InfoArray(3)
时,在InfoArray(3)
中有空格
您有3个选择
创建数组时,请删除其中的空格或
分配InfoArray = GetPartInfo(File.Path)
时,删除那里的空格或
将行ProjFolder = COPSFolder & "InProgress\" & InfoArray(3)
更改为ProjFolder = COPSFolder & "InProgress\" & Trim(InfoArray(3))