【问题标题】:Excel cycle through validation list and export as WorkbookExcel 在验证列表中循环并导出为工作簿
【发布时间】:2021-08-20 12:26:37
【问题描述】:

我有

-工作表名称“sheet2:

-G1中的数据验证列表

看看是否有一种方法可以让宏循环遍历数据验证列表并导出具有该单元格中文本名称的工作簿并循环遍历,以便列表的每个项目都导出为它们自己的工作簿。也就是如果下拉菜单中有 100 行,那么我会以 100 个 excel 文件结束,每个文件分别为 100 个下拉选项命名。

例如,这对我打印出 pdf 文件有用:

Public Sub Create_PDFs()

Dim destinationFolder As String
Dim dataValidationCell As Range, dataValidationListSource As Range, dvValueCell As Range

destinationFolder = "C:\Users\DELL 04\Desktop\Q-Book Activities\Experiment"     'Same folder as workbook containing this macro
'destinationFolder = "C:\path\to\folder\"  'Or specific folder

If Right(destinationFolder, 1) <> "\" Then destinationFolder = destinationFolder & "\"
     
'Cell containing data validation in-cell dropdown

Set dataValidationCell = Worksheets("sheet2").Range("G1")
 
'Source of data validation list

Set dataValidationListSource = Evaluate(dataValidationCell.Validation.Formula1)
 
'Create PDF for each data validation value

For Each dvValueCell In dataValidationListSource
    dataValidationCell.Value = dvValueCell.Value
    With dataValidationCell.Worksheet.Range("A1:I45")
        .ExportAsFixedFormat Type:=xlTypePDF, Filename:=destinationFolder & dvValueCell.Value & ".PDF", _
            Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
    End With
Next
    End Sub

【问题讨论】:

  • 尝试将.ExportAsFixedFormat 替换为ActiveWorkbook.saveas 并使用必要的特定参数。当然,更改FileName 的扩展名并使用适当的FileFormat

标签: excel vba


【解决方案1】:

如果您只是使用相同的工作代码并创建工作簿会怎样?

For Each dvValueCell In dataValidationListSource
    Workbooks.Add.SaveAs Filename:=destinationFolder & dvValueCell
    Workbooks(dvValueCell & ".xlsx").Close
Next

【讨论】:

  • 这只是将所有工作簿保存为空白,没有数据
  • 是吗?我看不出你说你想要别的什么?除了您说“导出”,但绝不是文件中应该包含的内容。除非我只是想念一些东西。我猜你想和你对 PDF 做同样的事情,事后看来这是有道理的。
【解决方案2】:

尝试替换:

.ExportAsFixedFormat Type:=xlTypePDF, Filename:=destinationFolder & dvValueCell.Value & ".PDF", _
            Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False

Worksheets("sheet2").Copy 'it creates a new workbook with Sheet2 content
ActiveWorkbook.saveAs Filename:=destinationFolder & dvValueCell.Value & ".xlsx", FileFormat:=xlWorkbookDefault 
ActiveWorkbook.Close False

【讨论】:

  • 这完成了这项工作,但它也保存了 Sheet 1。有什么办法可以摆脱第一张。由于缺少链接,没有在 sheet2 中输入的数据进行更改..并且只保存 sheet2
  • @maqlly 我将调整代码以仅保存 Sheet2 与下拉列表中存在的行数一样多。适应。请进行测试并发送一些反馈。
  • 你是一个真正的传奇,不会说谎,工作完美..只是调整它只复制值而不是公式,谢谢
  • @maqlly 你没有说任何关于公式转换的事情......我不知道你是怎么做到的,但最好的方法应该是创建一个具有公式的单元格范围rng(一次,使用 SpecialCells)和简单的使用 rng.value = rng.value。无论如何,我们在这里当有人回答我们的问题时,请勾选代码左侧的复选框,以使其接受答案。这样,其他搜索类似内容的人就会知道该代码有效......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-31
  • 2015-08-06
  • 2016-11-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多