VBA 选择每个切片器项目然后将每个选定的切片器项目保存为 pdf?

2023-12-31

我设计了一个由许多不同的数据透视表和数据透视图组成的仪表板。

所有这些数据透视表/图表均由 1 个名为“Slicer_Store”的切片器控制。

此切片器中有大约 800 个不同的商店可供选择。

我需要保存每个商店仪表板的 pdf 格式。对于 800 多家商店来说,手动选择每个切片器项目,然后将工作表保存为 pdf 文件的过程非常耗时,因此我希望通过 VBA 自动化该过程。

到目前为止,这是我的代码:

Public Sub myMacro()
Dim sI As SlicerItem, sI2 As SlicerItem, sC As SlicerCache
Set sC = ActiveWorkbook.SlicerCaches("Slicer_Store")
With sC

    For Each sI In sC.SlicerItems
        sC.ClearManualFilter
        For Each sI2 In sC.SlicerItems
            If sI.Name = sI2.Name Then sI2.Selected = True Else: sI2.Selected = False
        Next

        Debug.Print sI.Name
        'add export to PDF code here
        ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        "C:\Users\TestUser\Desktop\testfolder" & Range("b1").Text  & ".pdf", Quality:= _
        xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
        OpenAfterPublish:=False
    Next

End With
End Sub

该代码确实处理了所有切片器项目,但文件未保存为 pdf。我需要将每个文件保存为 B2 中的值,因此它将是 Store1.pdf、Store2.pdf、Store3.pdf 等。

任何帮助将不胜感激。这是一个大工作项目,很多人都依赖这些 pdf 文件。


编辑后的代码:

这应该可行,但需要永远检查所有切片器项目(800+)。另外,我需要确保它只打印第一页(打印区域),这样切片器本身就不会被打印。

Public Sub myMacro()
Dim sI As SlicerItem, sI2 As SlicerItem, sC As SlicerCache
Dim ws As Worksheet
Set sC = ActiveWorkbook.SlicerCaches("Slicer_Store_Number")
Set ws = Sheet18
With sC

    For Each sI In sC.SlicerItems
        sC.ClearManualFilter
        For Each sI2 In sC.SlicerItems
            If sI.Name = sI2.Name Then sI2.Selected = True Else: sI2.Selected = False
        Next

       Debug.Print sI.Name
        'add export to PDF code here
      ws.PageSetup.PrintArea = ws.Range("A1:N34").Address

       ws.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        "C:\Users\testuser\Desktop\testfolder" & Range("M1").Text & ".pdf", Quality:= _
        xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
        OpenAfterPublish:=False
    Next

End With
End Sub

这实际上解决了问题,但是您获得 800 多个项目的方法将永远无法完成。请参阅下面的另一个解决方案,该解决方案需要用户的一点协作,但速度要快得多。

在打印到 PDF 之前添加此行:

 Range("b1") = sI.Name

这会将商店名称写入该范围,以便稍后您可以将其用作 pdf 文件的名称。

另外,在路径末尾添加斜杠:

 ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
          "C:\Users\TestUser\Desktop\testfolder\" & Range("b1").Text  & ".pdf", Quality:= _

如果您只想打印第一页,您可以在上面几行之前设置打印区域或使用以下命令:

ActiveSheet.PrintOut from:=1, To:=1

UPDATE

在此解决方案中,您需要确保第一个切片器项目,并且仅选择该项目(因此您不应该清除手动过滤器)。这是基于此编码的。原始代码每次都会遍历所有切片器项目,选择一个并取消选择其他项目,这会导致极高的计算成本。

Public Sub myMacro()
Dim sC As SlicerCache
Set sC = ActiveWorkbook.SlicerCaches("Slicer_Store_Number")




  'This reminds the user to only select the first slicer item
   If sC.VisibleSlicerItems.Count <> 1 Or sC.SlicerItems(1).Selected = False Then
      MsgBox "Please Only Select Store-Number 1"
      Exit Sub
   End If


For i = 1 To sC.SlicerItems.Count

    'Do not clear ilter as it causes to select all of the items (sC.ClearManualFilter)

    sC.SlicerItems(i).Selected = True
    If i <> 1 Then sC.SlicerItems(i - 1).Selected = False


    'Debug.Print sI.Name
    'add export to PDF code here
    With Sheet18.PageSetup

    .PrintArea = Sheet18.Range("A1:N34" & lastRow).Address

    .FitToPagesWide = 1
    .FitToPagesTall = 1

    End With

    Sheet18.Range("M1") = sC.SlicerItems(i).Name

   'This prints to C directory, change the path as you wish

   Sheet18.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
    "C:\" & Range("M1").Text & ".pdf", Quality:= _
    xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
    OpenAfterPublish:=False
Next

End Sub
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

VBA 选择每个切片器项目然后将每个选定的切片器项目保存为 pdf? 的相关文章

  • VB FFT - 难以理解结果与频率的关系

    试图理解我正在使用的 fft 快速傅里叶变换 例程 窃取 回收 输入是 512 个数据点的数组 它们是样本波形 测试数据生成到该数组中 fft 将该数组变换到频域 尝试理解频率 周期 采样率和 fft 数组中位置之间的关系 我用例子来说明
  • 从单元格中具有多种颜色的单元格中提取字体颜色

    我有一个 Excel 工作表 我正在尝试将其存入 MySQL 数据库 我使用 VBA 将数据作为文本写入文件 然后将其上传到数据库 在工作表的单元格中 有一些已用颜色编码的字符串 颜色具有一定的含义 因此当我将值移入数据库时 我想保留它们
  • 使用 Excel 2010 通过存储过程读取/写入 SQL Server 2008 数据库

    我们有一个 SQL Server 2008 数据库 它有存储过程来处理读 写等 这些过程由各种应用程序内部使用 需要一个人直接更新数据库中名为 Employee 的表 更新非常简单 更新 VARCHAR 和 INT 外键 字段 问题是 Sh
  • 在适用于 Windows 和 Mac 的 VBA 中指定用户文件夹的路径

    我正在编写一个使用 VBA 从 Excel 生成文件的工具 生成的文件将写入用户的 Documents 文件夹中的文件夹 如果存在 e g C Users
  • 我可以通过 vba 设置 Excel Power Query 的用户名和密码吗?

    我正在尝试设置一个电子表格 供其他人使用 通过 Power Query 更新表 当另一个用户使用电子表格时 他们会被要求 3 次输入用户名和密码 因为我有 3 个表正在更新 如何通过 VBA 为每个用户设置这些 我尝试将连接设置为匿名 但他
  • Excel:查找和替换宏 - 仅一列

    我编写了一些宏来将大量数据格式化为相同的可接受格式 我们从中提取的程序拒绝按照我们想要的方式提取数据 但理论上在 Excel 中更改并不难 它设置运行的方式是为修饰符使用单独的宏 然后使用 全部运行 宏来调用所有修饰符 目前我有 Sub R
  • 在 VBA 中从范围创建数组

    我遇到了一个看似基本的问题 但找不到任何资源来解决它 简而言之 我只想将一系列单元格 所有一列 的内容加载到数组中 我能够通过以下方式完成此任务 DirArray Array Range A1 Range A2 但由于某种原因 我无法以这种
  • 在 Excel VBA 中,如何访问存储在已安装的加载项中的子项?

    我已经创建了一个 Excel 加载项 该加载项中有一些模块 假设 module1 是其中之一 在 module1 中 我有一个 sub 声明为 public sub abc end sub 在我的工作簿中 我希望能够使用外接程序中定义的函数
  • 宏VBA获取Outlook 2003中选定的文本

    我正在尝试使用此代码片段来获取 Outlook 2003 中选定的文本 Sub SelectedTextDispaly On Error Resume Next Err Clear Dim oText As TextRange Get an
  • VBA MS-Word:是否可以用通配符替换文本?

    是否可以替换使用通配符找到的文本并将其也替换为通配符 例如FindText 13 2 13 Forward True MatchWildcards True 然后用这样的通配符替换它replacewith 13 2 11 是否可以 评论中的
  • VBA Excel 选择以字符开头的命名范围

    我在命名范围方面遇到了一些问题 我在不同的工作表上有多个命名范围 我想用VBA隐藏或显示所有这些范围 命名范围的示例 r1 name1 另一张纸上的第二个是r1 name2 因此 所有范围都以前面相同的代码开头 r1 我如何循环遍历以 r1
  • 使用 UnmanagedExports 包 [DllExport] 在 VBA 中调用 C# DLL 触发“找不到 DLL 入口点”错误

    我在用着罗伯特 吉塞克 http stackoverflow com users 35443 robert giesecke用于访问 Excel VBA 中的 c dll 的非托管导出包 我遵循了几个示例并继续收到运行时错误 453 在 m
  • Excel工作表中的动态减法公式

    我需要在Excel中编写一个动态减法公式 该公式从其上方的单元格中减去 指定列的 单元格 例如 A2 A1 G1 G列固定 and A3 A2 G2 and A4 A3 G3 等等 Excel 足够智能 可以使用动态引用和对当前单元格的相对
  • VBA Word - 更改小数点分隔符

    我周围的一些人在 Windows Office 中使用国家本地化 不幸的是 这导致我的宏无法执行简单的数学运算 因为它们使用逗号表示小数位置 而我编辑的 pov ray 文件仅使用逗号作为列表分隔符 使用点表示小数点 1 我知道在 Exce
  • 运行时错误“13”:IF 与 OR 语句组合的类型不匹配

    在我使用 Excel 的 VBA 代码中 Dim Field2 As String Field2 Cells i 4 Value If Right Field2 3 A 1 Or A 2 Or B 1 Or B 2 Or C 1 Or C
  • 从单元格复制时省略引号

    Problem 当从程序外部的 Excel 复制单元格时 会自动添加双引号 Details 我在 Windows 7 计算机上使用 Excel 2007 如果我有一个具有以下公式的单元格 1 CHAR 9 SOME NOTES FOR LI
  • 当第二个工作表中存在值时删除整行

    我有 2 张纸 sheet1 和sheet2 我在单元格 A3 sheet1 中有一个值 该值不是恒定的 Sheets2 中还有许多文件 我想做的是 当单元格 A3 Sheet1 中的值与 A 列 Sheet2 中的值相同时 它将删除找到该
  • 如何使用 VBA 忽略范围内的绿色三角形错误,而不逐个单元循环?

    我有一些正在自动化和分发的大型数据集 我想消除警告用户有关存储为文本的数字的绿色小三角形 我使用了以下代码 但在大量纸张上速度非常慢 Range Cells 1 1 Cells lastrow lColumn Select kill tho
  • 如何创建动态变量名VBA

    我正在尝试根据单元格中的值在 VBA 中创建动态数量的变量 本质上我想要的结果是这样的Team1 Team2 to TeamX 任何帮助是极大的赞赏 Dim i x As Integer Set x Range J4 Value Dim T
  • 在 Excel 中打印 MATLAB 图窗并调整其大小

    我在 MATLAB 中有两个带有手柄的图形hFig1 and hFig2 我想将它们打印到 Excel 中的特定单元格 单元格 E3 和 I3 并将它们重新调整为 2 英寸 x 3 英寸 我尝试过使用 AddPictures对象处理程序和使

随机推荐

  • 未找到数据库“C:/data/sample”,并且 IFEXISTS=true,因此我们无法自动创建它 - Spring Boot 中的错误

    我创建了一个 Spring Boot 应用程序来连接 h2 数据库 这样做时 它会抛出一个错误 显示未找到数据库 请帮助我找到我可以实施并解决问题的解决方案 我在 pom xml 文件中添加了 com h2database 依赖项 然后它也
  • python 函数中的形式参数和实际参数[重复]

    这个问题在这里已经有答案了 我对如何识别递归函数中的形式参数和实际参数感到有点困惑 例如 在这段用于获取数字阶乘的代码块中 def factorial n if n 1 return 1 else return n factorial n
  • WCF 主体权限属性异常日志记录

    我有一个 WCF 服务 其中包含带有 PrimaryPermission 属性的方法 当没有适当权限的用户尝试访问这些方法时 属性会抛出 SecurityException 但由于异常是在属性中引发的 因此无法在调用周围放置 try cha
  • cloud-init 忽略静态 IP 网络配置

    我运行 Ubuntu 18 04 云映像并尝试通过 cloud init 配置网络 由于某种原因 当我尝试分配静态 IP 时 它会忽略我的网络 然后转而使用 DHCP 我不知道为什么 也不知道如何调试它 有谁知道我是否做错了什么或者我应该如
  • opencl中的主机是什么?

    我现在开始学习openCL 我现在正在做教程 但我无法真正理解主机的想法 有人可以解释吗 谢谢 OpenCL 是一个旨在支持大规模并行处理的系统 例如可以由现代图形芯片 GPU 执行的处理 在 OpenCL 范例中 主机程序 是执行基于 G
  • 具有周期性边界条件的最近邻搜索

    在一个立方体盒子里 我有一个很大的 R 3 集合点 我想找到每个点的 k 个最近邻 通常我会考虑使用 k d 树之类的东西 但在这种情况下我有周期性边界条件 据我了解 k d 树的工作原理是将空间切割成一维较少的超平面 即在 3D 中 我们
  • 块数组?

    对我来说 这似乎是一种非常奇怪的交互 但同时它不仅有效 而且在此过程中不会抛出任何警告或错误 只是希望更好地理解一般的块以及为什么这样的事情可能是对的或错的 有什么理由不应该做这样的事情吗 NSArray array NSArray arr
  • Xamarin 自定义 UITableViewCell 抛出系统 NullReferenceException

    我正在为 iOS 创建一个 Xamarin 应用程序 并将 UITableViewCell 添加到故事板以赋予它我自己的风格 我确实向这个自定义 UITableViewCell 添加了一个类 即 MainMenuCell 我向单元格添加了两
  • BeginRequest 事件未在我的 httpmodule 中触发

    我有一个 httpmodule 但自从迁移应用程序 NET 4 以来 一直遇到一些奇怪的行为 BeginRequest 事件不会在某些请求上触发 但在其他请求上会触发 到目前为止 我还没有设法找出何时触发和不触发的模式 EndRequest
  • 模型/控制器之外的 Symfony2 getdoctrine

    我正在尝试在控制器之外获取 getDoctrine 我创建了这项服务 配置 服务 yml services update command class project projBundle Command Update arguments d
  • Azure管道ARM部署任务YAML多行[重复]

    这个问题在这里已经有答案了 是否可以使用多行在 Azure Pipelines 任务中的 YAML 中 例如对于 ARM 部署任务 有一个覆盖参数财产 如果可以将其分成几行而不是将所有内容都放在一行中 那就太好了 task AzureRes
  • 属性不存在:System.Windows.Interactivity?

    我的 C WPF 在加载 解决 System Windows Interactivity 时始终存在问题 我使用 Visual Studio 2010 作为编辑器 并且已经安装了 Blend 4 Blend 4 SDK xmlns i cl
  • 如何循环GDB脚本直到程序完成?

    define traverse while CONDITION if start 0 set start 1 print node print rss item else continue print node print rss item
  • Chrome 开发工具:查看未缩小的 CSS

    也许我错过了一些东西 也许是一个切换 但是有没有办法在 Chrome 开发工具中查看缩小的 CSS 源文件的未缩小 漂亮打印 版本 这是缩小版本 这是未缩小的
  • LLVM异常抛出

    我读过了这篇博文 http blog llvm org 2011 11 llvm 30 exception handling redesign html 本文档页面 http www llvm org docs ExceptionHandl
  • LINQ to SQL:连接表时如何处理不明确的列名?

    我将用我之前问过的一个问题来引导这个问题 LINQ to SQL 多个列上的多个联接 这可能吗 https stackoverflow com questions 5307731 linq to sql multiple joins on
  • Neo4j:如何删除节点之外的所有节点和关系?

    这是一个简单的图表 a r gt b 如果想删除 b 我可以这样做 MATCH a r gt b b DELETE a r b 然而 b 可以有多个关系和从中产生的节点 并且这些节点也可以递归地有更多的关系和节点 像这样的事情 a r gt
  • MQ 安全性 - 在一个队列上获得 2035

    我有一个应用程序试图将消息放入远程队列管理器上的队列 LOG TRANSACTION IN 该消息最终失败并返回 2035 并被放入本地队列管理器的 DLQ 中 在本地队列管理器 QMLOCAL 上 应用程序将消息直接放在 SCTQ 上 因
  • Ui-router 1.0.0.beta1 $transitions.onSuccess 来自 $rootScope.on('$stateSuccess',

    在我的 AngularJS v 1 5 x 中 我将基于控制器的状态转换为基于组件的状态ui router 1 0 0 目前处于 beta 1 阶段 https ui router github io ng1 我无法捕获之前捕获的状态更改
  • VBA 选择每个切片器项目然后将每个选定的切片器项目保存为 pdf?

    我设计了一个由许多不同的数据透视表和数据透视图组成的仪表板 所有这些数据透视表 图表均由 1 个名为 Slicer Store 的切片器控制 此切片器中有大约 800 个不同的商店可供选择 我需要保存每个商店仪表板的 pdf 格式 对于 8