VBA Excel SendKeysmacros

我有一些结果数据在表Extract,我需要激活逐个细胞,然后按回车。 10个单元没关系,但我有4万多个。所以我写了一些macros

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错误应用程序定义或对象定义的错误。

我做错了什么?

感谢帮助

编辑:解决scheme很简单。 我没有激活Sheet Extract。 我已经添加了新的代码行,一切工作正常。

感谢你的帮助。

试试这个:

 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:

这个版本将删除“喋喋不休:**

 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 

它看起来像循环使用j但在你的代码中,引用行i的单元格。

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

他们需要改变匹配,即改变ij

当我决定使用Gary的学生提供的Macro(到现在我正在使用我的方法)的时候,这一天已经到来。 所以我再次运行macros,我很惊讶,但macros只崇拜前39行。

当我发表评论这一行

 'Application.ScreenUpdating = False 

它工作正常,但我看到macros如何逐行运行(我不想看到)

什么会导致问题?