2014-02-19 5 views
-1

У меня есть ниже функции VBA, чтобы открыть файл Excel:функция VBA, чтобы открыть первенствовать

Function copie_sd() 

nom_fichier = Workbooks.Open(Filename:="C:\SD\copie_sd.xls") 
If nom_fichier = False Then 
    Range("A1").Select 
    copie_sd = "ERREUR" 
    Exit Function 
End If 

copie_sd = nom_fichier 

End Function 

Но я получаю сообщение об ошибке: Ошибка выполнения «438» Объект не поддерживает это свойство или метод.

ответ

0

Я считаю, что вы можете хотеть Dim вы переменный, как этот.

Dim nom_fichier as workbook 

Затем используйте set, чтобы установить его

set nom_fichier = workbooks.open 

Также следующая строка не будет работать с объектной переменной

if nom_fichier = false then 

Это может помочь http://msdn.microsoft.com/en-us/library/office/aa188204(v=office.10).aspx

0

If вы проходите через свою треску e, вы увидите, что Workbooks.Open() не вернет логическую переменную, а ссылку на объект Excel.Workbook.

ваш Условный оператор должен быть изменен, чтобы проверить на Nothing и не для False:

if nom_fichier Is Nothing Then 
    copie_sd = "ERREUR" 
    Exit Function 
End If 

Другое дело: Вы хотите «ERREUR» быть напечатаны в ячейке A1 ?
Если да, то вы должны вызвать

Range("A1").Value = "ERREUR" 
+0

пользовательской функцию не можете записать в ячейку. Он не должен иметь никаких побочных эффектов. – ja72

0

Все, что вам нужно, это

Function copie_sd(ByVal fn as String) as Boolean 
    copie_sd = False 
    Dim sd as Workbook  
    Set sd = Workbooks.Open(Filename:=fn) 
    If Not sd Is Nothing 
     copie_sd = True 
    End If  
End Function 

И использовать его как

If copie_sd("C:\SD\copie_sd.xls") then 
    ' Other things to happen after open 
End If 
Смежные вопросы