ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 小程序练习

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-3-30 21:32 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 OKJSJSF 于 2023-3-31 23:01 编辑

这里居然可以直接上传excel压缩文件,不需要通过百度网盘了: excel通用工具.rar (675.08 KB, 下载次数: 18)
其中8位数与日期的直接转换功能可能因不同电脑基础设置不同会失效,尚需改代码。如我自家电脑在常规格式单元格中录入日期后,单元格格式不会变化。在单位电脑上,在常规格式单元格中录入日期后,单元格格式会自动变为日期格式。这造成8位数变日期或日期变8位数时出错。


补充内容 (2023-6-6 18:50):
想试用的请62楼下载

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-6-4 07:35 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 OKJSJSF 于 2023-6-24 08:56 编辑

excel通用工具.rar (690.04 KB, 下载次数: 21) 在小程序中,用格式判断日期容易出错,最后发现还是用 isdate函数好。而且,当用小程序改变单元格选区中的值之类操作时,当选区中有多单元格数组公式时,计算结果会因选区与数组区域的交集位置而变化,可能正确,也可能不计算、错误,是否要把数组公式先转换为值呢?还没决定好。8位数变日期或日期变8位数的命令代码暂修改如下:
'Callback for toggleButton2 onAction
Sub tb2(control As IRibbonControl, pressed As Boolean)
    If ActiveSheet.ProtectContents = True Then
        If ActiveSheet.EnableSelection = xlNoSelection Or Selection.AllowEdit = False Then
            MsgBox "请取消工作表保护。", vbExclamation, "微软的提醒:"
            mypre3 = IIf(pressed = True, True, False)
            rib.Invalidate
            Exit Sub
        End If
    End If
    If TypeName(Selection) <> "Range" Then
        MsgBox "请选单元格。", vbExclamation, "微软的提醒:"
        mypre3 = IIf(pressed = True, True, False)
        rib.Invalidate
        Exit Sub
    End If
    Dim myran As Range
    For Each myran In Intersect(Selection, ActiveSheet.UsedRange)
        If myran.HasArray Then
            If myran.CurrentArray.CountLarge > 1 Then
                MsgBox "选区有多单元格数组公式,不利于准确执行。", vbExclamation, "微软的提醒:"
                Exit Sub
            End If
        End If
    Next
    myind = 3
    On Error Resume Next
    With Application.WorksheetFunction
        If pressed = True Then
            If MsgBox("下面将把选区8位数字转换为短日期样式。" & Chr(10) & "如果不用本功能或想全手工操作 text( ,""0-00-00""),请单击“取消”或“X”。", vbOKCancel + vbInformation, "功能说明:") <> vbOK Then
                pressed = True
                mypre3 = pressed
                rib.Invalidate
                Exit Sub
            End If
            For Each myran In Intersect(Selection, ActiveSheet.UsedRange)
                myran = Replace(.Clean(myran), " ", "")
                If IsDate(.Text(myran, "0-00-00")) Then
                    myran.Value = .Text(myran, "0-00-00")
                End If
            Next
            MsgBox "执行完毕。"
        Else
            If MsgBox("下面将把选区标准日期格式转换为8位数字。" & Chr(10) & "如果不用本功能或想全手工操作 text( ,""yyyymmdd""),请单击“取消”或“X”。", vbOKCancel + vbInformation, "功能说明:") <> vbOK Then
                pressed = False
                mypre3 = pressed
                rib.Invalidate
                Exit Sub
            End If
            For Each myran In Intersect(Selection, ActiveSheet.UsedRange)
                If IsDate(myran) Then
                    myran.Value = .Text(myran, "yyyymmdd")
                End If
            Next
            Intersect(Selection, ActiveSheet.UsedRange).NumberFormatLocal = "G/通用格式"
            MsgBox "执行完毕。"
        End If
    End With
    mypre3 = pressed
    rib.Invalidate
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-6-6 19:06 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
8位数与日期转换还可增加一个功能:把2023.6.6 这种用小数点代替 -或/ 的不规范日期纠正为标准日期。通用工具还可增加一个功能:单击某个单元格,用弹窗显示单元格的格式、值、值的各种信息函数属性、文本长度等信息。

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-6-12 23:03 | 显示全部楼层
视力工具中的会议助手功能,对窗体中的文本框按实战技巧精粹的方法进行了修改,压缩文件作了更新。

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-6-18 08:08 | 显示全部楼层
本帖最后由 OKJSJSF 于 2023-6-19 07:45 编辑

刚刚发现了我的通用工具加载宏的缺点:工作簿窗口全部关闭后,单击某些加载宏按钮,会出现错误提示。所以还需修改代码,确保单击通用工具的命令按钮前,有打开的被操作的工作簿。
每个过程的前端都应该加上判断语句:
if workbooks.count=0 then
msgbox “没有可操作的工作簿。”,vbExclamation,“微软的提醒:”
exit sub
end if
加载宏工作簿本身不会被计数在内。
实际还有不少疏漏未发现,有时单击某命令,加载项会消失,要重新加载。

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-6-19 07:19 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 OKJSJSF 于 2023-6-22 07:27 编辑

excel通用工具.rar (690.04 KB, 下载次数: 9) 2023年6月19日通用工具的更新主要是数据工具中修改了同一文件夹中多工作簿的工作表数据合并,改为多簿多表合并,不是只合并各簿中的一个表 。对其中主代码的周边条件判断辅助代码也作了完善。



Sub cb22(control As IRibbonControl)     '簿外并表,不使用查询连接可以突破50个表的限制
    If Workbooks.Count = 0 Then
        MsgBox "没有可操作的工作簿。", vbExclamation, "微软的提醒:"
        Exit Sub
    End If
    Dim rstart As Byte, c As Byte, i As Byte, shcount%, ranaddr$, mypath$, wb As Workbook, sh As Worksheet, ran As Range
    If MsgBox("本命令用于合并(上下串连)同一文件夹内各工作簿的各工作表的数据。注意:" & Chr(10) & "1、待合并的工作簿须取消保护,工作表须取消筛选。" & Chr(10) & "2、执行前先打开一个待合并分表所在工作簿。" & Chr(10) & "3、程序会在本文件夹内创建一个名称及表名均为“hebin”的工作簿,用于存放合并数据。如果已有它,程序会先删除它并新建。" & Chr(10) & "4、各分表须结构相同,列标题左右连续,数据中间无全空行(至少某列数据须上下连续),列标题上行、数据区域下行及右边列三面全是空格。" & Chr(10) & "5、各表数据区域列标题的上部的大小标题与台头、及表格下部各种填表注释说明,可在合并后手工粘贴。" & Chr(10) & "" & Chr(10) & "如果不用本功能或想全手工操作,请单击“取消”或“X”。", vbOKCancel + vbInformation, "功能说明:") <> vbOK Then Exit Sub
    mypath = ActiveWorkbook.Path     '确定文件夹位置
    If Len(Dir(mypath & "\hebin.xlsx")) > 0 Then     '如果指定文件存在就删除它
        For i = 1 To Workbooks.Count
            If Workbooks(i).Name = "hebin.xlsx" Then     '如果打开的文件中有指定文件,必须先关闭它,才能删除
                Workbooks(i).Close False
                Exit For
            End If
        Next
        If MsgBox("程序在删除名称为 hebin 的工作簿。如该簿无重要数据,可单击“确定”或回车,执行删除。或单击“取消”或“X”,不删除并退出程序。", vbOKCancel + vbExclamation, "微软的提醒:") <> vbOK Then Exit Sub
        If MsgBox("程序在删除名称为 hebin 的工作簿。如该簿有重要数据未另存,可单击“取消”或“X”,不删除并退出程序。或单击“确定”或回车,执行删除。", vbOKCancel + vbExclamation, "微软的提醒第二遍:") <> vbOK Then Exit Sub
        Kill mypath & "\hebin.xlsx"
    End If
    If Workbooks.Count = 0 Then
        MsgBox "请重新打开一个工作簿再执行。", , "微软的提醒:"
        Exit Sub
    End If
    On Error GoTo errline
    Set ran = Application.InputBox("请在待合并分表单击选择【列标题】第一个单元格:", "参数设置", , , , , , 8)
    t = Timer
    ranaddr = ran.Address
    c = ran.CurrentRegion.Columns.Count

    Application.ScreenUpdating = False
    Call stabar       '这是启用状态栏提示文字:程序运行中,请稍候,请 稍 候,,,,,,
    Set wb = Workbooks.Add
    Set sh = wb.Worksheets(1)
    With sh
        .Name = "hebin"
        ran.Resize(1, c).Copy .Cells(1)
        .Cells(1, c + 1).Value = "表名"
        .Cells(1, c + 2).Value = "簿名"
    End With
    wb.SaveAs mypath & "\hebin.xlsx"
    Dim filename As String, fn As String, r As Long, rtemp As Long
    filename = Dir(mypath & "\*.xlsx")
    Application.EnableEvents = False
    Do While filename <> ""
        If filename <> "hebin.xlsx" Then
            i = i + 1
            fn = mypath & "\" & filename
            Set wb = GetObject(fn)
            If wb.ProtectStructure = True Then
                If MsgBox(wb.Name & "工作簿被保护,请单击“确定”或回车,进入下一步撤销保护。或单击“取消”或“X”,不撤销保护并退出程序。", vbOKCancel + vbExclamation, "微软的提醒:") <> vbOK Then
                    Exit Sub
                Else
                    wb.Unprotect
                End If
            End If
            For Each sh In wb.Worksheets
                With sh
                    If .FilterMode = True Then
                        If .ProtectContents = True Then
                            If MsgBox(wb.Name & "工作簿的" & .Name & "工作表 被保护,请单击“确定”或回车,进入下一步撤销保护。或单击“取消”或“X”,不撤销保护并退出程序。", vbOKCancel + vbExclamation, "微软的提醒:") <> vbOK Then
                                Exit Sub
                            Else
                                .Unprotect
                            End If
                        End If
                        .ShowAllData     '被筛选掉的数据无法被复制,被设置隐藏或行高为0的数据则可以被复制,工作表被保护或隐藏或深度隐藏也可复制
                    End If
                    r = .Range(ranaddr).CurrentRegion.Rows.Count - 1
                    .Range(ranaddr).Offset(1, 0).Resize(r, c).Copy
                    On Error Resume Next
                    With Cells(rtemp + 2, 1)
                        .PasteSpecial xlPasteAllUsingSourceTheme
                        .PasteSpecial xlPasteValues
                        .Offset(0, c).Resize(r, 1).Value = sh.Name
                        .Offset(0, c + 1).Resize(r, 1).Value = wb.Name
                    End With
                    Application.CutCopyMode = xlCut
                    rtemp = rtemp + r
                End With
            Next
            wb.Close False
        End If
        filename = Dir
    Loop
    Range("a2").Select
    ActiveWindow.FreezePanes = True
    Application.EnableEvents = True
    Application.ScreenUpdating = True
    MsgBox "多簿表合并完毕,耗时" & Format(Timer - t, "0.00") & "秒。数据共" & rtemp & "行。" & Chr(10) & "1、如有各分表行序号并入造成重复,可重新填充。" & Chr(10) & "2、如有各分表表尾信息并入造成重复,可采用局部查找后全选后删除行。"
    Set ran = Nothing
    Set wb = Nothing
    Set sh = Nothing
    Exit Sub
errline: MsgBox Err.Description
End Sub



TA的精华主题

TA的得分主题

 楼主| 发表于 2023-6-19 07:58 | 显示全部楼层
本帖最后由 OKJSJSF 于 2023-7-2 21:18 编辑

excel通用工具.rar (693.96 KB, 下载次数: 11) 2007版的加载宏文件,由于多个过程混在一起,变量较多,代码还需简化,模块位置还需调整。下一步要下载“易用宝”或“易灵”看看老师是如何组织代码的。


VBA工程密码没有设,请自己加上。

在修改简化代码过程中,如果把过程级变量改为公共变量,会出现很多意想不到的错误,因为变量在过程运行时没释放。

TA的精华主题

TA的得分主题

发表于 2023-6-19 11:19 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-6-19 21:37 | 显示全部楼层
qiao1019 发表于 2023-6-19 11:19
怎么都是一个人发的贴子

谢谢您的回复。我这是过时的2007版的excel,自我修行,如您所见,几乎没人回复提意见,所以也漏洞百出,excelhome就当我的服务器吧。

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-6-20 17:30 | 显示全部楼层
请问版主为什么一楼内容只能补充不能多次编辑?
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-19 01:43 , Processed in 0.057202 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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