我已经写了一个使用Application.ScreenUpdatingmacros,但它不工作

下面的代码应该隐藏正在打开的工作簿并运行macros,然后closures工作簿,而不显示用户任何东西。

我犯了什么错误? 还有一种更容易的方法来获取“Sheet 1”中写入的值,并将其放入“QR Code”中的单元格中? 谢谢

Sub Open_Fill_Close() Application.ScreenUpdating = False Worksheets("Sheet1").Select invoiceNo = Range("A1") Set myData = Workbooks.Open("HD:Users:User1:Desktop:QR.xlsm") Worksheets("QR Code").Select Worksheets("QR Code").Range("Y39").Select RowCount = Worksheets("QR Code").Range("Y39").CurrentRegion.Rows.Count With Worksheets("QR Code").Range("Y39") .Offset(RowCount, 0) = invoiceNo End With Application.Run "QR.xlsm!ExportCellsAsPicture" Workbooks("QR.xlsm").Close False Application.ScreenUpdating = True End Sub 

打开之后

 Application.Interactive = False Application.Visible = False 

这应该打开工作簿,处理它,然后closures它,而用户不知道对屏幕的更改。

 Sub Open_Fill_Close() Dim wsq As Worksheet, wb As Workbook Application.ScreenUpdating = False With Worksheets("Sheet1") Set wb = Workbooks.Open("HD:Users:User1:Desktop:QR.xlsm") Set wsq = wb.Worksheets("QR Code") wsq.Cells(Rows.Count, "Y").End(xlUp).Offset(1, 0) = .Range("A1").Value 'Application.Run "QR.xlsm!ExportCellsAsPicture" 'Do not know how this will be affected wb.Close False End With Application.ScreenUpdating = True End Sub 

我不清楚为什么你将一个值分配给Y列的底部,并没有保存而closures,但我会假设正在运行的macros完成。

ScreenUpdating不是为了使应用程序不可见。 这是为了在代码运行时冻结屏幕。 所以它运行得更快。 (如果您忘记再次启用它,如果您的代码在打开启用该代码之前崩溃,则Excel将不再响应)

为了不可见地打开工作簿,您将需要创build一个新的应用程序,并使该应用程序不可见(默认情况下它已经不可见)

 Dim App as Application Set App = new Application Set myData = App.Workbooks.Open("HD:Users:User1:Desktop:QR.xlsm") 

然后处理其余的代码。 在这种情况下,如果忘记了App.Quit()或者在退出应用程序之前代码崩溃,则会在后台运行一个正在运行的进程,从而消耗计算机的内存。

如果在某个时候您想让该应用程序可见: App.Visible = true
让它回到不可见状态: App.Visible = false


全码:

 Sub Open_Fill_Close() Worksheets("Sheet1").Select invoiceNo = Range("A1") Dim App as Application Set App = new Application Set myData = App.Workbooks.Open("HD:Users:User1:Desktop:QR.xlsm") myData.Worksheets("QR Code").Select myData.Worksheets("QR Code").Range("Y39").Select RowCount = myData.Worksheets("QR Code").Range("Y39").CurrentRegion.Rows.Count With myData.Worksheets("QR Code").Range("Y39") .Offset(RowCount, 0) = invoiceNo End With App.Run "QR.xlsm!ExportCellsAsPicture" App.Workbooks("QR.xlsm").Close False App.Quit End Sub