当VBA中的某些单元格是某个数字时,如何让工作表不打印(while循环)

2024-04-17

我创建了一个脚本,该脚本从 SAP 获取信息并将其导出到 Excel 中。每当运行该宏时,每次返回的行数都不同。
i.e.
第1次:4行
第二次:12行等。

将它们填充到表中后,我使用强大的查询编辑器读取该文件并创建一个非常简单的 ETL 函数。

在 ETL 所在的工作簿中,提取的 SAP 会预先填充到多个工作表中。但是,有时工作表上的某些单元格为 0,因为提取的行数较多。

i.e.

从 SAP 中提取的 4 行仅填充了其中 3 个表。
从 SAP 中提取的 12 行仅填充了 6 个工作表。

etc.

目前我编写了 VBA 来打印所有工作表,如下所示:

Dim sh As Worksheet
For Each sh In ThisWorkbook.Worksheets
    If sh.Name = "V" Or sh.Name = "W" Or sh.Name = "X" Or sh.Name = "Y" Or sh.Name = "Z" Then  'it prints the worksheets that you want here there might be a chance that we have to add more sheets ? thats a worry of mine.
    sh.PrintOut Preview:=False, ActivePrinter:="Print&Go Americas", PrintToFile:=True, PrToFileName:=PSFileName 'make sure to change the printer name if you have to based on location'
    End If
Next sh 

但是,我试图避免打印所有工作表,而只打印那些有值的工作表,因此(如下所示)如果单元格 D6、H6、H7 不为 0,那么我会告诉它打印出来。然而,

if ActiveWorkbook.Sheets(“V”).Range(“D6, H6, H7”).Select <> 0 then worksheets.("V").PrintOut
elseif ActiveWorkbook.Sheets(“W”).Range(“D6, H6, H7”).Select <> 0 then worksheets.("W").PrintOut
elseif ActiveWorkbook.Sheets(“X”).Range(“D6, H6, H7”).Select <> 0 then worksheets.("X").PrintOut
elseif ActiveWorkbook.Sheets(“Y”).Range(“D6, H6, H7”).Select <> 0 then worksheets.("Y").PrintOut
elseif ActiveWorkbook.Sheets(“Z”).Range(“D6, H6, H7”).Select <> 0 then worksheets.("Z").PrintOut
elseif ActiveWorkbook.Sheets(“ZA”).Range(“D6, H6, H7”).Select <> 0 then worksheets.("ZA").PrintOut
elseif ActiveWorkbook.Sheets(“ZB”).Range(“D6, H6, H7”).Select <> 0 then worksheets.("ZB").PrintOut
elseif ActiveWorkbook.Sheets(“ZC”).Range(“D6, H6, H7”).Select <> 0 then worksheets.("ZC").PrintOut
else ActiveWorkbook.Sheets(“ZD”).Range(“D6, H6, H7”).Select <> 0 then worksheets.("ZD").PrintOut

没有为我做任何事情并给我一个错误。

所以我在上面的代码中尝试做的是:

V 工作表上的单元格 d6 h6 h7 不为 0,那么我将其打印出来。
W 工作表上的单元格 d6 h6 h7 不为 0,那么我将其打印出来。
etc.


条件工作表打印

  • 两种解决方案都满足要求,但主要区别在于:第一个是区分大小写的(例如V<>v)并且很难找到要更改的工作表名称。
Option Explicit
     
Sub printWorksheetsSelect()

    Const sAddress As String = "D6,H6,H7"
       
    Dim sws As Worksheet
    Dim srg As Range
    Dim sCell As Range
    Dim doNotPrint As Boolean
    
    For Each sws In ThisWorkbook.Worksheets
        Select Case sws.Name ' or UCase(sws.Name) for case insensitivity
        Case "V", "W", "X", "Y", "Z", "ZA", "ZB", "ZC", "ZD" ' add more
            Set srg = sws.Range(sAddress)
            Debug.Print sws.Name, srg.Address
            For Each sCell In srg.Cells
                If sCell.Value = 0 Then
                    doNotPrint = True
                    Exit For
                End If
            Next sCell
            If Not doNotPrint Then
                sws.PrintOut
                doNotPrint = False
            End If
        End Select
    Next sws

End Sub

Sub printWorksheetsMatch()

    Const sAddress As String = "D6,H6,H7"
    Const sNamesList As String = "V,W,X,Y,Z,ZA,ZB,ZC,ZD"
       
    Dim sNames() As String: sNames = Split(sNamesList, ",")
    
    Dim sws As Worksheet
    Dim srg As Range
    Dim sCell As Range
    Dim doNotPrint As Boolean
    
    For Each sws In ThisWorkbook.Worksheets
        If IsNumeric(Application.Match(sws.Name, sNames, 0)) Then
            Set srg = sws.Range(sAddress)
            For Each sCell In srg.Cells
                If sCell.Value = 0 Then
                    doNotPrint = True
                    Exit For
                End If
            Next sCell
            If Not doNotPrint Then
                sws.PrintOut
                doNotPrint = False
            End If
        End Select
    Next sws

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

当VBA中的某些单元格是某个数字时,如何让工作表不打印(while循环) 的相关文章

  • 读取R中打开的Excel文件

    有没有办法将打开的Excel文件读入R 当Excel中打开一个excel文件时 Excel会对文件加锁 比如R中的read方法无法访问该文件 你能绕过这个锁吗 Thanks 编辑 这发生在带有原始 Excel 的 Windows 下 发生错
  • 在 VBA Excel 中查找、剪切和插入行以匹配借项和贷项值

    我在 Sheet1 中有以下设置数据 并从第 4 行 A 列开始 其中标题位于第 3 行 No Date Code Name Remarks D e b i t Cr e d i t 1 4 30 2015 004 AB 01 04 15
  • 使用 MID、LEN 和 FIND 函数提取单元格文本的某些部分?

    我有一份 Excel 作业 但我陷入了最后部分 我被要求使用 MID LEN 和 FIND 来提取单元格内的特定字符串 我非常了解每个人的工作方式 将这三者结合起来并让它们发挥作用是我遇到的问题 我需要将城市与地址的其余部分分开 然后将其显
  • 如何将 MySQL 查询输出保存到 Excel 或 .txt 文件? [复制]

    这个问题在这里已经有答案了 如何将 MySQL 查询的输出保存到 MS Excel 工作表 即使只能将数据存储在 txt文件 就可以了 From 将 MySQL 查询结果保存到文本或 CSV 文件中 http www tech recipe
  • SpreadsheetML 文件扩展名被 IE 和 FF 更改 - 内容类型错误?

    我正在 PHP 中生成 SpreadsheetML 文件 当用户下载文件并保存时 默认情况下文件会另存为 Report xml 并在 Excel 中打开 但是 如果选择在 Excel 中打开文件而不是保存文件 则文件名将更改为 Report
  • Java Microsoft Excel API [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何在 VBA 中声明接受 XlfOper (LPXLOPER) 类型参数的函数?

    我在之前的回答里发现了问题 https stackoverflow com q 19325258 159684一种无需注册即可调用 C xll 中定义的函数的方法 我之前使用 XLW 提供的注册基础结构 并且使用 XlfOper 类型在 V
  • 如果总和为 0,则查找并删除带标题的最后一列

    我想创建一个宏 查找带有标题的最后一列 并仅当该列的总和等于零时才将其删除 到目前为止 这是我尝试过的 Dim LastCol As Long Dim i As Long With ThisWorkbook Sheets Sheet1 Fo
  • VSTO 替代方案 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 VSTO 有哪些替代方案 ManagedXll 能做什么而 VSTO 不能 你什么时候使用其中一个而不
  • VBA在多个文件夹中搜索特定子文件夹并移动其中的所有文件

    你能帮助我吗 我想要一个宏vba来搜索SPECIFIC例如 所有存在并移动其文件的文件夹和子文件夹之间的子文件夹 Xfolder P Desktop Folder1 subfolder SUBFOLDER1 Xfolder 我正在使用 VB
  • 支持 >65k 行的 Excel VBA SQL 驱动程序

    在 Excel 2010 中通过 VBA 查询 Excel 数据时 我遇到一个有趣的问题 我正在使用这些驱动程序连接到 xls 或 xls x m 文件 Sub OpenCon ByRef theConn As Connection ByV
  • 使用宏打开受信任文档或启用宏时 Excel 崩溃

    正如标题所示 我无法使用宏打开受信任的文档 Excel 立即崩溃 制作文档的副本允许其打开 因为该副本不受信任 并且我可以检查 VB 编辑器中的宏 但启用宏会导致另一次崩溃 为什么会发生这种情况以及我可以采取什么措施来解决它 我今天遇到了类
  • 使用 VBA 通过 Access 导航网页/操作 IE

    你好 StackOverflow 社区 我有一个关于使用 Access VBA 操作 IE 的问题 本质上 我正在尝试编写代码 使用 IE 打开特定网页 在该页面中搜索特定链接 目标链接的名称将取决于用户的情况 通过以编程方式单击该链接导航
  • 如何通过电子邮件发送 Excel 文件?

    我有一个 excel 文件 Excel 2003 xls 格式 我想用 c 通过电子邮件发送它 我的代码成功发送它 但是当我尝试打开响应文件时 它似乎编码错误 例如 这里是响应文件名 utf 8 B RWxzesOhbW9sw6FzXzIw
  • 替换字符串变量中的多个字符 (VBA)

    如何替换字符串变量中的多个内容 这是我在 VBA 中的示例函数 Private Function ExampleFunc ByVal unitNr As String If InStr unitNr OE gt 0 Then unitNr
  • VBA Excel:将范围值分配给新范围

    我在将一个工作簿范围中的值分配给当前工作簿中的某个范围时遇到问题 当我使用 Range A1 C1 分配我的范围时 此代码工作正常 但是当我使用 Range Cells 1 1 Cells 1 3 定义我的范围时 该函数会失败 Sub Co
  • 如何修复日期过滤器 VBA,因为它没有拾取我范围内的所有日期

    我正在尝试创建一个过滤器来过滤掉我选择的日期内的所有日期 我选择的日期将始终反映整个月 例如 如果我需要 2019 年 5 月的数据 我将输入开始日期为 01 05 2019 结束日期为 31 05 2019 我的数据过滤器将需要选取经过我
  • 实例化 Microsoft.Office.Interop.Excel.Application 对象时出现错误:800700c1

    实例化 Microsoft Office Interop Excel Application 以从 winforms 应用程序生成 Excel 时 出现以下错误 这之前是有效的 但突然间它停止工作了 尽管代码和 Excel 版本没有变化 我
  • 如何隐藏组合框下拉列表中的列?

    我正在 Excel 用户窗体中构建一个 ComboBox 该用户窗体从 Access 表中获取其行 我想在下拉列表中向用户显示多个文本字段 但从 ComboBox 返回的值应该是与用户选择的行关联的 ID 号 即 ID 列是绑定列 但我不想
  • 如何区分列表框中显示的文本和实际值?

    我有一个带有多选选项的列表框 我使用以下方式填充它addItem功能 我在 Google 上找不到任何有关此内容的文章 但我需要区分列表框中显示的文本和实际值 例如 shown hiddenvalue monday A1 tuesday A

随机推荐