Создание глобального пути к файлу - PullRequest
0 голосов
/ 04 июня 2018

Цель: использовать функцию открытия, чтобы позволить пользователю запускать команды для любого файла, который он хочет открыть для нескольких функций (путь находится в публичной функции).

Это начальная функция, которая предлагает пользователю выбратьфайл.Этот путь к файлу сохраняется в переменной «путь».Я сделал функцию общедоступной с намерением использовать «путь» в нескольких областях (глобализация).

Public Function OpenFile1() As String
    On Error GoTo Trap

    Dim fd As FileDialog
    Set fd = Application.FileDialog(msoFileDialogFilePicker)

    With fd
        .Title = "Open Sterling Shipment History" 'Name for file
        .Filters.Clear
        .ButtonName = " Open "
        .AllowMultiSelect = False
    End With

    If fd.Show <> 0 Then OpenFile1 = fd.SelectedItems(1)

Leave:
    Set fd = Nothing
    On Error GoTo 0
Exit Function

Trap:
    MsgBox Err.Description, vbCritical
    Resume Leave
    Dim path As String
path = OpenFile1() 'Calls in file

If path <> vbNullString Then Debug.Print path
Workbooks.Open (path)


'rename the path variable for each function
'so that I can call in different files with that name
End Function

Это фрагмент второй функции, которая пытается вызвать путь к файлу из переменной «путь»используйте его, чтобы открыть рабочую книгу и изменить рабочую книгу.

Sub Shipment_History()
Call OpenFile1
Dim sshist As Workbook
Set sshist = Workbooks.Open(path)
Columns("E:E").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove

Я также пытался:

  Sub Shipment_History()
  Call OpenFile1
  Workbooks.Open(path)

Моя проблема в том, что я не могу открыть "путь".

Состояния ошибки

«Ошибка времени выполнения« 1004 »: извините, мы не смогли найти. Возможно, он был перемещен, переименован или удален?»

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Поскольку функция возвращает строку (путь), и она является общедоступной, вам не нужна общедоступная переменная для хранения пути.

Объявите переменную пути локально и установите для ее значения значение (путь)возвращается из функции:

Sub Shipment_History()

    Dim path as string
    path = OpenFile1()

    If path <> vbNullString Then Workbooks.Open(path)
End Sub

ps Удалить все после Resume Leave, кроме оператора End Function.

0 голосов
/ 04 июня 2018

путь должен быть объявлен вне какой-либо функции или подстрочного индекса как открытая строка, функция не должна быть общедоступной, это переменная.

Попробуйте это на модуле:

Public path As String

Function setPathValue(ByVal dataPassed As String)
    path = dataPassed
End Function

Sub givePathVal()
    setPathValue ("This is path value")
End Sub

Sub showPathVal()
    MsgBox path
End Sub
...