Ошибка ошибки VBA Excel Error-Time '53'

Я надеюсь, что вы можете помочь. У меня есть макрос, и он обширен. По сути, это то, что он имеет форму пользователя. См. Рис. 1

Эта пользовательская форма позволяет пользователю перейти к шаблону, где хранятся данные (см. Рис. 2), и выбрать этот заполненный шаблон.

В пользовательской форме на Pic 1. Затем пользователь щелкает по кнопке DTOV (без информации о встрече), а затем нажимает кнопку Pre-Validate.

После нажатия этой кнопки предварительного просмотра данные из шаблона Excel копируются из этого файла Excel, преобразованного в текстовый файл с | (pipe), и пользователю предлагается подтвердить путь к каталогу, в который будет идти этот вновь созданный текстовый файл. См. Рис. 3

должно произойти то, что этот вновь созданный текстовый документ попадает в папку, где текстовый документ снова загружается и отправляется в другую базу данных

Проблема, с которой я сталкиваюсь, заключается в том, что только что созданный текстовый файл не попадает в папку, которую будет загружать другая база данных.

Я получаю сообщение об ошибке Run-Time '53', это происходит в режиме онлайн

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

Которая находится в Private Sub Private Sub Pre_validate_Click()

В этом макросе есть много другого кода, как вы можете увидеть в Pic 4 множество модулей. При необходимости может быть добавлен другой код, но ошибка появляется в форме пользователя EFPIA_Macro

Поэтому я предоставил код этого пользователя только в полном объеме, см. CODE

снова происходит ошибка при ' create the file on the network folder Name DTOV_Directory & newfilename & "txt" As network_path & Replace(newfilename, "EFPIA", "EFPIA_PVLDTN") & "txt"

Которая находится в Private Sub Private Sub Pre_validate_Click()

Я действительно пытаюсь решить эту проблему

Поэтому, как всегда, всякая помощь приветствуется.

спасибо

Рис. 1

введите описание изображения здесь

Рис. 2 введите описание изображения здесь

Рис. 3

введите описание изображения здесь

Рис. 4

введите описание изображения здесь

КОД

 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 

NEW ERROR PIC введите описание изображения здесь

В общем случае 52 – ошибка имени файла с ошибкой – https://msdn.microsoft.com/en-us/library/aa231024(v=vs.60).aspx

Таким образом, возможно, если вы ставите точку . между именем файла и txt он может работать:

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

Вы не указали точные пути к файлам (один из них недопустим [= Ошибка 52]), но вы можете помочь себе , заменив ошибку

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

с (временно) расширенным эквивалентом:

 ' 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 

Когда программа остановлена ​​(используя команду « Stop или (лучше) с помощью точки останова – клавиша F9 ), наведите указатель мыши на имена переменных, чтобы проверить их содержимое (или использовать часы или команду print в окне «Непосредственное», … что угодно).

Возможно, вы найдете эти потенциальные проблемы:

  • отсутствующая точка в расширении файла
  • Отсутствие обратной косой черты, разделяющей каталог из файла
  • другие проблемы, такие как проблема с сетевым путем.

Изменить: Обработка ошибок

В sub Pre_validate_Click() вас есть 3 команды имени. Окружать каждого по On Error Goto :

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

И как раз перед End Sub в конце подпрограммы добавьте следующее:

 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 
  • Как пропустить ошибку времени выполнения 9 vba?
  • VBA - vlookup работает с ошибкой времени выполнения '13'
  • Ошибка метода 1004 выбора класса диапазона
  • Ошибка времени выполнения «1004» при прохождении через большой выборки строк
  • Ошибка времени выполнения VBA 13
  • Ошибка времени выполнения над условным форматированием в VBA
  • Ошибка выполнения "424: Требуется объект"
  • VBA Excel 2016 - Ошибка времени выполнения «1004»
  • Коллеги получают ошибку 5 в Excel-файле с VBA, но тот же файл отлично работает на моем компьютере?
  • Запуск макроса Excel из макроса Outlook получение ошибки 1004
  • Ошибка выполнения VBA Excel VBA -2147319767 (80028029)
  • Давайте будем гением компьютера.