VBA Excel错误运行时错误'53'

我希望你能帮上忙。 我有一个macros,它是广泛的。 它基本上是它有一个用户的forms见图1

这个用户表单允许用户导航到存储数据的模板(见图2)并select这个完成的模板。

在图1中的用户表单上。用户然后单击单选buttonDTOV(没有会议信息),然后单击buttonPre-Validate。

点击此预validationbutton后,Excel模板上的数据将从此Excel文件复制到使用|转换为文本文件 (pipe道)分隔符,并且要求用户确认这个新创build的文本文件将去的目录path。 见图3

应该发生的是,这个新创build的文本文件被放置到文本文件被再次拾取并被发送到另一个数据库的文件夹中

我遇到的问题是新创build的文本文件不会将其提交到其他数据库拾取的文件夹。

我得到一个错误运行时错误'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()

在这个macros中有很多其他的代码,你可以在图4中看到很多模块。 其他代码可以在必要时提供,但是错误出现在EFPIA_Macro用户表单上

所以我只在下面提供了这个用户表单代码,见代码

' create the file on the network folder Name DTOV_Directory & newfilename & "txt" As network_path & Replace(newfilename, "EFPIA", "EFPIA_PVLDTN") & "txt"' create the file on the network folder Name DTOV_Directory & newfilename & "txt" As network_path & Replace(newfilename, "EFPIA", "EFPIA_PVLDTN") & "txt"错误发生在' 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 

新的错误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" 

你没有提供确切的文件path(其中一个是无效的[=错误52]),但你可以通过replace失败的语句

 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键),将鼠标hover在variables名称上以检查其内容(或在立即窗口中使用手表或print命令,…)。

也许你会发现这些潜在的问题:

  • 缺less文件扩展名中的点
  • 缺less从文件分离目录的反斜杠
  • 其他问题,如networkingpath的问题。

编辑:error handling

在子Pre_validate_Click() ,您有3个Name命令。 围绕每个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