Excel 如何在VBA(while循环)中某些单元格为特定数字时不打印图纸

Excel 如何在VBA(while循环)中某些单元格为特定数字时不打印图纸,excel,vba,Excel,Vba,我创建了一个脚本,从SAP获取信息并将其导出到Excel中。每当运行此宏时,每次返回的行数都不同。 i、 e. 第一次:4行 第二次:12排等 当这些文件被填充到一个表中时,我使用powerqueryeditor读取文件并创建了一个非常简单的ETL函数 在ETL所在的工作簿中,提取的SAP将预填充到多个工作表中。但是,由于提取的行数,工作表上的某些单元格有时为0 i、 e 从SAP中提取的4行只有3个表被填充。 从SAP中提取的12行只有6个表被填充 等等 目前,我编写了VBA来打印所有图纸,如

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

当这些文件被填充到一个表中时,我使用powerqueryeditor读取文件并创建了一个非常简单的ETL函数

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

i、 e

从SAP中提取的4行只有3个表被填充。
从SAP中提取的12行只有6个表被填充

等等

目前,我编写了VBA来打印所有图纸,如下所示:

Dim sh As工作表
用于此工作簿中的每个sh。工作表
如果sh.Name=“V”或sh.Name=“W”或sh.Name=“X”或sh.Name=“Y”或sh.Name=“Z”,则“它将打印您需要的工作表,我们可能需要添加更多工作表?那是我担心的事。
sh.PrintOut Preview:=False,ActivePrinter:=“打印并转到美洲”,PrintToFile:=True,PrToFileName:=PSFileName'如果必须根据位置更改打印机名称,请确保更改打印机名称'
如果结束
下一个sh
但是,我试图避免打印所有的表单,只打印那些有值的表单,因此(如下所示),如果单元格D6、H6、H7不是0,那么我会告诉它打印出来。但是,

如果是ActiveWorkbook.Sheets(“V”)范围(“D6,H6,H7”)。选择0,然后选择工作表。(“V”)。打印输出
elseif ActiveWorkbook.Sheets(“W”).范围(“D6,H6,H7”)。选择0,然后选择工作表。(“W”)。打印输出
elseif ActiveWorkbook.Sheets(“X”).范围(“D6,H6,H7”)。选择0,然后选择工作表。(“X”)。打印输出
elseif ActiveWorkbook.Sheets(“Y”).范围(“D6,H6,H7”)。选择0,然后选择工作表。(“Y”)。打印输出
elseif ActiveWorkbook.Sheets(“Z”).范围(“D6,H6,H7”)。选择0,然后选择工作表。(“Z”)。打印输出
elseif ActiveWorkbook.Sheets(“ZA”).范围(“D6,H6,H7”)。选择0,然后选择工作表。(“ZA”)。打印输出
elseif ActiveWorkbook.Sheets(“ZB”).范围(“D6,H6,H7”)。选择0,然后选择工作表。(“ZB”)。打印输出
elseif ActiveWorkbook.Sheets(“ZC”).范围(“D6,H6,H7”)。选择0,然后选择工作表。(“ZC”)。打印输出
else ActiveWorkbook.Sheets(“ZD”)。范围(“D6,H6,H7”)。选择0,然后选择工作表。(“ZD”)。打印输出
不为我做任何事,给我一个错误

因此,在上面的代码中,我试图做到的是:

活页V上的单元格d6 h6 h7不是0,然后我将打印出来。
活页W上的单元格d6 h6 h7不是0,然后我将打印出来。
等。

有条件工作表打印
  • 两种解决方案都能满足要求,但主要区别在于:第一种解决方案区分大小写(例如,
    Vv
    ),很难找到要更改的工作表名称
选项显式
子打印工作表选择()
Const sAddress As String=“D6、H6、H7”
将sws设置为工作表
变暗srg As范围
暗sCell As范围
Dim不打印为布尔值
用于此工作簿中的每个sws。工作表
选择Case sws.Name'或UCase(sws.Name)作为不区分大小写
案例“V”、“W”、“X”、“Y”、“Z”、“ZA”、“ZB”、“ZC”、“ZD”添加更多
设置srg=sws.范围(鞍座)
Debug.Print sws.Name、srg.Address
对于srg.单元中的每个sCell
如果sCell.Value=0,则
doNotPrint=True
退出
如果结束
下一节
如果没有,请不要打印
sws.打印输出
doNotPrint=False
如果结束
结束选择
下一个sws
端接头
子打印工作表匹配()
Const sAddress As String=“D6、H6、H7”
常量sNamesList为String=“V,W,X,Y,Z,ZA,ZB,ZC,ZD”
Dim sNames()作为字符串:sNames=Split(sNamesList,“”)
将sws设置为工作表
变暗srg As范围
暗sCell As范围
Dim不打印为布尔值
用于此工作簿中的每个sws。工作表
如果是数字(Application.Match(sws.Name,sNames,0)),那么
设置srg=sws.范围(鞍座)
对于srg.单元中的每个sCell
如果sCell.Value=0,则
doNotPrint=True
退出
如果结束
下一节
如果没有,请不要打印
sws.打印输出
doNotPrint=False
如果结束
结束选择
下一个sws
端接头

如果sh.Range(“D6”).值0和sh.Range(“H6”).值0和sh.Range(“H7”).值0,则sh.PrintOut…
。如果我想将其打印到特定文件夹,我该如何做?不知道,但您可以从Microsoft进行检查。但是我想你已经在你的
中为每一个
声明涵盖了这一点。也可能值得一读。