我使用Application.ScreenUpdating编写了一个宏,但它无法正常工作

时间:2015-07-07 18:00:23

标签: excel vba excel-vba

下面的代码应该隐藏它正在打开的工作簿并运行宏然后关闭工作簿,同时不向用户显示任何内容。

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

SELECT 
    T1.ID,
    T1.AMOUNT,
    T1.STATUS,
    T1.ADDEDBY,
    T1.ADDEDON,
    concat(T1.ID,T1.STATUS) as NEW_COLUMN1,
    'output sample' as NEW_COLUMN2,
    1+3 AS NEW_COLUMN3
FROM Table1 T1

3 个答案:

答案 0 :(得分:1)

打开后。

INSERT INTO mobile (`week`,title,`order`) VALUES(?,?,?)

答案 1 :(得分:0)

ScreenUpdating并不意味着使应用程序不可见。这意味着在代码运行时冻结屏幕。所以它运行得更快。 (如果您再次忘记启用它,如果您的代码在到达启用它的行之前崩溃,那么您的Excel将不再响应)

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

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

答案 2 :(得分:0)

这应该打开工作簿,处理它然后关闭它,而不会让用户知道屏幕的变化。

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列的底部指定一个值并在不保存的情况下关闭,但我认为正在运行的宏完成。