我试图保存一个宏启用Excel工作簿作为一个CSV文件,重新启动旧的(下面我不得不改变文件夹和工作表的名称,但这似乎不是问题)。
Sub SaveWorksheetsAsCsv()
Dim SaveToDirectory As String
Dim CurrentWorkbook As String
Dim CurrentFormat As Long
CurrentWorkbook = ThisWorkbook.FullName
CurrentFormat = ThisWorkbook.FileFormat
SaveToDirectory = "\MyFolder\"
Application.DisplayAlerts = False
Application.AlertBeforeOverwriting = False
Sheets("My_Sheet").Copy
ActiveWorkbook.SaveAs Filename:=SaveToDirectory & "My_Sheet" & ".csv", FileFormat:=xlCSV
ActiveWorkbook.Close SaveChanges:=False
ThisWorkbook.Activate
ThisWorkbook.SaveAs Filename:=CurrentWorkbook, FileFormat:=CurrentFormat
Application.DisplayAlerts = True
Application.AlertBeforeOverwriting = True
End Sub
字符串
有时候会失败,
错误1004:object _workbook的方法saveas失败**)
调试器指出:
ActiveWorkbook.SaveAs Filename:=SaveToDirectory & "My_Sheet" & ".csv", FileFormat:=xlCSV
型
我在谷歌上搜索了一下,我尝试的一些解决方案是:
- 指定目录为字符串
- 避免文件名或文件夹中的任何特殊字符(参见here)
- 复制粘贴工作表作为值,然后将其保存为.csv(参见here)
- 使用.csv代码编号替换FileFormat(参见here)
- 禁用/重新启用某些警报
- 在ActiveWorkbook.SaveAs行中添加其他字段,如密码、创建备份等
尽管如此,它可能连续正确运行50-60次,然后在某个时候再次失败。
任何建议,除了停止使用Excel/Excel的这项任务,这将很快发生,但我现在不能。
编辑:感谢Degustaf的建议,我只对Degustaf建议的代码做了两处修改:
ThisWorkbook.Sheets
而不是CurrentWorkbook.Sheets
FileFormat:=6
而不是FileFormat:=xlCSV
(显然对不同版本的Excel更健壮)
Sub SaveWorksheetsAsCsv()
Dim SaveToDirectory As String
Dim CurrentWorkbook As String
Dim CurrentFormat As Long
Dim TempWB As Workbook
Set TempWB = Workbooks.Add
CurrentWorkbook = ThisWorkbook.FullName
CurrentFormat = ThisWorkbook.FileFormat
SaveToDirectory = "\\MyFolder\"
Application.DisplayAlerts = False
Application.AlertBeforeOverwriting = False
ThisWorkbook.Sheets("My_Sheet").Copy Before:=TempWB.Sheets(1)
ThisWorkbook.Sheets("My_Sheet").SaveAs Filename:=SaveToDirectory & "My_Sheet" & ".csv", FileFormat:=6
TempWB.Close SaveChanges:=False
ThisWorkbook.SaveAs Filename:=CurrentWorkbook, FileFormat:=CurrentFormat
ActiveWorkbook.Close SaveChanges:=False
Application.DisplayAlerts = True
Application.AlertBeforeOverwriting = True
End Sub
型
6条答案
按热度按时间9o685dep1#
我通常发现
ActiveWorkbook
是这些情况下的问题。我的意思是,不知何故,你没有选择该工作簿(或任何其他),Excel不知道该怎么做。不幸的是,由于copy
不返回任何东西(复制的工作表会很好),这是解决这个问题的标准方法。所以,我们可以这样做,我们如何将这个工作表复制到一个新的工作簿,并获得对该工作簿的引用。我们可以做的是创建新的工作簿,然后复制工作表:
字符串
或者,在这种情况下有一个更好的方法:
WorkSheet
支持SaveAs
方法。不需要复制。型
如果工作簿保持打开状态,但您的代码中已经有了它,那么我将警告您以后将工作簿重新保存为它的原始名称。
xxe27gdn2#
这是一年前的事了,但我会为未来的读者补充一些东西
您不会在Excel帮助中找到运行时错误1004的大量文档,因为Microsoft不认为它是Excel错误。
上面的答案是100%有效的,但有时它有助于了解导致问题的原因,以便您可以避免它,更早地修复它或更容易地修复它。
事实上,这是一个间歇性的错误,它是固定的保存与完整的路径和文件名告诉我,要么你的宏可能试图保存一个.xlsb文件到autocoverable目录后,自动文件恢复。
或者,您可能自己编辑了文件的路径或文件名。
您可以使用以下命令检查路径和文件名:- MsgBox ThisWorkbook.FullName
您应该在消息框中看到类似的内容。
C:\Users\Mike\AppData\Roaming\Microsoft\Excel\DIARY(版本1).xlxb
如果是这样的话,解决方案是(如上面其他人所说的)将文件保存到正确的路径和文件名。这可以用磁盘或手动完成。
我现在的习惯是手动保存文件与正确的路径和文件名作为当然后,任何自动恢复行动,因为它需要几秒钟,我发现它更快(如果这不是每天都发生的话)。因此,宏将不会遇到这个错误,你运行它。请记住,虽然我的习惯手动保存.xlxb文件到.xlsm文件后立即恢复不会帮助新手,你给予工作表到。
关于超链接的说明
出现此错误后:如果您在工作表中使用Ctrl+k创建了超链接,则在文件恢复后,您将在多个超链接中包含“AppData\Roaming\Microsoft"、“\AppData\Roaming"、“../../AppData/Roaming/“或“....\My documents\My documents\”。您可以通过将超链接附加到文本框或使用HYPERLINK函数生成超链接来避免这些超链接。
识别和修复它们稍微复杂一点
首先,检查超链接并确定错误的字符串和每个错误的正确字符串。
Excel在“转到特殊”菜单中不提供搜索使用Ctrl+k创建的超链接的工具。
您可以使用以下公式自动识别帮助列(比如列Z)中的错误超链接:
字符串
其中Link 2 Text是UDF
函数Link 2 Text(rng As Range)As String ' DO NOT deactivate. '定位Z列中包含'roaming'的超链接。
型
我纠正错误的方法如下
SubReplace_roaming()
'选择正确的工作表工作表(“日记”)。选择
型
我还建议你养成定期备份的习惯,不要只依赖自动恢复。如果它失败了,你就没有上次完整备份后的任何东西了。
虽然工作表是脆弱的备份经常,像每小时或任何重要的新数据导入后。
以下快捷键将在几秒钟内备份您的工作表:Ctrl+O,[高亮显示文件名],Ctrl+C,Ctrl+V,[ X ].常规备份允许您立即转到最近的备份,而不必从昨晚的备份文件中恢复,特别是如果您必须请求另一个人这样做。
bprjcwpo3#
距离上次回答已经有一段时间了,但我想分享一下我今天的经历:
经过几个星期的可靠操作,我突然遇到了同样的错误,而保存工作簿的代码部分没有任何变化。
感谢前面的答案,我更新了我的saveas语句,从一个简单的
字符串
到
型
瞧,又成功了。
有时微软的应用程序表现得很奇怪.
6rqinv9w4#
尝试将Path和CSV文件名组合到一个字符串变量中,并删除FileFormat处理的.csv;。Path必须是绝对的,以驱动器号或服务器名称开始:
Dim strFullFileName as String
strFullFileName = "C:\My Folder\My_Sheet"
如果在服务器上,则它看起来像这样:strFullFileName = "\\ServerName\ShareName\My Folder\My_Sheet"
用您的服务器名称替换ServerName,用您的网络共享名称替换ShareName,例如\\data101\Accounting\My Folder\My_Sheet
ActiveWorkbook.SaveAs Filename:=strFullFileName,FileFormat:=xlCSVMSDOS, CreateBackup:=False
hsvhsicv5#
我也有类似的问题,但对我来说,问题是我是基于从工作簿中提取的字符串创建文件夹的,有时这些字符串会有不能在文件名中的字符。删除这些字符对我来说是个窍门!
14ifxucb6#
对我来说,有一个问题,并不是所有的公式都在计算,尽管有它的“自动”。我按下计算左下角100次,然后它神奇地工作。