我在工作表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。 我在代码中添加了新行,一切正常。
感谢您的帮助。
答案 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
它运行正常,但我看到宏是如何逐行运行的(我不想看到它)
什么可能导致问题?