VBA 另存为结果未定义的文件类型

Posted

技术标签:

【中文标题】VBA 另存为结果未定义的文件类型【英文标题】:VBA Save As resulting undefined file type 【发布时间】:2015-07-06 08:45:28 【问题描述】:

我有一个简单的 VBA,它多次运行同一个报表,同时循环使用不同的名称,将每个报表保存为单独的工作簿。

一切正常,但其中 1 个报告始终保存为“未定义”文件类型,之后我必须手动将其更改为 excel。所有其他人都保存得很好,所以我无法弄清楚这个问题。我尝试过使用 SaveAs FileFormat,但他们都没有解决这个问题。

 For Each c In MCH
        Detail.Range("B8:E10000").ClearContents
        Data.Rows("4:4").AutoFilter Field:=2, Criteria1:= _
            c.Value
        lr = Data.Cells(Rows.Count, "E").End(xlUp).Row
        Data.Range("E5:H" & lr).Copy Detail.Range("B8")
        Sheets("Detail").Calculate
        Set name = Detail.Range("B4")
        Sheets("Detail").Copy
        ActiveSheet.Cells.Copy
        ActiveSheet.Range("A1").PasteSpecial Paste:=xlValues
        ActiveSheet.Range("A1").Select
        Set wb = ActiveWorkbook
        wb.SaveAs ThisWorkbook.Path & "\" & name
        wb.Close False
    Next

【问题讨论】:

愿意发布代码吗? 很抱歉不确定它是否有用,因为它是更大宏的一部分,但我添加了涉及保存的部分。谢谢 【参考方案1】:

您没有选择文件格式。

代替:

Set wb = ActiveWorkbook
wb.SaveAs ThisWorkbook.Path & "\" & name

试试这个:

Xslx

ActiveWorkbook.SaveAs Filename:= ThisWorkbook.Path & "\" & name, FileFormat:= xlOpenXMLWorkbook, CreateBackup:=False

文本文件 (txt)

ActiveWorkbook.SaveAs Filename:= ThisWorkbook.Path & "\" & name, FileFormat:= xlUnicodeText, CreateBackup:=False

对于其他 FileFormat,请参阅此枚举:

https://msdn.microsoft.com/en-us/library/bb241279(v=office.12).aspx

如有问题

如果您遇到上述问题,请执行以下操作:

    转到Developer 标签 点击录制宏 以所需格式手动保存文件 点击停止录制 打开您的 VBA 项目并获取生成的代码

【讨论】:

只是想知道如果我将 name(variable) 的值设置为“Myfile.txt”,脚本可以为我保存一个 .txt 文件吗? 对于文本文件,将 xlOpenXMLWorkbook 替换为 xlUnicodeText 我试过了,但它仍然不适用于一个特定的文件。文件名周围的内容可能会导致问题吗? 是的,可能有几个问题。请参阅更新的帖子部分In case of issues。请按照此方案查看问题所在 我想我找到了问题所在。导致问题的名称是 3.1 Philip Lim,所以当我使用该名称保存文件时,我认为小数导致了未定义的文件类型。有没有办法在不创建特定规则的情况下解决名称中的小数点?

以上是关于VBA 另存为结果未定义的文件类型的主要内容,如果未能解决你的问题,请参考以下文章

Javascript:将画布另存为图像 ==>“未捕获的类型错误:未定义不是函数”

不考虑另存为文件类型的另存为通用文件对话框

用于在另存为对话框中将工作表另存为预命名文件的 VBA 代码

另存为,每种文件类型都有不同的回调函数

VBA - 另存为后工作簿的对象会发生啥?

VBA 另存为 PDF 文件名作为单元格值