【问题标题】:Save multiple sheets in a new workbook in a particular file format以特定文件格式将多张工作表保存在新工作簿中
【发布时间】:2019-02-22 16:56:49
【问题描述】:

我试图阅读论坛上的一些相关帖子,但无法使代码工作或理解一些函数的语法。

我将尝试以简洁的方式描述我想要完成的工作:

  • 我有一个包含多个工作表(Sheet1、Sheet2 ... Sheet 5)的工作簿,我想创建一个宏分配按钮来另存为新工作簿,其中仅包含工作表1、Sheet 2和Sheet3

  • 文件格式应为 Microsoft Excel 97-2003 Worksheet (.xls)

  • 单击宏分配按钮后,应弹出另存为对话框,允许用户选择目标以及可选的新文件名(预分配的文件名可以是“textstring123”

  • 保存工作簿后,应打开工作簿供用户检查,同时最小化旧工作簿

我正在使用 Excel 2013,以防万一。

这个帖子可能看起来很粗糙,但我别无选择,只能寻求你的帮助,因为我在过去一天半的时间里一直在为此烦恼,如果没有这个,我的宏观项目的其余部分将成为浪费。提前感谢您的建议/建议/帮助。

如果需要任何其他细节或说明,请询问。

我已经添加了自己编写的代码行,但似乎无法正常工作。

Sub Macro6()
'
' Macro6 Macro
' Save as
''
Dim varResult As Variant
Sheets(Array("sheet1", "sheet2", "sheet3")).Copy
varResult = Application.GetSaveAsFilename(FileFilter:= _
             "Excel Files *.xls", FileFormat:=-57, Title:="Save File", _
            InitialFileName:=ActiveWorkbook.Path \ Textstring123.xls)
If varResult <> False Then
ActiveWorkbook.SaveAs Filename:=varResult, _
FileFormat:=xlWorkbookNormal

     Exit Sub
    End If

End Sub

【问题讨论】:

  • 欢迎来到 SO!即使您的代码不起作用,也要发布您的代码,这样您似乎就不会只是订购一些代码并表明您尝试过! ;)
  • 感谢您的建议,我已添加代码。我最不想做的就是让别人为我编写代码,我只是想探索和学习,但是我是盲人,需要一些有价值的指导。
  • @R3uK 我附上了调试器的截图,我无法找出问题
  • 很奇怪,如果它在下一行,但错误出现在 For Each... 让我无言以对... 没有声明变量,那应该是够了......它在我的电脑上工作,所以我不明白它对你不起作用......也许尝试就这个特定问题提出另一个问题,因为For Each 上的Out of Range 它真的是第一次看到这个!!
  • 我想我可能弄错了,这是我第一次使用调试器,对不起。调试器似乎执行 For 行并在下一行以黄色突出显示停止。我不确定错误是在 for 行还是下一行。

标签: vba excel


【解决方案1】:

这可以解决问题,我的过滤器有问题,所以我添加了一些错误处理!

Option Explicit

Sub Macro6()
'
' Macro6 Macro
' Save as
''
Dim tB As Excel.Workbook
Dim wB As Excel.Workbook
Dim ExportArray As Variant
Dim ShName As Variant
Dim ExportName As String

Dim varResult As Variant

Set tB = ThisWorkbook
ExportArray = Array("sheet1", "sheet2", "sheet3")

For Each ShName In ExportArray
    Debug.Print ShName
    tB.Sheets(ShName).Copy
    Set wB = ActiveWorkbook
    On Error Resume Next
        ExportName = Application.GetSaveAsFilename(tB.Path & "\Textstring123", "Excel Files *.xls", , "Save " & ShName)
        If Err.Number > 0 Then
            ExportName = Application.GetSaveAsFilename(tB.Path & "\Textstring123", , , "Save " & ShName)
        Else
            'No error, everything went well with filters
        End If
    On Error GoTo 0

    'String 8 and Boolean 11
    If VarType(ExportName) <> 8 Then
        Exit Sub
    Else
        wB.SaveAs Filename:=ExportName, FileFormat:=xlWorkbookNormal
    End If
    DoEvents
    wB.Close
Next ShName

End Sub

【讨论】:

  • 感谢及时回复,我还在看代码学习中。当我尝试执行代码时,出现运行时错误 9:下标超出范围。突出显示的代码行是 tB.Sheets(ShName).Copy 在 Array() 中,我使用分配的名称而不是工作表名称来引用工作表。这才是正确的处理方式吧?
  • @UK97 : 看来是对的,你应该在ExportArray = Array("...","...",...)中定义你要导出的工作表的名称
  • 是因为在该行之前没有定义 shName 变量吗?如果是,您如何定义该变量?
猜你喜欢
  • 1970-01-01
  • 2016-02-26
  • 1970-01-01
  • 1970-01-01
  • 2017-03-10
  • 1970-01-01
  • 2018-01-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多