ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 小程序练习

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-6-24 22:40 | 显示全部楼层
下一步想在“数据工具”中增加一个“一对多匹配”的功能,采用SQL语句,把二个表左右串连成一个新表,代替系统自带的“高级筛选”操作。

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-7-2 21:27 | 显示全部楼层
本帖最后由 OKJSJSF 于 2023-7-8 17:45 编辑

excel通用工具.rar (678.47 KB, 下载次数: 7) 修改了“视力工具”中的“单元格详情”中的二个错误,LenB函数的用法,增加判断条件。
Sub cb31(control As IRibbonControl)     '单元格详情
    If Workbooks.Count = 0 Then
        MsgBox "没有可操作的工作簿。", vbExclamation, "微软的提醒:"
        Exit Sub
    End If
    If TypeName(Selection) <> "Range" Then
        MsgBox "请选单元格。", vbExclamation, "微软的提醒:"
        Exit Sub
    End If
    On Error GoTo errline
    With ActiveCell
    If IsNumeric(ActiveCell) And Application.WorksheetFunction.IsNumber(ActiveCell) Then
        MsgBox "NumberFormat:" & .NumberFormat & vbCr & "NumberFormatLocal:" & .NumberFormatLocal & vbCr _
        & "Value:" & .Value & vbCr & "Value2:" & .Value2 & vbCr & "Text:" & .Text & vbCr _
        & "Len:" & Len(ActiveCell) & vbCr & "LenB:" & LenB(StrConv(ActiveCell, vbFromUnicode)) & vbCr _
        & "IsArray:" & IsArray(ActiveCell) & vbCr _
        & "IsDate:" & IsDate(ActiveCell) & vbCr _
        & "IsEmpty:" & IsEmpty(ActiveCell) & vbCr _
        & "IsError:" & IsError(ActiveCell) & vbCr _
        & "IsMissing:" & IsMissing(ActiveCell) & vbCr _
        & "IsNull:" & IsNull(ActiveCell) & vbCr _
        & "IsNumeric:" & IsNumeric(ActiveCell) & vbCr _
        & "IsObject:" & IsObject(ActiveCell) & vbCr _
        & "TypeName:" & TypeName(ActiveCell) & vbCr _
        & "VarType:" & VarType(ActiveCell) & vbCr _
        & "IsText:" & Application.WorksheetFunction.IsText(ActiveCell) & vbCr _
        & "IsNonText:" & Application.WorksheetFunction.IsNonText(ActiveCell) & vbCr _
        & "IsNumber:" & Application.WorksheetFunction.IsNumber(ActiveCell) & vbCr _
        & "IsEven:" & Application.WorksheetFunction.IsEven(ActiveCell) & vbCr _
        & "IsOdd:" & Application.WorksheetFunction.IsOdd(ActiveCell) & vbCr _
        & "IsLogical:" & Application.WorksheetFunction.IsLogical(ActiveCell) & vbCr _
        & "IsNA:" & Application.WorksheetFunction.IsNA(ActiveCell) & vbCr _
        & "IsErr:" & Application.WorksheetFunction.IsErr(ActiveCell) & vbCr _
        & "HasArray:" & .HasArray & vbCr & "HasFormula:" & .HasFormula & vbCr & "Locked:" & .Locked & vbCr _
        & "Font.Color:" & .Font.Color & vbCr & "Font.ColorIndex:" & .Font.ColorIndex & vbCr _
        & "Interior.Color:" & .Interior.Color & vbCr & "Interior.ColorIndex:" & .Interior.ColorIndex & vbCr _
        , , "活动单元格详情:"
    Else
        MsgBox "NumberFormat:" & .NumberFormat & vbCr & "NumberFormatLocal:" & .NumberFormatLocal & vbCr _
        & "Value:" & .Value & vbCr & "Value2:" & .Value2 & vbCr & "Text:" & .Text & vbCr _
        & "Len:" & Len(ActiveCell) & vbCr & "LenB:" & LenB(StrConv(ActiveCell, vbFromUnicode)) & vbCr _
        & "IsArray:" & IsArray(ActiveCell) & vbCr _
        & "IsDate:" & IsDate(ActiveCell) & vbCr _
        & "IsEmpty:" & IsEmpty(ActiveCell) & vbCr _
        & "IsError:" & IsError(ActiveCell) & vbCr _
        & "IsMissing:" & IsMissing(ActiveCell) & vbCr _
        & "IsNull:" & IsNull(ActiveCell) & vbCr _
        & "IsNumeric:" & IsNumeric(ActiveCell) & vbCr _
        & "IsObject:" & IsObject(ActiveCell) & vbCr _
        & "TypeName:" & TypeName(ActiveCell) & vbCr _
        & "VarType:" & VarType(ActiveCell) & vbCr _
        & "IsText:" & Application.WorksheetFunction.IsText(ActiveCell) & vbCr _
        & "IsNonText:" & Application.WorksheetFunction.IsNonText(ActiveCell) & vbCr _
        & "IsNumber:" & Application.WorksheetFunction.IsNumber(ActiveCell) & vbCr _
        & "IsLogical:" & Application.WorksheetFunction.IsLogical(ActiveCell) & vbCr _
        & "IsNA:" & Application.WorksheetFunction.IsNA(ActiveCell) & vbCr _
        & "IsErr:" & Application.WorksheetFunction.IsErr(ActiveCell) & vbCr _
        & "HasArray:" & .HasArray & vbCr & "HasFormula:" & .HasFormula & vbCr & "Locked:" & .Locked & vbCr _
        & "Font.Color:" & .Font.Color & vbCr & "Font.ColorIndex:" & .Font.ColorIndex & vbCr _
        & "Interior.Color:" & .Interior.Color & vbCr & "Interior.ColorIndex:" & .Interior.ColorIndex & vbCr _
        , , "活动单元格详情:"
    End If
    End With
    Exit Sub
errline:     MsgBox Err.Description
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-7-3 21:13 | 显示全部楼层
本帖最后由 OKJSJSF 于 2023-7-8 17:52 编辑

“视力工具”中的“全行数据一览无余”记录单窗口改善了一下,文本框做大一点,防止字符显示不全。只是相邻文本框上下边框重合了。“会议助手”中的显示32个以上字符的窗体的代码作了改正。主要是屏幕高度用像素进行换算是不适合的。 excel通用工具.rar (678.47 KB, 下载次数: 5)

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-6-9 10:54 | 显示全部楼层
增加了用表格展示“全行数据一览无余“的功能。虽然手工也可以做也不慢,但用程序爽得多。

excel通用工具.rar

674.26 KB, 下载次数: 11

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-6-9 10:57 | 显示全部楼层
Sub cb240(control As IRibbonControl)     '全行数据一览无余2,列数过多的数据记录分左右二栏展示,便于打印成一页A4
    If Workbooks.Count = 0 Then
        MsgBox "没有可操作的工作簿。", vbExclamation, "微软的提醒:"     '如果只剩加载宏工作簿则其功能禁用
        Exit Sub
    End If
    Dim r As Range, c1 As Byte, c2 As Byte, s1 As String, s2 As String
    On Error GoTo errline
    Do
        Set r = Application.InputBox("请选择打印区域列标题的第一个单元格:", "参数设置1", , , , , , 8)
        If TypeName(Intersect(r, r.Parent.UsedRange)) <> "Range" Or Len(r) = 0 Then     '列标题应当有文本
            MsgBox "无效选择!", vbQuestion, "微软的提醒:"
        Else
            Exit Do
        End If
    Loop
    Application.ScreenUpdating = False
    With r
        s1 = .Parent.Name     '单元格的父对象就是工作表
        c1 = .Column
        c2 = .End(xlToRight).Column - c1 + 1     '打印范围的左上角单元格可自已确定,不一定非得第一个
        .Resize(1, c2).EntireColumn.Hidden = False     '隐藏的列必须显示后才能被下一步复制
        .Resize(1, c2).Copy
    End With
    Worksheets.Add
    s2 = ActiveSheet.Name     '新建工作表即是活动工作表,不用管它什么名称,赋给变量即可
    Cells(2).PasteSpecial xlPasteValuesAndNumberFormats, xlPasteSpecialOperationNone, False, True     '选择性粘贴值与数字格式并转置
    Cells(1) = 1
    Cells(1).DataSeries rowcol:=xlColumns, Type:=xlLinear, Step:=1, Stop:=c2     '填充自然数作为序号
    Worksheets(s1).Activate     '用程序激活或选择就不必手工切换工作表,速度大增
    Application.ScreenUpdating = True
    Do
        Set r = Application.InputBox("请选择一个数据所在行单元格:", "参数设置2", , , , , , 8)
        If r.Row > r.Parent.UsedRange.Row + r.Parent.UsedRange.Rows.Count Then     '已用区域的第一行+行数=末行
            MsgBox "选择无效。", vbQuestion, "微软的提醒:"
        Else
            Exit Do
        End If
    Loop
    Application.ScreenUpdating = False
    Cells(r.Row, c1).Resize(1, c2).Copy
    Set r = Nothing
    Worksheets(s2).Activate     '再次切换工作表
    Cells(3).PasteSpecial xlPasteValuesAndNumberFormats, xlPasteSpecialOperationNone, False, True
    Cells(1).CurrentRegion.Borders.LineStyle = xlContinuous     '首单元格所属区域添加细边框
    Cells(4).Select
    If c2 > 50 Then     'A4纸打印时宜50列以内,再多宜分二栏排版
        If c2 Mod 2 = 0 Then
            Cells(c2 / 2 + 1, 1).Resize(c2 / 2, 3).Cut
        Else
            Cells(c2 / 2 + 1.5, 1).Resize(c2 / 2 + 0.5, 3).Cut
        End If
        ActiveSheet.Paste
        Cells(1).Resize(Cells(1).End(xlDown).Row, 3).Borders(xlEdgeRight).LineStyle = xlDouble     '分栏时中间用双垂线更美观
        Cells(7).Select
    End If
    Cells.EntireColumn.AutoFit     '工作表列宽自动调整
    Application.ScreenUpdating = True
    MsgBox "执行完毕,请预览。"
    Application.Dialogs(xlDialogPrintPreview).Show     '弹出打印预览对话框ActiveWindow.SelectedSheets.PrintPreview
errline:
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-6-10 13:07 | 显示全部楼层
本帖最后由 OKJSJSF 于 2024-6-10 22:32 编辑
OKJSJSF 发表于 2024-6-9 10:54
增加了用表格展示“全行数据一览无余“的功能。虽然手工也可以做也不慢,但用程序爽得多。

四肢发达头脑简单,发现还是忘了一个判断条件,宜补充。数据所在行单元格的选择不宜在列标题上方。
Sub cb240(control As IRibbonControl)     '全行数据一览无余2,列数过多的数据记录分左右二栏展示,便于打印成一页A4
    If Workbooks.Count = 0 Then
        MsgBox "没有可操作的工作簿。", vbExclamation, "微软的提醒:"     '如果只剩加载宏工作簿则其功能禁用
        Exit Sub
    End If
    Dim r As Range, c1 As Byte, c2 As Byte, s1 As String, s2 As String
    On Error GoTo errline
    Do
        Set r = Application.InputBox("请选择打印区域列标题的第一个单元格:", "参数设置1", , , , , , 8)
        If TypeName(Intersect(r, r.Parent.UsedRange)) <> "Range" Or Len(r) = 0 Then     '列标题应当有文本
            MsgBox "无效选择!", vbQuestion, "微软的提醒:"
        Else
            Exit Do
        End If
    Loop
    Application.ScreenUpdating = False
    With r
        s1 = .Parent.Name     '单元格的父对象就是工作表
        c1 = .Column
        c2 = .End(xlToRight).Column - c1 + 1     '打印范围的左上角单元格可自已确定,不一定非得第一个
        .Resize(1, c2).EntireColumn.Hidden = False     '隐藏的列必须显示后才能被下一步复制
        .Resize(1, c2).Copy
    End With
    Worksheets.Add
    s2 = ActiveSheet.Name     '新建工作表即是活动工作表,不用管它什么名称,赋给变量即可
    Cells(2).PasteSpecial xlPasteValuesAndNumberFormats, xlPasteSpecialOperationNone, False, True     '选择性粘贴值与数字格式并转置
    Cells(1) = 1
    Cells(1).DataSeries rowcol:=xlColumns, Type:=xlLinear, Step:=1, Stop:=c2     '填充自然数作为序号
    With Worksheets(s1)
        .Activate     '用程序激活或选择就不必手工切换工作表,速度大增
        Application.ScreenUpdating = True
        Do
            Set r = Application.InputBox("请选择一个数据所在行单元格:", "参数设置2", , , , , , 8)
            If r.Row > .UsedRange.Row + .UsedRange.Rows.Count-1 Or r.Row < .UsedRange.Row + 1 Then   '已用区域的第一行+行数-1=末行
                MsgBox "无效选择!", vbQuestion, "微软的提醒:"
            Else
                Exit Do
            End If
        Loop
        Application.ScreenUpdating = False
        Cells(r.Row, c1).Resize(1, c2).Copy
        Set r = Nothing
    End With
    Worksheets(s2).Activate     '再次切换工作表
    Cells(3).PasteSpecial xlPasteValuesAndNumberFormats, xlPasteSpecialOperationNone, False, True
    Cells(1).CurrentRegion.Borders.LineStyle = xlContinuous     '首单元格所属区域添加细边框
    Cells(4).Select
    If c2 > 50 Then     'A4纸打印时宜50列以内,再多宜分二栏排版
        If c2 Mod 2 = 0 Then
            Cells(c2 / 2 + 1, 1).Resize(c2 / 2, 3).Cut
        Else
            Cells(c2 / 2 + 1.5, 1).Resize(c2 / 2 + 0.5, 3).Cut
        End If
        ActiveSheet.Paste
        Cells(1).Resize(Cells(1).End(xlDown).Row, 3).Borders(xlEdgeRight).LineStyle = xlDouble     '分栏时中间用双垂线更美观
        Cells(7).Select
    End If
    Cells.EntireColumn.AutoFit     '工作表列宽自动调整
    Application.ScreenUpdating = True
    MsgBox "执行完毕,请预览。"
    Application.Dialogs(xlDialogPrintPreview).Show     '弹出打印预览对话框,与ActiveWindow.SelectedSheets.PrintPreview相同,WPS只能这句
errline:
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-6-10 13:07 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-6-13 19:09 | 显示全部楼层
刚刚发现我的小程序中交集方法缺少防错!

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-9-13 12:51 | 显示全部楼层
再增加了一个全行数据一览无余中的一页打印功能,同时修改了单元格文本清理过程中的格式设置,主要就是数字的完整与准确显示。 excel通用工具.rar (689.72 KB, 下载次数: 8)
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

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

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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