我创建了一个脚本,该脚本从 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.