ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
12
返回列表 发新帖
楼主: jincun29

[求助] 宏代码复制运行不了,请大神指教,非常感谢

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-5-22 13:06 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
吴中泉 发表于 2023-5-22 08:35
你也没有手算就产生了数据,肯定是自动计算的啰

是下图中几个语句计算的

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、要求打开该文件时弹窗按钮显示为“感谢陈工大神”,然后按一下就进入表格自动运行宏程序了。

为什么我这个程序复制到宏编辑器中运行不了·  · 大神教我????求救

TA的精华主题

TA的得分主题

发表于 2023-5-22 16:11 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
jincun29 发表于 2023-5-22 13:06
Private Sub Workbook_Open()
    ' 显示自定义欢迎信息
    MsgBox "感谢陈工大神"

你写得好长,以下我没有看,单就这一段过程代码
Private Sub Workbook_Open()
    ' 显示自定义欢迎信息
    MsgBox "感谢陈工大神"
   
    ' 执行初始化函数
    Call InitializeTable
End Sub
以上sub过程是工作簿打开事件过程,要放到工作表打开事件中去,不要一起放到模块中.
具体无法用语言描述,你可百度一下.

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-5-22 16:18 | 显示全部楼层
吴中泉 发表于 2023-5-22 16:11
你写得好长,以下我没有看,单就这一段过程代码
Private Sub Workbook_Open()
    ' 显示自定义欢迎信息
...

谢谢· · 我在研究一下· ·不懂再请教

TA的精华主题

TA的得分主题

发表于 2023-5-22 20:28 | 显示全部楼层
jincun29 发表于 2023-5-22 16:18
谢谢· · 我在研究一下· ·不懂再请教


花了一点时间帮你修改了一下代码,并加入了文件里面适当位置。
原来代码是谁编的,最好去问他。因为他最熟悉。
工程统计表.rar (19.85 KB, 下载次数: 1)

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-5-23 13:15 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
吴中泉 发表于 2023-5-22 20:28
花了一点时间帮你修改了一下代码,并加入了文件里面适当位置。
原来代码是谁编的,最好去问他。因为他 ...

谢谢老大
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-16 07:45 , Processed in 0.036119 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表