2015-07-15 2 views
0

У меня есть простая функция, которая позволяет пользователю выбрать файл с использованием свойства msoFileDialogOpen Excel 2010 VBA для выбора файла. Когда я запускаю его я получаю errror:VBA Excel 2010 msoFileDialogOpen Path.Open Ошибка времени выполнения «424»: требуется объект

Ошибка выполнения '424':

Требуется объект

Вот виновный линия:

Path.Open 

Вот вся функция:

Public Sub Function4_FileExplorer() 
Dim file As Variant 
' Start File Explorer to select file containing data (simple GUI, much easier than coding vFileName) 
With Application.FileDialog(msoFileDialogOpen) 
    .AllowMultiSelect = False 
    If .Show Then 
     file = .SelectedItems(1) 
     Path = file 
    End If 
    Path.Open 
End With 
MsgBox file 

Exit Sub 
ErrorHandler: 
MsgBox "Error detected" & vbNewLine & "Error" & Err.Number & _ 
     Err.Description, vbCritical, "Error Handler: Error " & Err.Number 

End Sub 

Как исправить эту ошибку во время выполнения? Я благодарю тебя!

ответ

1

path является String так не .Open метод (который вы называете даже если диалог был удален с поля, то есть, когда .Show возвращается false)

Предполагая, что вы хотите, чтобы открыть выбранную книгу (вы должны добавить XLS/х/м фильтр)

Dim file As String 
' Start File Explorer to select file containing data (simple GUI, much easier than coding vFileName) 
With Application.FileDialog(msoFileDialogOpen) 
    .AllowMultiSelect = False 
    If .Show Then 
     file = .SelectedItems(1) 
     Workbooks.Open file 
    End If 
End With 
+0

О, так почему же эта функция всегда повторяется дважды? О фильтре .xls/.xlsm: хорошая идея, в 99% случаев хорошая практика, но я открываю файлы машин: .438 и т. Д. –

+0

Спасибо! Я адаптировал это для своего кода, и теперь данные вставляются. Теперь мой макрос почти исправлен! –

1

причина заключается в том, что вы присвоить строковое значение переменной Path и после того, что вы пытаетесь вызвать метод Open на этой строке:

Path.Open 

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