2017-08-14 2 views
0

J'espère que vous pouvez aider. J'ai une macro et c'est vaste. Essentiellement ce qu'il fait est qu'il a une forme d'utilisateur Voir Pic 1Erreur Excel VBA Erreur d'exécution '53'

Cette forme d'utilisateur permet à un utilisateur de naviguer vers un modèle où les données sont stockées (voir l'image 2) et sélectionnez ce modèle accompli.

Sur le formulaire utilisateur de la photo 1. L'utilisateur clique ensuite sur le bouton radio DTOV (sans informations de réunion), puis clique sur le bouton Pré-valider.

Une fois que vous avez cliqué sur ce bouton de pré-validation, les données du modèle Excel sont copiées à partir de ce fichier Excel transformé en fichier texte avec | (séparateur), et l'utilisateur est invité à confirmer le chemin d'accès au répertoire où ce fichier texte nouvellement créé ira. Voir Pic 3

ce qui devrait arriver est que ce document texte nouvellement créé se place dans un dossier dans lequel le document de texte est repris à nouveau et envoyé à une autre base de données

Le problème que j'ai est que le texte nouvellement créé le fichier ne le fait pas dans le dossier pour être récupéré par l'autre base de données.

Je reçois une erreur erreur d'exécution « 53 » ce qui se passe sur la ligne

' create the file on the network folder Name DTOV_Directory & newfilename & "txt" As network_path & Replace(newfilename, "EFPIA", "EFPIA_PVLDTN") & "txt"

qui est situé dans le Private Sub Private Sub Pre_validate_Click()

Il y a beaucoup d'autres codes dans ce macro comme vous pouvez le voir dans Pic 4 beaucoup de modules. L'autre code peut être fourni si nécessaire, mais l'erreur apparaît sur le formulaire utilisateur EFPIA_Macro

J'ai donc fourni ce code de formulaires utilisateur qu'entièrement voir ci-dessous CODE

à nouveau l'erreur se produit sur ' create the file on the network folder Name DTOV_Directory & newfilename & "txt" As network_path & Replace(newfilename, "EFPIA", "EFPIA_PVLDTN") & "txt"

qui est situé dans le Private Sub Private Sub Pre_validate_Click()

Je suis vraiment du mal à résoudre celui-ci

Alors, comme toujours toute aide est grandement une ppreciated.

Merci

Pic 1

enter image description here

Pic 2 enter image description here

Pic 3

enter image description here

Pic 4

enter image description here

CODE

Dim DTOV_Directory As String 
Dim DTOV_fname As String 
Dim ITOV_Directory As String 
Dim ITOV_fname As String 
Dim txtFileName As String 


Private Sub Clear_form_Click() 
Unload Me 
EFPIA_Macro.Show 
End Sub 

Private Sub Close_form_Click() 
Unload Me 
ThisWorkbook.Close savechanges:=False 
Application.Quit 


End Sub 

Private Sub DTOV_chkbox_Change() 
    If txtFileName = "" Then 
     DTOV_chkbox = False 
     DTOV_filename = "" 
     Call dtov_file_processing 
    End If 
    txtFileName = "" 
End Sub 

Private Sub DTOV_chkbox_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) 
    Call dtov_file_processing 
End Sub 

Private Sub dtov_file_processing() 
    Dim fd As Office.FileDialog 
    Dim varFile As Variant 

    ' check if either of graphical/raw file is selected 
    If Graphical_file.Value <> True And Raw_file.Value <> True Then 
     MsgBox "Please select the type of file - Graphical/Raw" 
     DTOV_chkbox = False 
     DTOV_filename = "" 
     txtFileName = "" 
    ElseIf DTOV_filename <> "" Then 
     DTOV_chkbox = False 
     DTOV_filename = "" 
     txtFileName = "" 
    Else 
     txtFileName = "" 
     Set fd = Application.FileDialog(msoFileDialogFilePicker) 
     With fd 
      .AllowMultiSelect = False 
      .Title = "Please select the file." 

      ' Clear out the current filters, and add our own. 
      .Filters.Clear 
      .Filters.Add "All Files", "*.*" 
      .Filters.Add "Excel 2003", "*.xls" 

      If .Show = True Then 
       txtFileName = .SelectedItems(1) 
      End If 
     End With 

     If Graphical_file.Value = True And (InStr(txtFileName, "DTOV") = 0 Or InStr(txtFileName, ".xls") = 0 Or txtFileName = "") Then 
      MsgBox "Incorrect DTOV file selected. Please re-select the file" 
      DTOV_chkbox = False 
      DTOV_filename = "" 
     ElseIf Raw_file.Value = True And InStr(txtFileName, ".xls") = 0 Then 
      MsgBox "Incorrect RAW file selected. Please re-select the file" 
      DTOV_chkbox = False 
      DTOV_filename = "" 
     Else 
      DTOV_filename = txtFileName 
      DTOV_chkbox = True 
     End If 
    End If 
End Sub 

Private Sub Graphical_file_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) 
    File_category_frame_1.Caption = "Choose DTOV File" 
    DTOV_chkbox.Caption = "DTOV (Without Meeting Information)" 
    File_category_frame_2.Visible = True 
    ITOV_chkbox.Visible = True 
    DTOV_chkbox = False 
    DTOV_filename = "" 
    ITOV_chkbox = False 
    ITOV_filename = "" 
    txtFileName = "" 
End Sub 


Private Sub ITOV_chkbox_Change() 
    If txtFileName = "" Then 
     ITOV_chkbox = False 
     ITOV_filename = "" 
     Call itov_file_processing 
    End If 
    txtFileName = "" 
End Sub 

Private Sub ITOV_chkbox_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) 
    Call itov_file_processing 
End Sub 

Private Sub itov_file_processing() 
    Dim fd As Office.FileDialog 

    ' check if either of graphical/raw file is selected 
    If Graphical_file.Value <> True And Raw_file.Value <> True Then 
     MsgBox "Please select the type of file - Graphical/Raw" 
     ITOV_chkbox = False 
     ITOV_filename = "" 
     txtFileName = "" 
    ElseIf ITOV_filename <> "" Then 
     ITOV_chkbox = False 
     ITOV_filename = "" 
     txtFileName = "" 
    Else 
     txtFileName = "" 
     Set fd = Application.FileDialog(msoFileDialogFilePicker) 
     With fd 
      .AllowMultiSelect = False 
      .Title = "Please select the file." 

      ' Clear out the current filters, and add our own. 
      .Filters.Clear 
      .Filters.Add "All Files", "*.*" 
      .Filters.Add "Excel 2003", "*.xls" 

      If .Show = True Then 
       txtFileName = .SelectedItems(1) 
      End If 
     End With 

     If InStr(txtFileName, "ITOV") = 0 Or InStr(txtFileName, ".xls") = 0 Then 
      MsgBox "Incorrect file selected. Please re-select the file" 
      ITOV_chkbox = False 
      ITOV_filename = "" 
     Else 
      ITOV_filename = txtFileName 
      ITOV_chkbox = True 
     End If 
    End If 
End Sub 

Private Sub Pre_validate_Click() 
Dim newfilename As String 
Dim network_path As String 
Dim final_msg As String 

' user interface to accept network folder path 
PreVal_Dir_Path.Show 
network_path = EFPIA_Macro.Pre_validate.ControlTipText 
EFPIA_Macro.Pre_validate.ControlTipText = "" 
final_msg = "The below files are submitted for the prevalidation:" 

If Not Dir(network_path, vbDirectory) = vbNullString Then 
    DTOV_fname = "" 
    ITOV_fname = "" 

    ' call the procedure to create files. 
    Call Process_template_Click 

    ' note - we need to change the destination directory (DTOV_Directory, ITOV_Directory) to the place where pre-val tool n/w folder 
    If DTOV_fname <> "" Then 
     newfilename = Left(DTOV_fname, InStrRev(DTOV_fname, ".")) 

     If Dir(DTOV_Directory & newfilename & "txt") <> "" Then 
      ' remove the file with same name if already exists on the network folder 
      If Dir(network_path & Replace(newfilename, "EFPIA", "EFPIA_PVLDTN") & "txt") <> "" Then 
      Kill network_path & Replace(newfilename, "EFPIA", "EFPIA_PVLDTN") & "txt" 
      End If 

      ' create the file on the network folder 
      Name DTOV_Directory & newfilename & "txt" As network_path & Replace(newfilename, "EFPIA", "EFPIA_PVLDTN") & "txt" 
      final_msg = final_msg & " " & Replace(newfilename, "EFPIA", "EFPIA_PVLDTN") & "txt" 
     End If 

     If Dir(DTOV_Directory & Replace(newfilename, "DTOV", "CUST") & "txt") <> "" Then 
      ' get the new generated txt TOV file name 
      newfilename = Replace(newfilename, "DTOV", "CUST") 
      ' remove the file with same name if already exists on the network folder 
      If Dir(network_path & Replace(newfilename, "EFPIA", "EFPIA_PVLDTN") & "txt") <> "" Then 
      Kill network_path & Replace(newfilename, "EFPIA", "EFPIA_PVLDTN") & "txt" 
      End If 

      ' create the file on the network folder 
      Name DTOV_Directory & newfilename & "txt" As network_path & Replace(newfilename, "EFPIA", "EFPIA_PVLDTN") & "txt" 
      final_msg = final_msg & " " & Replace(newfilename, "EFPIA", "EFPIA_PVLDTN") & "txt" 
     End If 
    End If 

    If ITOV_fname <> "" Then 
     newfilename = Left(ITOV_fname, InStrRev(ITOV_fname, ".")) 

     If Dir(ITOV_Directory & newfilename & "txt") <> "" Then 
      ' remove the file with same name if already exists on the network folder 
      If Dir(network_path & Replace(newfilename, "EFPIA", "EFPIA_PVLDTN") & "txt") <> "" Then 
       Kill network_path & Replace(newfilename, "EFPIA", "EFPIA_PVLDTN") & "txt" 
      End If 
      ' create the file on the network folder 
      Name ITOV_Directory & newfilename & "txt" As network_path & Replace(newfilename, "EFPIA", "EFPIA_PVLDTN") & "txt" 
      final_msg = final_msg & " " & Replace(newfilename, "EFPIA", "EFPIA_PVLDTN") & "txt" 
     End If 

     If Dir(ITOV_Directory & Replace(newfilename, "ITOV", "CUST") & "txt") <> "" Then 
      ' get the new generated txt TOV file name 
      newfilename = Replace(newfilename, "ITOV", "CUST") 
      ' remove the file with same name if already exists on the network folder 
      If Dir(network_path & Replace(newfilename, "EFPIA", "EFPIA_PVLDTN") & "txt") <> "" Then 
       Kill network_path & Replace(newfilename, "EFPIA", "EFPIA_PVLDTN") & "txt" 
      End If 
      ' create the file on the network folder 
      Name ITOV_Directory & newfilename & "txt" As network_path & Replace(newfilename, "EFPIA", "EFPIA_PVLDTN") & "txt" 
      final_msg = final_msg & " " & Replace(newfilename, "EFPIA", "EFPIA_PVLDTN") & "txt" 
     End If 
    End If 

    If DTOV_fname <> "" Or ITOV_fname <> "" Then 
     final_msg = final_msg & vbNewLine & "The processing will take upto 10 minutes." 
     final_msg = final_msg & vbNewLine & "You will receive email notification once validation process is complete." 
     final_msg = final_msg & vbNewLine & "You can track the status of the file and review the error using the cognos browser - link to which will be present in the email to you" 
     MsgBox final_msg 
    End If 

Else 
    MsgBox ("Network folder is un-accessible. Please verify your access or the network folder path") 
End If 


End Sub 


Private Sub Process_template_Click() 

If DTOV_filename <> "" Then 
    DTOV_Directory = Left(DTOV_filename, InStrRev(DTOV_filename, "\")) 
    DTOV_fname = Dir(DTOV_filename) 
End If 

If ITOV_filename <> "" Then 
    ITOV_Directory = Left(ITOV_filename, InStrRev(ITOV_filename, "\")) 
    ITOV_fname = Dir(ITOV_filename) 
End If 

If DTOV_chkbox.Value = True And ITOV_chkbox.Value = True And DTOV_filename <> "" And ITOV_filename <> "" Then 
    Call Template_Process.Process_Templates(DTOV_Directory, DTOV_fname, ITOV_Directory, ITOV_fname) 
ElseIf DTOV_chkbox.Value = True And DTOV_filename <> "" And Raw_file.Value = False Then 
    Call Template_Process.Process_template(DTOV_Directory, DTOV_fname, "D") 
ElseIf DTOV_chkbox.Value = True And DTOV_filename <> "" And Raw_file.Value = True Then 
    Call Process_Raw(DTOV_Directory, DTOV_fname) 
ElseIf ITOV_chkbox.Value = True And ITOV_filename <> "" Then 
    Call Template_Process.Process_template(ITOV_Directory, ITOV_fname, "I") 
Else 
    MsgBox "No file selected. Please select a file to proceed" 
End If 

End Sub 


Private Sub Raw_file_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) 
    File_category_frame_1.Caption = "Choose RAW File" 
    DTOV_chkbox.Caption = "RAW (Without Graphical Information)" 
    DTOV_chkbox = False 
    DTOV_filename = "" 
    File_category_frame_2.Visible = False 
    ITOV_chkbox.Visible = False 
    ITOV_filename.Visible = False 
End Sub 

erreur NOUVEAU PIC enter image description here

+1

Pouvez-vous essayer d'écrire un exemple minimal, où vous recevez la même erreur? En utilisant ce 'Name DTOV_Directory & newfilename &" txt "En tant que network_path & Replace (nouveaufilename," EFPIA "," EFPIA_PVLDTN ") &" txt "' Ainsi, il serait plus facile de le répliquer et de l'aider. – Vityata

+1

Pensez-vous que vous pourriez rendre la question plus mince en n'extrayant que [mcve] et en supprimant le reste? – miroxlav

Répondre

1

En général, 52 est une mauvaise erreur de nom de fichier - https://msdn.microsoft.com/en-us/library/aa231024(v=vs.60).aspx

Ainsi, probablement si vous mettez un point . entre le nom de fichier et txt, il pourrait fonctionner:

Name DTOV_Directory & newfilename & ".txt" As network_path & _ 
    Replace(newfilename, "EFPIA", "EFPIA_PVLDTN") & ".txt" 
+0

Salut Vityata. Merci d'avoir répondu J'ai fait une faute de frappe dans ma question l'erreur réelle que je reçois est Run TIme erreur 53 fichier introuvable. pas l'erreur 52 comme je le dis plus tôt. Je ne sais pas si cela fait une différence? –

+1

Salut Vityata. Merci pour la réponse en remplaçant "txt" par ".txt" dans la zone 'Private Sub Pre_validate_Click()' fonctionnait parfaitement. Beaucoup de respect de Dublin et merci encore pour l'aide. :-) Je vous souhaite une bonne journée –

+0

@PhilipConnell - vous êtes les bienvenus :) – Vityata

1

Vous n'a pas fourni de chemins de fichiers précis (l'un d'eux est invalide [= Erreur 52]), mais vous pouvez aider à vous en remplaçant la déclaration ne

Name DTOV_Directory & newfilename & "txt" As network_path & Replace(newfilename, "EFPIA", "EFPIA_PVLDTN") & "txt" 

avec expanded (temporairement) équivalent:

' assign file names to variables and perform renaming 
oldFileName = DTOV_Directory & newfilename & "txt" 
newFileName = network_path & Replace(newfilename, "EFPIA", "EFPIA_PVLDTN") & "txt" 
Name oldFileName As NewFileName 

Quand est arrêté programme (en utilisant Stop déclaration ou (mieux) en utilisant un point d'arrêt - F9 clé), survolez la souris sur les noms de variables pour inspecter leur contenu (ou utilisez des montres ou une commande print dans la fenêtre Exécution, ... peu importe).

Peut-être que vous trouverez ces problèmes potentiels:

  • point manquant dans l'extension de fichier
  • antislashs manquants séparant le répertoire du fichier
  • d'autres problèmes, comme problème avec le chemin du réseau.

Edit: Gestion des erreurs

En sous Pre_validate_Click(), vous avez 3 Name commandes.Entourez chaque par On Error Goto:

On Error Goto RenameError ' error handling on 
Name ... As ... 
On Error Goto 0 ' error handling off 

Et juste avant End Sub à la fin de la sous-routine ajouter ce qui suit:

Exit Sub 

RenameError: 
If Err.Number = 53 Then 
    details = " when renaming from " & oldFileName & " to " & newFileName 
Else 
    details = "" 
EndIf 
answer = MsgBox("Error " & Err.Number & ": " & Err.Description & details, vbRetryCancel Or vbCritical) 
If answer = vbRetry Then 
    Resume ' retry problematic line again 
Else 
    End ' terminate the program 
End If 
+0

Hi Miroxlav. Merci d'avoir répondu. L'erreur réelle que j'obtiens est le fichier Run-Time Error 53 introuvable. pas d'erreur 52. la route est \\ NASPRDSFT \ EFPIA_COUNTRY_FOLDERS \ VALID \ les choses bizarres est que cela fonctionne pour certains membres de mon équipe, mais pas pour les autres. J'ai vérifié le mappage des lecteurs et tous sont identiques –

+0

* "cela fonctionne pour certains membres de mon équipe mais pas pour les autres" * - avez-vous vérifié ** tous ** les utilisateurs ont les droits pour écrire le fichier dans le dossier en question ? – CLR

+0

@PhilipConnell - maintenant vous avez une direction claire où continuer à vérifier - il est dans vos partages/lecteurs réseau, pas dans votre code. Ce que vous pouvez faire dans le code: utilisez l'instruction 'On Error GoTo' pour dévier le traitement en cas d'erreur et afficher la boîte de message comme 'Erreur 53: Fichier \\ partage1 \ répertoire \ fichier.txt introuvable.' Cela permettra à vos utilisateurs de se renseigner sur le problème sans que votre programme plante. Comprenez-vous cela ou avez-vous besoin d'aide pour cela? – miroxlav