将Excel作为csv导出到另一个位置vba-window时出现问题;“黑出去”;
我在将Excel文档导出为CSV时遇到一些问题。我得到了以下代码的帮助,但我得到的问题是文档“变黑”并且在之后变得不负责任 我希望我的用户能够继续工作后的文件将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) = "
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