Страницы: 1
RSS
2 возможных пути открытия файла в VBA
 
Добрый день,

Подскажите, можно ли решить такую задачу:
Работаю с файлом, в котором прописана VBA-процедура, на работе и дома.
Процедура эта в процессе работы обращается к еще одному файлу (открывает его, производит определенные действия), который на работе лежит на диске Y, дома на диске С. Имя файла одинаковое, пути к нему разные.

Сейчас обращение к этому файлу выглядит следующим образом:


1ый путь:
Код
Sub MyCode ()


ChDir _
    "C:\Users\C\Desktop\FOLDER"    
Workbooks.Open Filename:= _
    "C:\Users\Í\Desktop\FOLDER\FILENew.xls" 

дальше код работы с открытым файлом
Дальше работа с открытым файлом.
И когда мне надо поменять путь к этому файлу, я его просто переписываю руками:

2 путь:
Код
Sub MyCode ()


ChDir _
    "Y:\Public\Folder1"

Workbooks.Open Filename:= _
    "Y:\Public\Folder1\FILENew.xls" 

дальше код работы с открытым файлом

Вопрос: можно ли каким-то образом прописать оба пути, чтобы при обращении по первому пути (через диск С), если файл найден, продолжалась работа, а, если не найден, обращение происходило по второму пути и далее, опять же, продолжалась работа.

Думалось сделать через on error resume next так:
Код
Sub MyCode ()

On error resume next
ChDir _
    "Y:\Public\Folder1"

Workbooks.Open Filename:= _
    "Y:\Public\Folder1\FILENew.xls" 

ChDir _
    "C:\Users\C\Desktop\FOLDER"    
Workbooks.Open Filename:= _
    "C:\Users\Í\Desktop\FOLDER\FILENew.xls" 
on error goto 0

дальше код работы с открытым файлом

но очевидно, что, если ошибки при обращении по 1 пути нет, то как избежать обращения ко второму пути?
спасибо за советы.
 
If Err <> 0 Then
 
Попробуем. спасибо!
 
:?:  
Код
If Err <> 0 Then
    PathName = ChDir("Y:\Public\Folder1")
Else
    PathName = ChDir("C:\Users\C\Desktop\FOLDER")
End If
Workbooks.Open Filename:=PathName & "\FILENew.xls"
Согласие есть продукт при полном непротивлении сторон
 
Используйте диалоговое окно выбора файла
   Set FD = Application.FileDialog(msoFileDialogFilePicker)
 
Kuzmich, Sanja, спасибо за советы. Начну с предложения Sanja (для сохранения "молчаливой" работы процедуры), если не подойдет, то окно выбора файла уж точно поможет. вопрос, думаю, закрыт. Спасибо.
 
А где находится сам файл?
Если рядом с нужным файлом, то ActiveWorkbook.Path поможет
 
Цитата
Если рядом с нужным файлом, то ActiveWorkbook.Path поможет
Нет, Александр, не с нужным.  Спасибо.
 
Не тестировал, но на правду похоже


Код
Sub Мяу()
    Dim wb As Workbook
    Dim pName(), fName$, i&
    pName = Array("Y:\Public\Folder1\", "C:\Users\C\Desktop\FOLDER\"
    fName = "хи-хи.xls"
    On Error Resume Next
    Do While wb = Nothing
        Set wb = Workbooks.Open(Filename:=pName(i) & fName)
        i = i + 1
    Loop
End Sub
Изменено: RAN - 16.03.2014 18:23:11
 
Проверил,работает
Код
Sub Гав_Гав()
PathForFile$ = Get_Folder & "FILENew.xls"
End Sub

Public Function Get_Folder() As String
    Set FSO = CreateObject("Scripting.FileSystemObject")
    If FSO.FolderExists("C:\Users\C\Desktop\FOLDER\") Then
        Get_Folder = "C:\Users\C\Desktop\FOLDER\"
    Else  '
        Get_Folder = "Y:\Public\Folder1\"
    End If
    Set FSO = Nothing

End Function
 
Страницы: 1
Наверх