VBA Excel 错误运行时错误“53”

菲利普康奈尔

我希望你能帮忙。我有一个宏,它很广泛。本质上它的作用是它有一个用户表单参见图 1

此用户表单允许用户导航到存储数据的模板(参见图 2)并选择此已完成的模板。

在图 1 中的用户表单上。用户然后单击单选按钮 DTOV(无会议信息),然后单击按钮预验证。

单击此预验证按钮后,Excel 模板上的数据将从该 Excel 文件中复制,并转换为带有 | 的文本文件。(管道)分隔符,并要求用户确认这个新创建的文本文件所在的目录路径。见图3

应该发生的是,这个新创建的文本文档被放置到一个文件夹中,在该文件夹中再次提取文本文档并将其发送到另一个数据库

我遇到的问题是新创建的文本文件没有进入其他数据库要选取的文件夹。

我收到一个错误运行时错误“53”这是在线发生的

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

位于私人潜艇 Private Sub Pre_validate_Click()

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

所以我只在下面完整地提供了这个用户表单代码,请参阅代码

再次发生错误 ' create the file on the network folder Name DTOV_Directory & newfilename & "txt" As network_path & Replace(newfilename, "EFPIA", "EFPIA_PVLDTN") & "txt"

位于私人潜艇 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

新的错误图片 在此处输入图片说明

维佳塔

一般来说,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"

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章