2017-09-22 1 views
0

Je m'excuse si c'est une question stupide mais j'ai été incapable de trouver une réponse à mon problème actuel. J'essaye de créer un userform qui recherche des données de tableur basées sur l'entrée dans la liste déroulante pour le nom d'utilisateur, une date de début, et une date de fin.Fonction non définie de manière appropriée dans le sous-programme userform

Il existe une colonne utilisateur et toutes les autres colonnes correspondent à des dates. Les données sont un nombre quotidien de productivité de charge de travail (par exemple, 87 widgets). L'objectif est de pouvoir saisir des entrées et copier les données de la feuille de calcul des données brutes dans une feuille de calcul des résultats, en affichant des informations pour un utilisateur au cours de cette période.

Je reçois toujours une erreur ("Erreur de compilation: Sub ou Function non définie") concernant ma tentative d'utiliser la fonction pour définir des colonnes pour les dates appropriées. J'apprécierais toute contribution. Merci.

'Function changes column number to column name 
Public Function fnColumnToLetter_CellAdressReplace(ByVal ColumnNumber As Integer) 
fnColumnToLetter_CellAdressReplace = Replace(Replace(Cells(1, ColumnNumber).Address, "1", ""), "$", "") 
End Function 

Private Sub SearchButton1_Click() 
'Dim variables 
Dim sheet As Worksheet 
Dim name1 As String 
Dim date1 As Date 
Dim date2 As Date 
Dim STARTcol As String 
Dim ENDcol As String 
Dim pharmcol1 As String 
Dim pharmcol2 As String 
Set sheet = ActiveWorkbook.Sheets("Data") 
Set Results = ActiveWorkbook.Sheets("Results") 
'Variables for entries input into userform 
name1 = userform1.NameBox1.Value 
date1 = userform1.DateBox1.Value 
date2 = userform1.DateBox2.Value 

'Define row based on pharmacist name 
rowno = Application.WorksheetFunction.Match(name1, Range("A:A"), 0) 
pharmrow = "a" + rowno 

'Find first column from start date 
STARTcol = Application.WorksheetFunction.Match(date1, Range("A1:AZZ1"), 0) 
'Find last column from end date 
ENDcol = Application.WorksheetFunction.Match(date2, Range("A1:AZZ1"), 0) 

'Call function to replace column number to column name 
pharmcol1 = fnColumnToLetter_CellAddressReplace(STARTcol) + rowno 
pharmcol2 = fnColumnToLetter_CellAddressReplace(ENDcol) + rowno 

'Copy table array to RESULTS worksheet 
sheet.Range("pharmcol1:pharmcol2").Copy Destination = Results.Range("A1") 

End Sub 
+0

Quelle ligne est mise en évidence lorsque l'erreur se produit? –

+1

Essayez 'fnColumnToLetter_CellAddressReplace (STARTcol) & rowno'. L'esperluette est l'opérateur de concaténation de chaîne correct. – Jeeped

+2

vous avez une faute de frappe 'fnColumnToLetter_CellAddressReplace' devrait être' fnColumnToLetter_CellAdressReplace' La fonction n'a qu'un 'd' dans' Adresse ' –

Répondre

0

Erreur de compilation: Sub ou Fonction non définie

Chaque fois que je vois cette erreur je regarde souvent des erreurs grammaticales entre la fonction/sous et l'appel. Dans votre cas, vous avez orthographié l'adresse différemment entre les deux.

Public Function fnColumnToLetter_CellAdressReplace(ByVal ColumnNumber As Integer) 

    pharmcol1 = fnColumnToLetter_CellAddressReplace(STARTcol) + rowno 
    pharmcol2 = fnColumnToLetter_CellAddressReplace(ENDcol) + rowno 

Espérons que cela aide.