Excel 单击按钮后,如何使工作表滚动到包含数据的最后一行

Excel 单击按钮后,如何使工作表滚动到包含数据的最后一行,excel,vba,Excel,Vba,我浏览了这个论坛,也浏览了谷歌,但是我没有找到我想要做的事情的答案 其中一位用户[here][1]帮助我获得了一个代码,可以将特定行中的数据(单击按钮)复制到同一工作表中较低位置的表的最后一行 但是,我希望工作表向下滚动到表的最后一个非空行,而不是手动滚动。我知道这可以通过组合CTRL+SHIFT+下箭头来实现。然而;excel用户对计算机不是很在行,所以我正试图让它对他们来说尽可能简单 是否有VBA代码可以完成此工作 谢谢 到目前为止,我使用的是Erin的代码,它将我带到电子表格的最后一行,而

我浏览了这个论坛,也浏览了谷歌,但是我没有找到我想要做的事情的答案

其中一位用户[here][1]帮助我获得了一个代码,可以将特定行中的数据(单击按钮)复制到同一工作表中较低位置的表的最后一行

但是,我希望工作表向下滚动到表的最后一个非空行,而不是手动滚动。我知道这可以通过组合CTRL+SHIFT+下箭头来实现。然而;excel用户对计算机不是很在行,所以我正试图让它对他们来说尽可能简单

是否有VBA代码可以完成此工作

谢谢

到目前为止,我使用的是Erin的代码,它将我带到电子表格的最后一行,而不是最后一个非空白行。这可能是因为列A的所有单元格中都有公式,一直到最后一个单元格。但是,A列单元格公式设置为空白,除非在E列的相邻单元格中输入了数据

这是我正在使用的代码,粘贴在模块中

Option Explicit
Sub copyRow()
Dim ws As Worksheet
Dim lRow As Long

' define which worksheet to work on, i.e. replace Sheet1 with the name of 
your sheet
Set ws = ActiveWorkbook.Sheets("1. Clients Details")

' determine the last row with content in column E and add one
lRow = ws.Cells(Rows.count, "E").End(xlUp).Row + 1

' copy some cells into their ranges
ws.Range("E3:G3").Copy ws.Range("E" & lRow)
ws.[E1].Select

' combine H3, I3, J3, K3 and L3 and copy into column E, next empty row 
ws.Range("H" & lRow) = ws.[H3] & " " & ws.[I3] & " " & ws.[J3] & ", " & ws.
[K3] & " " & ws.[L3]

' copy the other cells into their ranges
ws.Range("M3:Q3").Copy ws.Range("M" & lRow)
ws.[M1].Select

' combine H3 & I3
ws.Range("AA" & lRow) = ws.[H3] & " " & ws.[I3]

' combine J3, K3 & L3
ws.Range("AB" & lRow) = ws.[J3] & "       " & ws.[K3] & "       " & ws.[L3]


' copy Q3 into column Q only, if F3 = "Company"
If Worksheets("1. Clients Details").Range("F3").Value = "Company" Then
ws.Range("Q3").Copy ws.Range("Q" & lRow)

End If
Call scrollToEnd
End Sub

Sub scrollToEnd()
Dim lastrow As Long
Dim numRows As Long
numRows = Range("E1:E1000").Rows.count
lastrow = Range("E1:E1000").Columns(5).Rows(numRows).Row

ActiveSheet.Range("E" & lastrow).Activate
End Sub
我现在无法测试,但我相信这会奏效。如果您知道表的偏移量,则只需执行numRows+偏移量(我的通常为A1,因此我只需为标题添加1-numRows是数据行)即可获得表的行号。Activate:-)

或到达与CTRL+SHIFT+下箭头相同的行,而不考虑表格:

With Activesheet
   .Range("A" & .UsedRange.Rows(.UsedRange.Rows.Count).Row).Activate
End With
编辑:我在想上面代码中的CTRL+END。要模拟CTRL+“向下箭头”(添加SHIFT可选择其路径中的所有内容…),您实际上可以使用:

Range("A1").End(xlDown).Activate
您可以简单地将它粘贴到sub的末尾,因为它是一行,或者如果您想通过单击按钮调用它,可以将它保留为自己的小sub。如果要选择的是列E,则只需将“A1”替换为“E1”

这确实假设在“E1”和最后一个非空白行之间的E列中没有空白单元格。否则,您将需要使用与copyRow sub中相同的逻辑来查找最后一个非空行:

ActiveSheet.Cells(Rows.Count, "E").End(xlUp).Activate

这将向下滚动,直到最后一行的单元格位于屏幕左上角

Sub test()

Application.Goto Sheets("Sheet1").Range("A" & Rows.Count).End(xlUp), True  'where 'A' is the column of the last row

End Sub
您可以将代码粘贴到当前过程的底部,或将其指定给按钮

编辑:

或者,你可以试试这个。这将找到任何列的最后一行

Sub test()

Dim lastrow As Range
Set lastrow = Sheets("Sheet1").Cells.Find("*", searchorder:=xlByRows, searchdirection:=xlPrevious)
If Not lastrow Is Nothing Then Application.Goto lastrow, True

End Sub

嗨,艾琳,对不起,我仍然被认为是一个精通VBA的初学者。请您告诉我在何处粘贴此代码,记住我在模块中粘贴了另一个代码,可以在前面提供的链接中看到。您是否希望在粘贴行后立即执行此滚动,或者是用户单击按钮并被带到最后一行?我希望在单击按钮时发生这种情况。但是如果你能给我两种选择,出于学习的目的,那就太好了!在模块的底部,创建一个子scolltoend并将代码放入其中。要在单击按钮时执行,请右键单击按钮,选择“分配宏”,然后从列表中选择scrollToEnd。要在粘贴后立即执行,请在sub copyRow的末尾添加一行“Call scrollToEnd”。嗨,Erin,谢谢你的建议。不幸的是,该按钮将电子表格一直滚动到最后一列,而不是最后一个非空白单元格。有什么我不知道的吗?嗨,伊克托。你的代码没有做任何事情。我将它粘贴在与复制行的其他代码相同的模块表中,就在它的底部。这让我想到了如何将我正在使用的工作表引用到此VBA代码,因为您的代码没有引用工作表名称。对不起,我听起来很笨lol@Omar哎呀,我完全忘了。请尝试修改后的代码。谢谢idktho。它仍然没有做任何事情:(@Omar你说什么都不做是什么意思?你把代码放在哪里了?我不得不将第二个选项的最后一行更改为
,如果不是lastrow,那么Application.Goto Sheets(“Sheet1”).Cells(lastrow.Row,1),True
以进入第一列,但这两个选项对我都有效。
Sub test()

Dim lastrow As Range
Set lastrow = Sheets("Sheet1").Cells.Find("*", searchorder:=xlByRows, searchdirection:=xlPrevious)
If Not lastrow Is Nothing Then Application.Goto lastrow, True

End Sub