我是 Excel 中创建宏的新手,一直试图通过解析其他人创建的宏来理解 VBA。
我现在尝试创建的是某种启动/停止计时器,用于测量在不同项目以及项目内的不同任务上花费了多少时间。
我希望我的用户选择项目(从我创建的位于 A2 的下拉菜单中选择)和任务类型(同样从位于 B2 的下拉菜单中选择),然后单击按钮“开始”(全部位于工作表 1 上)。然后,这将运行一个宏,将这两个输入传输到工作表 2 上的下一个可用行(A 列和 B 列),然后输入当前日期(C 列)和当前时间(D 列)。完成工作后,他们单击另一个按钮“停止”(同样位于工作表 1 上),将当前时间插入到工作表 2 的 E 列(与用于“开始”的数据相同的行)。
因此它需要:
单击“开始”按钮
- 将 A2 和 B2 值复制到 Sheet 2 中的下一个空白行
- 在同一行的 C 列输入当前日期
- 在同一行的 D 列输入当前时间
点击停止按钮
在 E 列(与刚刚添加的其他数据同一行)输入当前时间
或者最后一行 D 中有一个值输入 E 中的当前时间
我尝试使用这个:
'Start Button
'Determine emptyRow
ActiveWorkbook.Sheets("Sheet2").Select
emptyRow = WorksheetFunction.CountA(Range("A:A")) + 1
'Transfer information
Cells(emptyRow, 1).Value = A2.Value
Cells(emptyRow, 2).Value = B2.Value
Cells(emptyRow, 3).Value = Today().Value
Cells(emptyRow, 4).Value = Time().Value
(不同的宏)
'Stop Button
'Make Sheet2 active
Sheet2.Activate
'Determine emptyRow
ActiveWorkbook.Sheets("Sheet").Select
emptyRow = WorksheetFunction.CountA(Range("E:E")) + 1
'Input Stop Time
Cells(emptyRow, 5).Value = Time().Value
并使用这个:
'Start Button
Sheets(“Sheet1”).Select
Range(“A2”).Copy
Sheets(“Sheet2”).Select
emptyRow = WorksheetFunction.CountA(Range("A:A")) + 1
ActiveSheet.Paste
它们没有出错,但也没有工作,所以我知道我遗漏了一些东西。
答案1
我做了更多的阅读和修改,这可能不是最好的方法,但它可以满足我对“开始”按钮的要求。
Private Sub CommandButton1_Click()
Dim lst As Long
Sheets("Sheet1").Range("A2:B2").Copy
With Sheets("Sheet2")
lst = .Range("A" & Rows.Count).End(xlUp).Row + 1
.Range("A" & lst).PasteSpecial xlPasteColumnWidths
.Range("A" & lst).PasteSpecial xlPasteValues
End With
With Sheets("Sheet2")
lst = .Range("C" & Rows.Count).End(xlUp).Row + 1
.Range("C" & lst).Value = Date
End With
With Sheets("Sheet2")
lst = .Range("D" & Rows.Count).End(xlUp).Row + 1
.Range("D" & lst).Value = Time()
End With
End Sub