2010-07-21 24 views
0

J'ai obtenu les fonctions simples suivantes:Travailler avec des cellules

Public Function AddFields(field1 As Range, field2 As Range) As String 
    AddFields = "=" + field1.Address + "+" + field2.Address 
End Function 


Private Function GetCustomerCount(monthNumber As Integer) As Range 
    If monthNumber < 6 Then 
     GetCustomerCount = Range("D13") 
    ElseIf monthNumber < 12 Then 
     GetCustomerCount = Range("D14") 
    Else 
     GetCustomerCount = Range("D15") 
    End If 
End Function 

que j'appelle de la sous suivante:

Private Sub mDateLooper_OnMonth(looper As DateLooper) 
    Cells(looper.Row, looper.Column).Value = "Månad " & CStr(looper.MonthIndex + 1) 
    Cells(looper.Row + 1, looper.Column).Value = AddFields(GetCustomerCount(looper.MonthIndex + 1), Range("m21")) 
    Cells(looper.Row + 2, looper.Column).Value = AddFields(Cells(looper.Row + 1, looper.Column - 1), Cells(looper.Row, looper.Column)) 
End Sub 

Il ne fonctionne pas. J'obtiens l'erreur suivante: La variable d'objet ou le bloc n'est pas défini.

sur GetCustomerCount = plage ("D13").

Pourquoi?

Répondre

2

GetCustomerCount est un Range

Si vous souhaitez attribuer une nouvelle valeur/Plage vous besoin de le faire avec l'ensemble.

Set GetCustomerCount = Range("D13") 
+1

Dans Outils-> Options vous pouvez activer « exiger la déclaration des variables » - c'est un peu gênant au début, mais en fait que vous avez tous vos canards dans une rangée avant de commencer à obtenir des erreurs étranges. Ce que Marg a mentionné est une convention de VBA facile à oublier: les "variables normales" telles que les entiers, les longs, et les chaînes sont normalement assignées avec i = 4 ou userName = "John Smith". Tout le reste, les plages, les feuilles de calcul, etc., sont des objets et doivent utiliser le mot-clé "Set" comme dans l'exemple de Marg. – Michael

0

Je crois que vous devez identifier quelle feuille la chaîne applique, à savoir ActiveSheet.Range (« D13 »)