将Excel作为csv导出到另一个位置vba-window时出现问题;“黑出去”;

将Excel作为csv导出到另一个位置vba-window时出现问题;“黑出去”;,excel,vba,Excel,Vba,我在将Excel文档导出为CSV时遇到一些问题。我得到了以下代码的帮助,但我得到的问题是文档“变黑”并且在之后变得不负责任 我希望我的用户能够继续工作后的文件 Sub ExportAsCSV() Application.DisplayAlerts = False Dim folderPath As String, csvFile As String folderPath = "C:\test" If Dir(folderPath, vbDirectory) = "

我在将Excel文档导出为CSV时遇到一些问题。我得到了以下代码的帮助,但我得到的问题是文档“变黑”并且在之后变得不负责任

我希望我的用户能够继续工作后的文件

 Sub ExportAsCSV()
Application.DisplayAlerts = False
Dim folderPath As String, csvFile As String
folderPath = "C:\test"
If Dir(folderPath, vbDirectory) = "" Then MkDir folderPath
 csvFile = folderPath & "\" & Split(ActiveWorkbook.Name, ".")(0) & ".csv"

    

ActiveWorkbook.Save
ActiveWindow.Close

Application.ScreenUpdating = True
Application.DisplayAlerts = True

ActiveWorkbook.SaveAs FileName:=csvFile, FileFormat:=xlCSV

ActiveWorkbook.Close SaveChanges:=False

End If


End Sub
  • 这一行
    如果Dir(folderPath,vbDirectory)=“”,那么MkDir folderPath
    是一行If语句,不能有
    结束If
    。因此,要么在
    之后需要换行符,然后
    ,要么删除
    结束符(如果
    )。现在它将抛出一个错误

  • 此行
    ActiveWindow.Close
    关闭工作簿。因此,在此之后,使用
    ActiveWorkbook.SaveAs
    保存它将无法再工作,因为它已关闭!这条线需要拆下

  • 最后,不需要
    应用程序.DisplayAlerts

  • 没有
    应用程序的
    Application.screenUpdate=True
    在这里没有多大意义。所以我们也可以把它去掉

  • 因此,请尝试以下方法:

    Sub ExportAsCSV()
        Dim folderPath As String, csvFile As String
        folderPath = "C:\test"
     
        'if your `If` has and `End If` there must be nothing than a linebreak after `Then`
        If Dir(folderPath, vbDirectory) = "" Then 'if C:\test does not exist yet
            MkDir folderPath '… create it.
        End If
    
        csvFile = folderPath & "\" & Split(ActiveWorkbook.Name, ".")(0) & ".csv"
    
        ActiveWorkbook.Save
        'ActiveWindow.Close 'if you close here you cannot save it later because it is closed
    
        ActiveWorkbook.SaveAs FileName:=csvFile, FileFormat:=xlCSV
        ActiveWorkbook.Close SaveChanges:=False
    End Sub
    
    导出为CSV(覆盖并保存)
    • 调整常量部分中的两个值
    • 请注意,这将覆盖
      .csv
      文件(如果该文件已存在)
    代码

    Option Explicit
    
    Sub ExportAsCSV()
        
        Const FolderPath As String = "C:\test"
        
        Dim wb As Workbook: Set wb = ThisWorkbook
        
        If Dir(FolderPath, vbDirectory) = "" Then
            MkDir FolderPath
        End If
        
        Dim FilePath As String
        FilePath = FolderPath & "\" & Split(wb.Name, ".")(0)
        
        Application.ScreenUpdating = False ' Will reset after `End Sub`.
        wb.Save
        Application.DisplayAlerts = False ' Enables overwrite without dialog popup.
        wb.SaveAs Filename:=FilePath, FileFormat:=xlCSV
        Application.DisplayAlerts = True
        wb.Close SaveChanges:=False
    
    End Sub
    
    • 以下操作将导出活动工作表,并使工作簿保持保存和打开状态。现在你可以继续在它里面工作了
    导出工作表

    Option Explicit
    
    Sub ExportAsCSV()
        
        Const FolderPath As String = "C:\test"
        
        If Dir(FolderPath, vbDirectory) = "" Then
            MkDir FolderPath
        End If
        
        Dim swb As Workbook: Set swb = ThisWorkbook
        Dim sName As String: sName = swb.ActiveSheet.Name
        
        Dim FilePath As String
        FilePath = FolderPath & "\" & Split(swb.Name, ".")(0)
        
        Application.ScreenUpdating = False
        
        swb.Save
        swb.ActiveSheet.Copy
        Dim dwb As Workbook: Set dwb = ActiveWorkbook
        Application.DisplayAlerts = False ' Overwrite without dialog popup.
        dwb.SaveAs Filename:=FilePath, FileFormat:=xlCSV
        Application.DisplayAlerts = True
        dwb.Close SaveChanges:=False
    
        Application.ScreenUpdating = True
        
        MsgBox "Worksheet '" & sName & "' exported.", vbInformation, "Success"
    
    End Sub
    

    ActiveWorkbook.Close SaveChanges:=False
    此代码是您要关闭的工作簿中的代码还是其他代码?您应该将工作簿分配给变量,而不是使用
    ActiveWorkbook
    有多少工作簿?有一个工作簿包含此代码和。。。?您希望以
    .csv
    格式保存哪一个工作簿?它只是一个工作簿。我误解的是什么?如果您已关闭工作簿,则无法导出它。非常感谢您的指点!我想我明白你的一些解释,但是代码现在似乎不起作用。首先尝试在指针后更改我的当前代码,然后只是复制粘贴代码,但在按下按钮后什么也没有发生。可能是因为
    folderPath=“C:\test”
    已经存在。查看我的最新答案。如果
    ,我移动了
    结束您可能会从阅读和学习如何一步一步地调试代码中受益。非常感谢您的时间和帮助。我肯定会把你关于调试的建议加入书签:)我想我现在把事情搞砸了。当导出到硬盘上的文件位置时,代码正常工作。在过去的几个小时里,我一直在将位置从“c:\test”更改为服务器上的一个位置。我想整个代码都必须更改吗?我尝试了
    Sub-serverfolder()Dim StrFile作为字符串StrFile=Dir(“\\ServerIP\Folder\”&“*”),而StrFile“”StrFile=Dir