ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 5862|回复: 46

[求助] 给代码增加按J1指定数字代号,更新数据到对应分表的功能。

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-10-5 00:17 | 显示全部楼层 |阅读模式
本帖最后由 WYS67 于 2018-10-5 00:59 编辑

老师们:根据《00 总表》N14的原代码,新增按J1指定的数字代号,更新数据到对应分表的功能。


J1指定的4个数字,就相当于一个电路分线开关,按下哪个按钮就会点亮哪个房间里的灯泡;按“3”时,则点亮所有房间的灯泡。

说明和要求在N5:N9里,恳请老师们照此完善代码。

按J1指定的代号更新数据到对应的分表.zip (996.83 KB, 下载次数: 42)

TA的精华主题

TA的得分主题

发表于 2018-10-5 07:57 | 显示全部楼层
Sub 更新1005()
    Application.ScreenUpdating = False
    Set wk = ThisWorkbook
    tms = Timer
    r1 = [g1]: r2 = [h2].Value
    If r2 <= r1 Then arr = Range("e5:j" & r1)
    ReDim brr(1 To UBound(arr), 1 To 6)
    p = ThisWorkbook.Path & "\"
     Select Case [j1] * 1
        Case "0"
            With Workbooks.Open(p & "0 三同.xlsm").Sheets(1)
                xm = .[i1]: n = .[g1]
                m = 0
                For i = 1 To UBound(arr)
                    If arr(i, 6) = xm Then
                        m = m + 1: r = Application.Match(xm, wk.Sheets(1).[j:j], 0)
                        For j = 1 To 5
                            brr(m, j) = arr(i, j)
                        Next
                    End If
                Next
                For i = 1 To m
                    If i = 1 Then
                        brr(i, 6) = r - 4
                    Else
                        brr(i, 6) = brr(i, 1) - brr(i - 1, 1)
                    End If
                Next
                brr(m + 1, 6) = .[c1] - brr(m, 1)
                .Range("e5:i" & n - 4).ClearContents
                .Range("e5").Resize(n - 4, UBound(brr, 2)) = brr
            End With
        Case "1"
            With Workbooks.Open(p & "1 组三.xlsm").Sheets(1)
                xm = .[i1]: n = .[g1]
                m = 0
                For i = 1 To UBound(arr)
                    If arr(i, 6) = xm Then
                        m = m + 1: r = Application.Match(xm, wk.Sheets(1).[j:j], 0)
                        For j = 1 To 5
                            brr(m, j) = arr(i, j)
                        Next
                    End If
                Next
                For i = 1 To m
                    If i = 1 Then
                        brr(i, 6) = r - 4
                    Else
                        brr(i, 6) = brr(i, 1) - brr(i - 1, 1)
                    End If
                Next
                brr(m + 1, 6) = .[c1] - brr(m, 1)
                .Range("e5:i" & n - 4).ClearContents
                .Range("e5").Resize(n - 4, UBound(brr, 2)) = brr
            End With
        Case "2"
            With Workbooks.Open(p & "2 组六.xlsm").Sheets(1)
                xm = .[i1]: n = .[g1]
                m = 0
                For i = 1 To UBound(arr)
                    If arr(i, 6) = xm Then
                        m = m + 1: r = Application.Match(xm, wk.Sheets(1).[j:j], 0)
                        For j = 1 To 5
                            brr(m, j) = arr(i, j)
                        Next
                    End If
                Next
                For i = 1 To m
                    If i = 1 Then
                        brr(i, 6) = r - 4
                    Else
                        brr(i, 6) = brr(i, 1) - brr(i - 1, 1)
                    End If
                Next
                brr(m + 1, 6) = .[c1] - brr(m, 1)
                .Range("e5:i" & n - 4).ClearContents
                .Range("e5").Resize(n - 4, UBound(brr, 2)) = brr
            End With
        Case "3"
            f = Dir(p & "*.xlsm")
            Do While f <> ""
                If f <> ThisWorkbook.Name Then
                    Set wb = Workbooks.Open(p & f)
                    With wb.Sheets(1)
                        xm = .[i1]: n = .[g1]
                        m = 0
                        For i = 1 To UBound(arr)
                            If arr(i, 6) = xm Then
                                m = m + 1: r = Application.Match(xm, wk.Sheets(1).[j:j], 0)
                                For j = 1 To 5
                                    brr(m, j) = arr(i, j)
                                Next
                            End If
                        Next
                        For i = 1 To m
                            If i = 1 Then
                                brr(i, 6) = r - 4
                            Else
                                brr(i, 6) = brr(i, 1) - brr(i - 1, 1)
                            End If
                        Next
                        brr(m + 1, 6) = .[c1] - brr(m, 1)
                         .Range("e5:i" & n - 4).ClearContents
                         .Range("e5").Resize(n - 4, UBound(brr, 2)) = brr
                    End With
                    wb.Close True
                End If
                f = Dir
            Loop
         Case Else
            Exit Sub
    End Select
    Application.ScreenUpdating = True
    MsgBox Format(Timer - tms, "0.000s")
End Sub

评分

3

查看全部评分

TA的精华主题

TA的得分主题

发表于 2018-10-5 08:00 | 显示全部楼层
测试附件:

河南快三.rar

967.32 KB, 下载次数: 11

评分

3

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-10-5 08:31 | 显示全部楼层

老师:下载后测试了一下,代码完全实现了按J1指定数字更新分表的目的,运行速度也很快!

    美中不足的是:当三个分表也都处于打开状态【这样可以很方便数据更新后分类查看比较】下,指定J1为“3”,点击《00 总表》里的更新按钮后,会只保留一个分表处于打开状态,其余两个会自动关闭。

   能不能只更新数据,而不让已经打开的分表自动关闭?需要关闭时,可以采取手动方式。

TA的精华主题

TA的得分主题

发表于 2018-10-5 08:56 来自手机 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2018-10-5 08:58 来自手机 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-10-5 10:47 | 显示全部楼层
本帖最后由 WYS67 于 2018-10-5 10:49 编辑
lsc900707 发表于 2018-10-5 08:56
只要把那句wb.close true注释掉就可以。

版主老师:去掉wb.close true后,三个分表不再自动关闭了,却出现了新问题:指定J1为“3”时,点击更新按钮,显示更新结束,但三个分表没有刷新输入的数据;指定J1为“1”时,点击按钮后,《1 组三》里的数据也无法刷新;但指定J1为“0”和“2”时,可以刷新《0 三同》和《2 组六》数据;

  怪了!指定J1为偶数【0、2】时可以刷新数据,奇数【1、3】时却不能刷新数据。您看问题怎么解决?

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-10-5 13:30 | 显示全部楼层
恳请老师帮忙解决:

指定J1为偶数【0、2】时可以刷新数据,奇数【1、3】时却不能刷新数据的问题。

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-10-5 15:37 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
lsc900707 发表于 2018-10-5 08:58
代码倒数第10行。

去掉wb.close true后,三个分表更新不再自动关闭了,却出现了---指定J1为偶数【0、2】时可以刷新数据,奇数【1、3】时却不能刷新数据。

请老师帮忙解决!

TA的精华主题

TA的得分主题

发表于 2018-10-5 21:06 | 显示全部楼层
WYS67 发表于 2018-10-5 15:37
去掉wb.close true后,三个分表更新不再自动关闭了,却出现了---指定J1为偶数【0、2】时可以刷新数据,奇 ...

我测试都没问题,要不你清空数值试试!
还有一个前提,工作簿是不需要你手工打开的!

评分

3

查看全部评分

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

本版积分规则

关闭

最新热点上一条 /1 下一条

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

GMT+8, 2024-4-25 19:45 , Processed in 0.036038 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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