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函数打印输出选择范围如果不为空(不打印)的主要内容,如果未能解决你的问题,请参考以下文章