2010-05-19 15 views
0

J'ai ce bit de code dans une classe VBA qui doit travailler le nombre de jours entre une propriété de la classe (une date) et la date d'aujourd'hui.Excel VBA: NetworkDays Erreur 2015

Dim EmailDate As Date 
EmailDate = Me.Email.DateReceived 

Debug.Print EmailDate, Date 
Debug.Print NetworkDays(EmailDate), Date, Range("BankHolidays")) 

Quand je le lance-je obtenir la sortie suivante

23/04/2010 19/05/2010 
[GetMacroRegId] 'NETWORKDAYS' < 
[GetMacroRegId] 'NETWORKDAYS' -> '699990072' > 
Error 2015 

Je l'ai testé dans un module, en utilisant des données factices, et obtenir la bonne réponse. Quelqu'un peut-il voir pourquoi cela donnerait une erreur dans une classe?

J'ai référencé atpvbaen.xls. Edit: J'ai découvert que lorsque j'exécute le code via une option de menu que j'ai créée dans la barre de menu, il échoue, mais quand je l'exécute via un bouton ou via l'éditeur VB, cela fonctionne très bien. On dirait que c'est quelque chose à voir avec le menu.

Merci, Martin

+0

D'après ce que je peux dire, il pourrait être un bug à faire avec Excel 2007 - est que ce que vous utilisez? Jetez un coup d'oeil [ici] (http://help.wugnet.com/office/Yield-function-missing-XL2007-SP1-ATPVBAEN-Analysis-ToolPak-ftopict1160374.html) pour un problème similaire. –

+0

Salut Dave, j'ai jeté un coup d'oeil sur le lien et je ne pense pas que ce soit lié. J'utilise 2003 et semble seulement obtenir l'erreur quand je cours le code de l'option d'une barre de menu. Merci, Martin – Martin

Répondre

0

Lorsque vous exécutez à partir du menu que vous exécutez au contexte de niveau de l'application. Donc, Range ("BankHolidays") n'est pas résolu correctement si la plage n'est pas définie ou définie dans les classeurs ouverts multiples. Essayez d'utiliser

activeworkbook.activesheet.Range("BankHolidays") 

Cela devrait résoudre le nom.

+0

Salut, j'ai essayé votre suggestion, mais cela n'a pas fait de différence que je reçois toujours l'erreur. J'ai écrit une fonction qui produit les mêmes résultats mais n'utilise pas la fonction. Merci de votre aide. – Martin

1

Etes-vous sûr d'avoir correctement collé le code dans votre question? NETWORKDAYS prend 3 arguments, non pas un, donc:

Debug.Print NetworkDays(EmailDate), Date, Range("BankHolidays")) 

devrait être:

Debug.Print NetworkDays(EmailDate, Date, Range("BankHolidays")) 
+0

Salut, le second) était une faute de frappe quand je préparais le poste. Le supprimer ne résout pas le problème. – Martin

+0

Juste en essayant d'exclure l'évidence. Bonne chance. – PowerUser