Итак, вот соответствующий фрагмент моего кода (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 нет

2
M.Banerjee 18 Дек 2013 в 18:55
3
Какое значение имеют COPSFolder и InfoArray(3)? Также почему If Not Dir(strFullPath, vbDirectory), а не If Not Dir(CProjFolder, vbDirectory). Наконец, у которых есть 2 thens в строке if
 – 
Siddharth Rout
18 Дек 2013 в 19:00
COPSFolder - это существующий каталог. Значение InfoArray (3) - «33733» с типом String. Часть If Not была скопирована / вставлена ​​из другой подпрограммы, в которой буквально есть эта одна строка, поэтому я забыл изменить параметры Dir () таким образом, чтобы это имело смысл. То же самое и с двойными тэнами.
 – 
M.Banerjee
18 Дек 2013 в 19:05
COPSFolder is an existing directory – user2471474 19 secs ago Я знаю, что вы сказали это в сообщении, но что это за value?
 – 
Siddharth Rout
18 Дек 2013 в 19:06
1
Также, отвечая, можете ли вы добавить «@» и имя, подобное mehow made выше? Это гарантирует, что мы сможем получить уведомление, когда вы отправите ответ
 – 
Siddharth Rout
18 Дек 2013 в 20:00
1
Вы сказали, что можете вручную перейти к местоположению папки, но можете ли вы вручную создать новую папку в этом месте?
 – 
aphoria
18 Дек 2013 в 20:17

1 ответ

Лучший ответ

Проблема в том, что вы разделяете с помощью Chr(10). Это не удаляет пробелы. И поэтому, когда вы вызываете ProjFolder = COPSFolder & "InProgress\" & InfoArray(3), у вас есть пробелы в InfoArray(3)

У вас есть 3 варианта

  1. Когда вы создаете массив, удалите там пробелы ИЛИ

  2. Когда вы назначаете InfoArray = GetPartInfo(File.Path), удалите там пробелы ИЛИ

  3. Измените строку ProjFolder = COPSFolder & "InProgress\" & InfoArray(3) на ProjFolder = COPSFolder & "InProgress\" & Trim(InfoArray(3))

4
Siddharth Rout 18 Дек 2013 в 20:23
1
+1 за избиение ... просто попробовал сам с chr (10). Итак (4) используйте GetPartInfo = Split(txtstream.ReadAll, Chr(10))(0)
 – 
user2140173
18 Дек 2013 в 20:25
1
Это именно то, что происходит! Я выберу 3), потому что в настоящий момент я не могу контролировать вывод текстового файла, и это самый простой вариант. Краткое примечание - мне нужно использовать Trim(Str(InfoArray(3))), поскольку просто Trim вызывает ошибку «путь не найден». Но пока это будет работать, и я готов двигаться дальше, потратив часы на одну строчку кода: P Еще раз спасибо!
 – 
M.Banerjee
18 Дек 2013 в 21:42