Всем добрый день. Помогите понять, что не так. В 2010 Excel код отрабатывает как надо, а в 2007 - выдает ошибку: Run-time error '1004': Method 'Open' of Object 'Workbook' failed Причем в таком месте, что вообще непонятна причина. Возможно у кого-то будут мысли. Очень надеюсь на "Сторожил"! Ошибка в строке 67: Set iTempWB = Application.Workbooks.Open(Filename:=sPath, ReadOnly:=True) (код см. на 'Лист1'). Там только код - сам по себе работать не будет.
Сидеть и вылавливать глазами ошибки дело не очень занятное. Варианты есть: хотя бы сказать нам, что у Вас в переменной sPath. Есть ли на конце переменной MyPath слеш или его нет. Содержит ли MyName расширение или нет. И обратная Hugo позиция - действительно ли так нужен FSO? Может стандартными средствами: Просмотреть все файлы в папке
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Это не принципиально, можно и стандартными средствами, но почему ошибка возникает потом? Она, мне кажется, не связана с FSO. (2007 SP3) - все это должен нормально воспринять.
Иногда только промахнувшись, понимаешь как ты попал.
Lock, ну вот когда хотя бы скажете что у Вас содержат переменные sPath, MyPath и MyName - тогда может дело сдвинется. А то Вы хотите, чтобы мы тут нерабочий код глазами потестили и сразу ошибку выдали. На вид нормально - но я задал ряд вопросов, которые меня интересуют, чтобы сделать хоть какой-то вывод.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Но все-равно, ради принципа, хотелось бы разобраться. Отвечаю: sPath - в ней полный путьк файлу с названием файла и его расширением (String). MyPath - в конце переменной слэш есть (String). MyName - в конце файла есть расширение. Надеюсь на дальнейший ход вашего диагностического поиска.
Иногда только промахнувшись, понимаешь как ты попал.
Может тоже посмотрите на мою проблему. В прошлый раз вы меня натолкнули на суперидею, которую удалось несколько развить. В любом случае, благодаря вам был достигнут желаемый результат.
Иногда только промахнувшись, понимаешь как ты попал.
А по WinAPI подсказку дадите? В моем сегодняшнем другом посте - суть проблемы - на форме я отразил нужную мне иконку в заголовке, а код для изменения иконки application в заголовке не работает. Если не сложно посмотрите???
Иногда только промахнувшись, понимаешь как ты попал.
Ясно. Файл открывается вообще? Или нет? Пробовали открыть его не кодом? Возможно слишком много символов в полном пути файла. Возможно файл поврежден(хотя в данном случае ошибка была бы другая, но все же)
Еще можно попробовать отказаться от обновления связей:
Код
Set iTempWB = Application.Workbooks.Open(Filename:=sPath, UpdateLinks:=False, ReadOnly:=True)
Еще помню наступал на грабли при программном открытие файла - разные настройки проводника с отображением и скрытием расширений. В результате у меня работало, а у пользователя нет. На старом форуме писалось, искать лень.
Игорь, такая проблема есть, если в макросе указывать без расширения. Тогда если в настройках ОС установлено "скрывать расширения файлов" - работать будет. А если "не скрывать" - не будет.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Полностью переписал код - продолжает ругаться на Workbooks.Open MyPath & MyName Причем на двух машинах сразу, где 2007 стоит. А на моем компе на 2007 работает нормально. Может какие-то разрешения не стоят в системе?
Кто-то может дать совет???
Иногда только промахнувшись, понимаешь как ты попал.
Скопируйте сюда полный путь и имя файла, который без проблем открывается в Excel вручную. И напишите также, чему для открытия этого файла равно (приведите конкретное текстовое значение): MyPath & MyName
У меня да. У человека, который запускал у себя не знаю. Только последний код не работает. Путь, который отрываю вручную -
Код
C:\User\Manager6\Desktop\Тестирование\Итоги\Общие итоги\Общие итоги_2013.11.05_22-33-14.xlsx
MyPath = GetFolderPath("Choose Итоги folder...", ThisWorkbook.Path)
MyName = Dir(MyPath)
Function GetFolderPath(Optional ByVal Title As String = "Выберите папку", _
Optional ByVal InitialPath As String = "c:\" ;) As String
Dim PS As String: PS = Application.PathSeparator
With Application.FileDialog(msoFileDialogFolderPicker)
If Not Right$(InitialPath, 1) = PS Then InitialPath = InitialPath & PS
If Worksheets("Данные" ;) .Range("D13" ;) .Value = "Русский" Or Worksheets("Данные" ;) .Range("D13" ;) .Value = "" Then
.ButtonName = "Выбрать": .Title = Title: .InitialFileName = InitialPath
Else
.ButtonName = "Select": .Title = Title: .InitialFileName = InitialPath
End If
If .Show <> -1 Then Exit Function
GetFolderPath = .SelectedItems(1)
If Not Right$(GetFolderPath, 1) = PS Then GetFolderPath = GetFolderPath & PS
End With
End Function
Иногда только промахнувшись, понимаешь как ты попал.
На первом листе скопировал кусок кода - который просматривает все эксель файлы в вышеуказанной папке и копирует их на другой лист для сохранения в книгу. На втором листе второй вариант кода - тоже не работает на 2007, но не у меня, а у другого человека.
Если в папке несколько файлов, то неизвестно какой из них попадет в MyName. Например, там может быть файл 1.bmp , имя которого скорее всего и будет в MyName
В Tools-References MISSING's нет - это я сразу проверил.
А в указанной папке только excel - файлы. Других быть не может. Папка создается сама, файлы в нее выгружаются - только excel. Причина не в этом, я думаю. А какие варианты еще возможны?
Иногда только промахнувшись, понимаешь как ты попал.
Кстати, там есть проверка, на всякий случай, на не excel файлы, до присвоения имени просто не дойдет и процедура возобновится вновь, до последнего неоткрытого excel файла.
Иногда только промахнувшись, понимаешь как ты попал.
Вы же сами заметили, что код проверить не удастся - есть ссылки на какие-то ячейки, много лишнего, не относящегося к проблеме. Чтобы локализовать проблему предложите тому человеку протестировать код попроще, например:
Код
Sub Test1()
Const File = "C:\Temp\Test.xls"
If Dir(File) = "" Then
MsgBox "Создайте и сохраните тестовый файл:" & vbLf & File
Else
Workbooks.Open File
End If
End Sub