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

时间:2017-07-26 00:58:16

标签: excel-vba vba excel

我浏览了论坛以及谷歌,但我无法找到我想要做的答案。

其中一位用户[这里] [1]帮我获取了一个代码,用于将特定行中的数据(单击按钮时)复制到同一工作表中下一个表格的最后一行。

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

是否有可以执行此任务的VBA代码?

由于

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

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

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

2 个答案:

答案 0 :(得分:0)

Dim lastrow as long
Dim numRows as long
numRows = Range ("TableName").Rows.Count
lastRow = Range ("TableName").Columns (1).Rows(numRows).Row

Activesheet.Range("A" & lastRow).Activate

我现在无法测试,但我相信这会奏效。如果您知道表的偏移量,您可以只执行numRows + offset(我的通常是A1,所以我只为标题添加1 - numRows是数据行)以获取.Activate的行号。 : - )

或者与CTRL + SHIFT +“向下箭头”到达同一行,无论表格如何:

With Activesheet
   .Range("A" & .UsedRange.Rows(.UsedRange.Rows.Count).Row).Activate
End With

编辑:我在上面的代码中想到了CTRL + END。要模拟CTRL +“DOWN ARROW”(添加SHIFT选择其路径中的所有内容......),您实际上会使用:

Range("A1").End(xlDown).Activate

你可以简单地将它粘贴在sub的末尾,因为它是一行,或者如果你想通过按钮点击来调用它,可以将它保存为它自己的小子。如果您要选择的是E列,则只需将“A1”替换为“E1”。

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

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

答案 1 :(得分:0)

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

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