Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
&引用;无法访问文件";1004导出工作表错误VBA_Vba_Excel - Fatal编程技术网

&引用;无法访问文件";1004导出工作表错误VBA

&引用;无法访问文件";1004导出工作表错误VBA,vba,excel,Vba,Excel,我无法解决这个错误。我找了这么多,但找不到解决办法。代码工作率为98%。只需要解决2%的问题。 用户表单: 单击浏览按钮,打开“选择文件夹”对话框。所选文件夹路径将显示在文本框中 代码: Dim sItem As String Private Sub browse_Button_Click() Dim fldr As FileDialog Dim strPath As String Set fldr = Application.FileDialog(msoFileDialogFolderPi

我无法解决这个错误。我找了这么多,但找不到解决办法。代码工作率为98%。只需要解决2%的问题。

用户表单:

单击浏览按钮,打开“选择文件夹”对话框。所选文件夹路径将显示在文本框中

代码:

Dim sItem As String

Private Sub browse_Button_Click()
Dim fldr As FileDialog
Dim strPath As String
Set fldr = Application.FileDialog(msoFileDialogFolderPicker)
With fldr
    .Title = "Select a Folder"
    .AllowMultiSelect = False
    .InitialFileName = strPath
    If .Show <> -1 Then Exit Sub
    sItem = .SelectedItems(1)
End With
showFilePath.Text = sItem
End Sub

Private Sub cancel_button_Click()
Unload Me
End Sub

Private Sub export_button_Click()
Dim FileExtStr As String
Dim FileFormatNum As Long
Dim xWs As Worksheet
Dim xWb As Workbook
Dim FolderName As String
Application.ScreenUpdating = False
Set xWb = Application.ThisWorkbook
DateString = Format(Now, "yyyy-mm-dd hh-mm-ss")
FolderName = sItem & "\" & xWb.Name & " " & DateString
MkDir FolderName

For Each xWs In xWb.Worksheets
    xWs.Copy
        If xlsx = True Then
            FileExtStr = ".xlsx": FileFormatNum = 51
            Unload Me
        ElseIf xlsm = True Then
            FileExtStr = ".xlsm": FileFormatNum = 52
            Unload Me
        ElseIf xls = True Then
            FileExtStr = ".xls": FileFormatNum = 56
            Unload Me
        ElseIf xlsb = True Then
            FileExtStr = ".xlsb": FileFormatNum = 50
            Unload Me
        ElseIf csv = True Then
            FileExtStr = ".csv": FileFormatNum = 6
            Unload Me
        ElseIf txt = True Then
            FileExtStr = ".txt": FileFormatNum = -4158
            Unload Me
        ElseIf html = True Then
            FileExtStr = ".html": FileFormatNum = 44
            Unload Me
        ElseIf prn = True Then
            FileExtStr = ".prn": FileFormatNum = 36
            Unload Me
        End If
    xFile = FolderName & "\" & Application.ActiveWorkbook.Sheets(1).Name & FileExtStr
    Application.ActiveWorkbook.SaveAs xFile, FileFormat:=FileFormatNum   '<---ERROR HERE
    Application.ActiveWorkbook.Close False
Next

MsgBox "You can find the files in " & FolderName
Application.ScreenUpdating = True
End Sub
Dim sItem作为字符串
专用子浏览按钮点击()
Dim fldr As FILE对话框
将strPath设置为字符串
设置fldr=Application.FileDialog(msoFileDialogFolderPicker)
与fldr
.Title=“选择一个文件夹”
.AllowMultiSelect=False
.InitialFileName=strPath
如果.Show-1,则退出Sub
sItem=.SelectedItems(1)
以
showFilePath.Text=sItem
端接头
专用子取消按钮单击()
卸下我
端接头
专用子导出按钮单击()
Dim FileExtStr作为字符串
Dim FileFormatNum尽可能长
将xWs设置为工作表
Dim xWb作为工作簿
Dim FolderName作为字符串
Application.ScreenUpdating=False
设置xWb=Application.ThisWorkbook
DateString=格式(现在为“yyyy-mm-dd-hh-mm-ss”)
FolderName=sItem&“\”&xWb.Name&“&DateString
MkDir FolderName
对于xWb.工作表中的每个xWs
拷贝
如果xlsx=True,则
FileExtStr=“.xlsx”:FileFormatNum=51
卸下我
ElseIf xlsm=则为真
FileExtStr=“.xlsm”:FileFormatNum=52
卸下我
ElseIf xls=则为真
FileExtStr=“.xls”:FileFormatNum=56
卸下我
ElseIf xlsb=则为真
FileExtStr=“.xlsb”:FileFormatNum=50
卸下我
ElseIf csv=则为真
FileExtStr=“.csv”:FileFormatNum=6
卸下我
ElseIf txt=则为真
FileExtStr=“.txt”:FileFormatNum=-4158
卸下我
ElseIf html=True则
FileExtStr=“.html”:FileFormatNum=44
卸下我
ElseIf prn=则为真
FileExtStr=“.prn”:FileFormatNum=36
卸下我
如果结束
xFile=FolderName&“\”&Application.ActiveWorkbook.Sheets(1).Name&FileExtStr

Application.ActiveWorkbook.SaveAs xFile,FileFormat:=FileFormatNum'当您在VBA中遇到错误时,最好的解决方案是仔细阅读错误消息框。在这种情况下,第一个建议是正确的——“确保指定的文件夹存在”

检查文件夹是否存在的最简单方法是查看路径。可能的解决办法:

MsgBox xFile
它将打印文件夹并允许您从此进行调试。通常错误是可见的,如本例中出现的两个
\\

编辑:

在这种情况下,OP可以首先检查showFilePath(浏览)是否正确使用:

If Dir(showFilePath.Text) = "" Then
    sItem = showFilePath.Text
Else
    MsgBox "No folder selected!"
    Exit Sub
End If
其次,OP可以检查以下哪种情况适用:

If Right(sItem, 1) = "\" Then 'Backslash is yet present
    FolderName = sItem & xWb.Name & " " & DateString
Else
    FolderName = sItem & "\" & xWb.Name & " " & DateString 'Add a Backslash
End If

也许是个愚蠢的问题,但是你检查了错误弹出窗口中列出的所有可能的问题了吗?@vityta我本地电脑中的位置。没有共享。@vityta它给我的错误在这一行
Application.ActiveWorkbook.SaveAs xFile,FileFormat:=FileFormatNum
@AmanDevrath-我想这个错误可能是因为路径中的两个“\\”。非常感谢您的帮助@维迪亚塔谢谢你。但是,只有在选择了驱动器的情况下,代码中的这种更正才有效,而不是在选择了文件夹的情况下。@Vityata,我已经为OP提供了一些代码,以避免将来出现这些错误。希望你能接受。