|
楼主 |
发表于 2023-5-22 13:06
|
显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
Private Sub Workbook_Open()
' 显示自定义欢迎信息
MsgBox "感谢陈工大神"
' 执行初始化函数
Call InitializeTable
End Sub
Sub InitializeTable()
' 定义变量
Dim ws As Worksheet
Dim lastRow As Integer
' 选择要操作的工作表
Set ws = Worksheets("Sheet1")
' 自适应表头
ws.Range("A1:G1").AutoFit
' 清空旧数据
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
If lastRow > 1 Then
ws.Range("A2:G" & lastRow).ClearContents
End If
' 添加表头
ws.Range("A1").Value = "序号"
ws.Range("B1").Value = "日期"
ws.Range("C1").Value = "项目工程"
ws.Range("D1").Value = "工时"
ws.Range("E1").Value = "单价"
ws.Range("F1").Value = "合价"
ws.Range("G1").Value = "备注"
' 格式化日期
ws.Range("B2").Value = Format(Date, "yyyy/m/d")
ws.Range("B2").EntireColumn.AutoFit
' 自动生成序号
With ws
If lastRow > 1 Then
.Range("A2:A" & lastRow).Formula = "=ROW()-ROW(A$1)"
.Range("A2:A" & lastRow).Value = .Range("A2:A" & lastRow).Value
End If
End With
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
' 定义变量
Dim ws As Worksheet
Dim lastRow As Integer
Dim total As Double
Application.EnableEvents = False ' 避免死循环
' 选择要操作的工作表
Set ws = Worksheets("Sheet1")
' 计算合计
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
If Target.Column = 4 Or Target.Column = 5 Then ' 监听工时和单价列
For i = 2 To lastRow
If ws.Cells(i, 4) <> "" And ws.Cells(i, 5) <> "" Then ' 判断工时和单价是否为空
total = ws.Cells(i, 4) * ws.Cells(i, 5)
ws.Cells(i, 6).Value = total
Else
ws.Cells(i, 6).Value = ""
End If
Next i
End If
ws.Columns("E:F").AutoFit
Application.EnableEvents = True
End Sub
程序功能要求:
1、表头从左到右分别是:序号; 日期;项目工程;工时; 单价; 合价;备注。
2、日期列要求自动显示当前日期,日期格式为:“yyyy/m/d”。
3、序号列输入工时后自动生成,起始数字为1,后面递增。
4、工时列单价为人工输入。
5、合价列合计数值为工时列数值乘以单价列数值的乘积数值;要求 本行空值时无显示。
6、单价列和合计列要求显示常规格式,无需货币形式显示。
7、已经输入的工时数字在重新执行宏运行时候不得改变或消除。
8、要求打开该文件时弹窗按钮显示为“感谢陈工大神”,然后按一下就进入表格自动运行宏程序了。
为什么我这个程序复制到宏编辑器中运行不了· · 大神教我????求救 |
|