2017-06-26 3 views
0

J'ai créé un nouveau projet Userform dans un nouveau classeur et copié le code ci-dessous d'un autre projet, qui fonctionne parfaitement avec ce code. J'ai copié le code dans ce nouveau projet de classeur, mais je continue d'obtenir l'erreur d'exécution, même après avoir modifié le nom de la zone de texte.Excel VBA 2016 32bit - Userform - Erreur d'exécution 9 - Message d'erreur "Script out of range"

Le but du code est de générer automatiquement un travail Numéro de commande dans la zone de texte txt_Work_Order_No préfixé par « SWC », puis par année, le mois et le format numérique. La sortie finale devrait ressembler à ceci SWC201706-00001 (incrémentant chaque fois que le formulaire est ouvert).

Private Sub UserForm_Initialize() 
'** WORK ORDER NUMBER IN TEXTBOX 

        Me.txt_Work_Order_No.Enabled = True 
         Dim irow As Long 
         Dim ws As cnServiceLog 
         Set ws = cnServiceLog 

         'find last data row from database' 
         irow = ws.Cells(Rows.Count, 1).End(xlUp).Row 
         Me.txt_Work_Order_No = "SWC" & Year(Date) & Format(Month(Date), "00") & "-" & Format(Split(ws.Cells(irow, 1).Value, "-")(1) + 1, "00000") 

je suis entré dans le code, et est tombé en panne à la ligne de code qui me donne la douleur et je commentais le reste dehors et tout allait bien, mais il est évident qu'il ne ne veux que je le voudrais faire.

La zone qui provoque l'erreur d'exécution est juste après le double zéro (mois (date, "00")

Me.txt_Work_Order_No = "SWC" & Année (Date) & Format (Mois (date), "00") & "-" & format (split (ws.Cells (IRow, 1) .Value, "-") (1) + 1, "00000")

J'espère que quelqu'un serait être capable de m'aider ... J'ai cherché sur Internet pendant des jours et je n'ai toujours pas été capable de résoudre tout problème qu'il semble avoir.Avec gratitude, TheShyButterfly

+0

Juste une vérification rapide - si vous le faites comme ça, cela fonctionnerait-il? 'Me.txt_Work_Order_No =" SWC "& Année (Date) & Format (Mois (Date)," 00 ") &" - ​​"& Format (Split (ws.Cells (irow, 1) .Value," - ") (0) + 1, "00000") ' – Vityata

+0

Nous vous remercions de votre réponse rapide. Ce que vous avez suggéré est exactement ce que j'ai, mais ça ne marche pas. Le code est sur sa propre ligne complète (pas enveloppé comme il semble être ici) Je ne peux pas comprendre pourquoi cela me cause du chagrin. Cela fonctionne parfaitement dans l'autre projet. Au début, je pensais que c'était parce que j'étais sur Excel 2016 64 bits (ce qui m'a donné du chagrin parce que le projet a été initialement développé sur 32bit 2013), donc j'ai désinstallé 64bit et installé Excel 32bit .. mais le problème reste – TheShyButterfly

+0

Ce n'est pas ce que vous J'ai changé '(1)' '(0)' dans votre code. Utilisez ceci pour voir les différences http://www.textdiff.com/ – Vityata

Répondre

0

En général, je suppose que le problème est que lorsque vous divisez ws.Cells(irow,1), vous n'avez pas valeur -. Ainsi, vous sortez hors de portée du tableau. Essayez comme cette première:

Me.txt_Work_Order_No = "SWC" & Year(Date) & Format(Month(Date), "00") & "-" & Format(Split(ws.Cells(irow, 1).Value, "-")(0) + 1, "00000")

Si cela fonctionne, alors essayez de mettre une variable pour la valeur (0), sur la base UBound du tableau. Quelque chose comme ceci:

Dim lngUbound as long 
lngUbound = ubound(Split(ws.Cells(irow,1),"-") 
Me.txt_Work_Order_No = "SWC" & Year(Date) & Format(Month(Date), "00") & "-" & Format(Split(ws.Cells(irow, 1).Value, "-")(lngUbound) + 1, "00000") 

L'idée du code ci-dessus est que vous n'êtes pas deviner que vous avez toujours au moins un -, ainsi, lorsque vous divisez par ce signe, vous prenez toujours le dernier élément de la création tableau. Joue un peu avec le code, ça devrait marcher.

+0

Mes excuses pour ma réponse différée. Merci beaucoup pour vos suggestions et votre temps. Je vais en effet jouer avec et voir comment cela fonctionne. – TheShyButterfly