2015-10-21 8 views
0

Я пытаюсь определить, был ли передан opational параметр, но по какой-либо причине все обычные функции (IsMissing()/IsEmpty()/IsNull()) всегда возвращают false.Как определить, когда необязательный параметр ByRef не был отправлен

Это то, что я пытаюсь:

Public Sub SetValue(Key As String, Optional ByRef ws As Worksheet) 
    If IsMissing(ws) Or IsEmpty(ws) Or IsNull(ws) Then 
     ws = ThisWorkbook.Sheets(SheetName) 
    End If 

Я также попытался установить WS в настоящее время или Null, но результат был тот же:

Public Sub SetValue(Key As String, Optional ByRef ws As Worksheet = Nothing) 
    If IsMissing(ws) Or IsEmpty(ws) Or IsNull(ws) Then 
     ws = ThisWorkbook.Sheets(SheetName) 
    End If 

Любая идея, почему это может быть Происходило ?

ответ

2

Попробуйте is nothing

Private Sub CommandButton1_Click() 
    Dim ws As Excel.Worksheet 
    Set ws = ActiveWorkbook.Sheets("sheet1") 

    'Call the sub both ways. 
    SetValue "a" 
    SetValue "a", ws 
End sub 

Public Sub SetValue(Key As String, Optional ByRef ws As Worksheet) 
    If ws Is Nothing Then 
     'We got a sheet 
     MsgBox "We got no sheet" 
    End If 

    If Not ws Is Nothing Then 
     'We got a sheet 
     MsgBox ws.name 
     MsgBox "We got a sheet" 
    End If 
End sub 
1

Конструкция Ничего не будет работать. Я использую его во всех моих параметрах.

Public Sub SetValue(ByRef Key As String, _ 
        Optional ByRef ws As Worksheet = Nothing) 

    'Make sure we have the object 
    If ws Is Nothing Then 
     Set ws = ThisWorkbook.Sheets(SheetName) 
    End If 

End Sub 

Надеюсь, это поможет. :)

+0

+1 потому что этот ответ лучше, не может работать с пустым позже. Я обычно устанавливал его по умолчанию для 'activesheet' для подчиненных/функций, которые должны работать где угодно. –

+0

То же самое здесь Патрик Я всегда ставил свой дополнительный лист в Activesheet, и я гарантирую, что он работает повсюду. –

Смежные вопросы