Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 如何让Excel只打印已填充了某些数据的工作表,而不打印一张工作表?_Vba_Excel_Printing - Fatal编程技术网

Vba 如何让Excel只打印已填充了某些数据的工作表,而不打印一张工作表?

Vba 如何让Excel只打印已填充了某些数据的工作表,而不打印一张工作表?,vba,excel,printing,Vba,Excel,Printing,我正在工作中创建一个字母生成器,它有一个29行的输入表“input Info”,每个行对应于29个带有字母模板的表,该模板从“input Info”中提取数据。所有信件都需要打印出来并寄出,但问题是,我们并不总是需要30封信,因为有些日子我们只需要打印+20封。 我在创建代码时遇到了难题,该代码需要始终将数据表排除在打印作业之外,并且只打印已从工作表1中提取数据的工作表,例如H1:H30(显然,我们希望用户打印整个工作簿,而不是手动打印每个工作表)。我是VBA的新手,所以我只是做了很多搜索,但没

我正在工作中创建一个字母生成器,它有一个29行的输入表“input Info”,每个行对应于29个带有字母模板的表,该模板从“input Info”中提取数据。所有信件都需要打印出来并寄出,但问题是,我们并不总是需要30封信,因为有些日子我们只需要打印+20封。 我在创建代码时遇到了难题,该代码需要始终将数据表排除在打印作业之外,并且只打印已从工作表1中提取数据的工作表,例如H1:H30(显然,我们希望用户打印整个工作簿,而不是手动打印每个工作表)。我是VBA的新手,所以我只是做了很多搜索,但没有返回任何东西。到目前为止,我发现一些代码不包括第一页,但是当我打印时,第一页仍然打印。我只是需要一些我现在可以使用的东西,我可以分析和学习,以后当我了解更多关于VBA的工作。请帮忙

Private Sub Workbook_BeforePrint(Cancel As Boolean) 
Dim ws As Variant 

Application.DisplayAlerts = False 
Application.EnableEvents = False 

For Each ws In ThisWorkbook.Worksheets 
    If ws.Name <> "Input Info" Then 
        ws.PrintOut 
    End If 
Next ws 

Application.DisplayAlerts = True 
Application.EnableEvents = True 

Cancel = True 

End Sub 
Private子工作簿\u打印前(取消为布尔值)
Dim-ws作为变体
Application.DisplayAlerts=False
Application.EnableEvents=False
对于此工作簿中的每个ws。工作表
如果ws.Name是“输入信息”,那么
打印输出
如果结束
下一个ws
Application.DisplayAlerts=True
Application.EnableEvents=True
取消=真
端接头
下面是该文件的淡化版本。
提前感谢

您所写的内容不包括每一张名为“输入信息”的工作表(注意大写/小写字母),因此它不会完全正常工作

我没有测试以下内容,但这应该会有所帮助:

Sub PrintLetters() 

Dim ws As Worksheet
Dim RngCell As Range
Dim NameList As Range

Set NameList = ThisWorkbook.Worksheets("Input Info").Range("H1:H30") ' <- This is where you get your data from

For Each RngCell ws In NameList.Cells
    For Each ws In ThisWorkbook.Worksheets
        If LCase(ws.Name) = LCase(RngCell.Value) Then ' <- LCase makes sure that you are not CaSe SenSiTIVe
            ws.PrintOut ' or INSERT HERE WHICHEVER CODE TO PRINT ws
            Exit For 
        End If 
    Next ws 
Next

End Sub 
子打印字母()
将ws设置为工作表
Dim RngCell As范围
将名称列表设置为范围

Set NameList=thishworkbook.Worksheets(“Input Info”).Range(“H1:H30”)“您是否可以共享文件的一个简化(匿名)版本?当然可以。最后,我希望打印功能在我点击第一张纸上创建的“打印”命令按钮时执行。基本上,没有从工作表1中提取数据的工作表将与第一张工作表一样从打印作业中排除。这样,最终结果是:单击打印按钮,如果我填写了15行,那么那些特定的15/29将只打印,而不是输入表。这是我释放45个人之前的最后一步,我快死了。我正在分享淡化的版本。谢谢。用LCase替换LBound,用.Value替换.Text(.Text可能会生成“#####”,如果列太窄,无法容纳其内容)XD oops!我分心了,是的,我想用
LCase
。关于
.Text
,你刚刚教了我一些新东西!