我想自动打印我某个单元格中的二维码。我发现最好的方法是使用 IMAGE 函数。
该函数如下所示:
=IMAGE("https://api.qrserver.com/v1/create-qr-code/?data="&ENCODEURL(B2))
不幸的是,有时当我在更改单元格的值后进行打印时,它会在生成二维码之前打印,我得到如下信息: 打印预览在二维码应该出现的位置显示一个文本字符串“Picture” 。
我尝试了几种方法来完成该功能,但没有一种是可靠的。
Sub ChangePrintedQR()
Dim ImgRange As Range
Set ImgRange = Range("B4")
Range("B2") = Now
' ImgRange.Formula = "=IMAGE(""https://api.qrserver.com/v1/create-qr-code/?data=""&ENCODEURL(B2))" 'Having this line can print "Busy" instead of "Picture"
' While ImgRange.Text = "Picture" 'This gets stuck in an infinite loop
' Debug.Print ImgRange.Text 'regardless of this line, trying the Value of the cell does the same
' Wend
' Application.Calculate 'This method does nothing
' If Not Application.CalculationState = xlDone Then
' DoEvents
' End If
' Application.Wait (Now + TimeValue("0:00:10")) 'This results in the waiting, but no change to the printed sheet.
ActiveSheet.PrintPreview
End Sub
请注意,我有时在打印时会得到更新的图像,但其他时候则不会,我希望每次都能打印更新的图像。
好吧……经过一些测试,这似乎是不足的情况之一
DoEvents
,您需要让代码完全结束。为了实现这一点,您可以使用该OnTime
函数,并将该函数拆分为两个:这将增加一秒钟的延迟,并在循环之间完全停止 VBA - 这允许下载图像并将单元格从 更改
#BUSY
为#VALUE
。(可能有一种方法可以强制/允许连接/下载在 VBA 期间发生并将其重新转换为单个函数,但是我无法成功刷新连接、刷新链接
DoEvents
等)