Excel函数打印输出选择范围如果不为空(不打印)

Posted

技术标签:

【中文标题】Excel函数打印输出选择范围如果不为空(不打印)【英文标题】:Excel Function printout select range if not empty (not printing) 【发布时间】:2021-11-04 22:49:31 【问题描述】:

您好,我对 VBA 很陌生,所以请原谅我的无知。我试图有一个功能,如果单元格不为空,它将打印(到打印机)选定的范围。它不会打印到打印机,但会返回我的消息框和字符串。我在这里遗漏了什么?

单元格 a1 = '88888' 单元格 b1 = PrintSelectedArea1(A1) ;返回“Label Printed”和 msgbox,但不打印选择。 单元格 a2 = isempty 单元格 b2= PrintSelectedArea1(A2) ; 返回“未打印”

我在新模块中添加了这段代码:

Public Function PrintSelectedArea1(r As Range) As String
    If Not IsEmpty(r.Value) Then
    Worksheets("Label").Range("A1:F13").PrintOut
    PrintSelectedArea1 = "Label Printed"
    MsgBox ("Printed")
    Else
    PrintSelectedArea1 = "Not Printed"
    End If
End Function

【问题讨论】:

你如何调用你的函数? 请注意,不能在用作单元格中的公式的用户定义函数 (UDF) 中使用 .PrintOut。 Excel 不支持此功能! UDF 不能操作其他单元格,也不能抛出消息框,也不能打印。 UDF 唯一能做的就是将参数作为输入并将一个值返回给调用它的单元格。 【参考方案1】:

要执行操作,您需要使用 Sub 。 您可以将参数传递给 Sub,但它没有返回值。

Sub PrintSelectedArea1()
    Worksheets("Label").Range("A1:F13").PrintOut
End Sub

下面将在单元格 B2 中查找值的变化 如果 B2 更改为值 1,将调用PrintSelectedArea()。将此代码插入您正在使用的工作表中。

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("B2")) Is Nothing Then
        If Sheets("Label").Range("B2").Value = 1 Then
            Call PrintSelectedArea()
        Else
            MsgBox ("Not printed")
        End If
    End If
    

End Sub

【讨论】:

那行代码不是和 OP 已经在使用的完全相同吗? @braX 是的,但是在 Sub 中它可以工作,在 Function 中它不能。 好的,也许您也可以在回答中解释原因? 我可以将 sub 称为单元格公式吗?如果我指的单元格(例如 PrintSelectedArea1(A2))不为空,我想打印选择。 @aconti74 我编辑了我的答案以显示如何调用函数作为单元格值更改的结果。值得庆幸的是,不可能通过单元格中的用户定义函数来执行此操作,如果您可以这样做,它会在每次刷新函数时打印。

以上是关于Excel函数打印输出选择范围如果不为空(不打印)的主要内容,如果未能解决你的问题,请参考以下文章

怎么把一个包含多个表格的excel文件转换成一个PDF文件?

word excel打印怎么打指定的页数

CAD如何直接打印,不出现打印对话框?

PHP: 打印post数据,返回长度不为1但内容为空的问题

解决POI读取Excel如何判断行是否为空

CAD直接打印,不出现打印对话框(com接口VB语言)