excel - 创建大量命令按钮并更有效地编写
问题描述
我正在开发一个 Excel VBA 项目,该项目有 300 行,每天都会被外发订单填充。每行将有 4 个命令按钮和各种宏。第一个是“TIME IN”,这将记录订单何时开始,并将“IN PROGRESS”字样放在工作表1的列中。单击下一个按钮将是“TIME OUT”,这将记录完成时间,放置正确列中的单词“COMPLETE”并将整行移动到单独的工作簿。第三个按钮将是“HOLD”,这将记录加载时暂停的时间,将整行移动到同一工作簿的工作表 3,并将“PARTIAL HOLD”字样放在相应的列中。第四个按钮将在工作表 3 上,它将是“恢复”按钮。此按钮会将工作表 3 中的行发送回工作表 1,并在相应列中显示“IN PROGRESS”字样。我的问题是,是否可以批量制作这些按钮和相应的宏,还是我必须制作每个单独的按钮和与之配套的宏?如果可以批量做,请告诉我如何做。下面是命令按钮的代码示例以及到目前为止我单独创建的每个按钮的相关宏。它们都具有相同的基本代码和关联的宏。谢谢你帮助我写得更有效率。命令按钮 是否可以批量制作这些按钮和相应的宏,还是我必须制作每个单独的按钮和与之配套的宏?如果可以批量做,请告诉我如何做。下面是命令按钮的代码示例以及到目前为止我单独创建的每个按钮的相关宏。它们都具有相同的基本代码和关联的宏。谢谢你帮助我写得更有效率。命令按钮 是否可以批量制作这些按钮和相应的宏,还是我必须制作每个单独的按钮和与之配套的宏?如果可以批量做,请告诉我如何做。下面是命令按钮的代码示例以及到目前为止我单独创建的每个按钮的相关宏。它们都具有相同的基本代码和关联的宏。谢谢你帮助我写得更有效率。命令按钮
Private Sub HOLD1_Click()
Sheet1.Cells(5, 17).Value = Format$(Now, "hh:nn:ss")
HOLD_1
End Sub
宏
Sub HOLD_1()
'
' HOLD_1 Macro
'
'
Range("M5").Select
ActiveCell.FormulaR1C1 = "PARTIAL HOLD"
Range("M6").Select
End Sub
解决方案
我的第一条评论中提到的“可点击单元格”示例
...如果 A 到 K 列包含数据,我会让 L 到 O 列可点击 (也可以使用不同的背景颜色),使用 SelectionChange() 事件 允许您确定每个单元格的坐标,并 根据具体情况构建特定操作当前行
把它Sub
放在ThisWorkbook
模块中
Option Explicit
'In ThisWorkbook module - Sh parameter contains the sheet being used (ActiveSheet)
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
With Target
Select Case Sh.Name
Case "Sheet1", "Sheet2", "Sheet3" 'Processing the first 3 sheets
If .Row > 1 And .CountLarge = 1 Then 'Ignore Headers & multiple cells
Select Case .Column
Case 1 To 4 'Ignore col A to D
.Interior.Color = RGB(255, 204, 204) 'Revert to initial
.Font.ColorIndex = xlAutomatic 'Default Black
Case 5 'Mouse clicked in a cell in col E
With Sh.Cells(.Row, "A") 'Change cell in same row, col A
.Interior.Color = RGB(190, 0, 0) 'Dark Red
.Font.Color = vbYellow
End With
.Interior.Color = RGB(255, 255, 204) 'Light Yellow
.Font.Color = vbRed 'current cell (in column E)
.Font.Bold = True
Case 6 'Mouse clicked in a cell in col F
With Sh.Cells(.Row, "B") 'Change cell in same row, col B
.Interior.Color = RGB(0, 0, 190) 'Dark Blue
.Font.Color = vbYellow
End With
.Interior.Color = RGB(255, 255, 204) 'Light Yellow
.Font.Color = vbRed
.Font.Bold = True
Case 7 'Mouse clicked in a cell in col G
If Len(.Value2) > 0 Then
With Sh.Cells(.Row, "C") 'Cell in same row, col B
.Interior.Color = RGB(255, 255, 0) 'vbYellow
.Font.Color = RGB(190, 0, 0) 'Dark Red
End With
End If
Case 8
.Value = Format(Now, "ddd mm-dd-yyyy")
.Font.Bold = True
.Offset(, 1).Value2 = "In Progress"
End Select
End If
Case "Sheet4", "Sheet5"
'...
End Select
End With
End Sub
.
结果,单击 E 到 H 列中的单个单元格后
Sheet1
Sheet2
Sheet3
.
检测当前选择的另一种方法
Option Explicit
'In Sheet1 module
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Me.UsedRange.Columns(1)) Is Nothing Then
MsgBox "Clicked cell in Column 'A', Row: " & Target.Row
End If
End Sub
单击时的消息框Sheet1.Cell(A5)
推荐阅读
- php - Laravel 6空合并运算符给出未定义变量:调用方法时的用户?
- c# - 数组包含来自表的相同数据,而不是使用 ToArray() 的不同数据
- python - Setup.py 安装需要本地包
- windows - 适用于 Windows 的 Docker 桌面 - 由于 Bitlocker 而无法启动
- if-statement - 最大/最小方法是否比 If 语句更传统地设置值的下限/上限?
- .net - 从任务中获取 WaitHandle
- ios - 为什么一个 bname 值在快速解析时在 tableview 中显示其 paramName 计数时间?
- python - 在 For 循环中:如何将值与 groupby 函数中的值进行比较
- git - VSCode Git 跟踪颜色?
- django - Django中的分页概念和实现大型对象的有效方法