2017-03-22 1 views
0

J'ai la sous-routine suivante (dans module10).vba assignation d'une sous-routine à une variable

Sub varWorksheet(wksht As String) 
Dim ws As Worksheet 

Set ws = ThisWorkbook.Sheets(wksht) 

Set ws = Nothing 
End Sub 

Je veux être en mesure de passer cette sous routine comme une référence à une variable avec quelque chose comme ça plutôt que d'avoir à déclarer explicitement dans chaque routine:

Set ws = module10.varWorksheet("Sheet1") 

Je reçois erreur de compilation -> fonction attendue ou variable.

+0

Vous ne pouvez pas faire cela directement, il n'y a pas de type fonctionnel/délégué dans VBA (et si votre tentative était une invocation, pas une affectation). Peut-être envisager d'encapsuler la logique dans une classe http://www.cpearson.com/excel/classes.aspx –

Répondre

1

Vous devriez utiliser une fonction comme celle-ci.

Function varWorksheet(wksht As String) As Worksheet 
    On Error Resume Next 
    Set varWorksheet = ThisWorkbook.Sheets(wksht) 
End Function 

Il ne retournera rien si la feuille de calcul n'existe pas. Cela fonctionne bien.

Sub Test() 
    Dim ws As Worksheet 

    Set ws = Modul10.varWorksheet("Tabelle4") 
    If ws Is Nothing Then 
     Debug.Print "No worksheet" 
    Else 
     ' what ever you want 
    End If 
End Sub 
+0

J'ai préparé cela, vous êtes allé plus vite. Transformer le sub dans une fonction en retournant un objet de feuille de travail est la bonne chose à faire –

+0

Merci beaucoup fait parfaitement sens. – paynod