VBA Excel SendKeys宏

时间:2015-06-17 18:38:24

标签: excel vba excel-vba

我在工作表Extract中有一些结果数据,我需要逐个单元格激活并按回车键。对于10个细胞来说没关系,但我有超过4万个。所以我写了一些宏

   Sub Refresh()
    Dim lastrow As Long
    lastrow = ActiveWorkbook.Worksheets("Extract").Range("Q" & rows.Count).End(xlUp).Row
        For j = 2 To lastrow
            Sheets("Extract").Activate
            Sheets("Extract").Range("Q" & j).Select
            Application.SendKeys "{F2}"
            Application.SendKeys "{ENTER}"
            DoEvents
        Next j
End Sub

它不起作用。我遇到了1004错误应用程序定义或对象定义的错误。

我做错了什么?

感谢您的帮助

编辑: 解决方案很简单。我没有激活Sheet Extract。 我在代码中添加了新行,一切正常。

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

尝试一下:

Sub Refresh()
    Dim lastrow As Long
    Worksheets("Extract").Activate
    lastrow = Range("Q" & Rows.Count).End(xlUp).Row
    For j = 2 To lastrow
        Range("Q" & j).Select
        Application.SendKeys "{F2}"
        Application.SendKeys "{ENTER}"
        DoEvents
    Next j
End Sub

修改#1:

此版本将删除“chatter:**

Sub Refresh()
    Dim sOLD As Worksheet
    Set sOLD = ActiveSheet
    Application.ScreenUpdating = False
        Dim lastrow As Long
        Worksheets("Extract").Activate
        lastrow = Range("Q" & Rows.Count).End(xlUp).Row
        For j = 2 To lastrow
            Range("Q" & j).Select
            Application.SendKeys "{F2}"
            Application.SendKeys "{ENTER}"
            DoEvents
        Next j
        sOLD.Activate
    Application.ScreenUpdating = True
End Sub

答案 1 :(得分:0)

看起来您正在使用j进行循环,但在您的代码中,引用行i中的单元格。

For j = 2 To lastrow
    Sheets("Extract").Range("Q" & i).Select

需要将其更改为匹配,即将i更改为j

答案 2 :(得分:0)

当我决定使用加里学生提供的Macro时(直到现在我使用的是我的方法)。所以我再次运行宏,我感到很惊讶,但宏观上只有前39行。

当我对此行发表评论时

'Application.ScreenUpdating = False

它运行正常,但我看到宏是如何逐行运行的(我不想看到它)

什么可能导致问题?