ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 两个目的没有达到,求大神帮忙

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-10-4 22:48 | 显示全部楼层 |阅读模式
本帖最后由 jhhkh 于 2024-10-4 23:06 编辑

求助.rar (71.69 KB, 下载次数: 24)

我通过VBA生成多个复选框,我想达到以下两个效果
1。勾选除最下面任何一个复选框,右侧的单元格背景变浅绿色

2.  勾选最下面一个复选框,这一列上面的复选框都被勾选,右侧的一列有数据的所有单元格背景变浅绿色


不知道什么原因,上传压缩文件再次下载,提示文件损坏,所以只好压缩两次,才没有问题,用两次压缩里面的Excel

TA的精华主题

TA的得分主题

发表于 2024-10-5 01:30 | 显示全部楼层


  1. Sub InsertCheckboxesAndHideText()
  2.     Dim ws As Worksheet
  3.     Dim col As Long
  4.     Dim row As Long
  5.     Dim cb As Object
  6.     Dim colArray As Variant
  7.     Dim i As Long
  8.     Dim FC As FormatCondition, sCell As String, eCell As String
  9.     ' 设置要操作的工作表
  10.     Set ws = ThisWorkbook.Sheets("初始赋值")
  11.    
  12.     ' 指定需要插入复选框的列:A, C, E, G, ..., Q(隔列)
  13.     colArray = Array(1, 3, 5, 7, 9, 11, 13, 15, 17) ' 这些是列号
  14.     Application.ScreenUpdating = False
  15.     ' 遍历指定列并在第2行到第16行中插入复选框
  16.     For i = LBound(colArray) To UBound(colArray)
  17.         col = colArray(i)
  18.         
  19.         ' 在每列的2到16行中插入复选框
  20.         With ws.Cells(row, col)
  21.         For row = 2 To 17
  22.             ' 插入复选框
  23.             Set cb = ws.CheckBoxes.Add(.Left, .Top, .Width, .Height)
  24.             cb.Caption = "" ' 去掉复选框的标题
  25.             cb.linkedCell = .Address ' 将复选框与所在单元格链接
  26.             cb.Display3DShading = True ' 设置复选框为三维阴影效果
  27.             
  28.             ' 设置单元格字体颜色为与背景相同,使TRUE或FALSE不可见
  29.             .Font.Color = .Interior.Color ' 字体颜色设置为与背景颜色相同
  30.         Next row
  31.         End With
  32.         ' ** 设置条件格式
  33.         With ws.Cells(2, col + 1).Resize(15, 1)
  34.             sCell = .Cells(1).Offset(0, -1).Address(0, 1)
  35.             eCell = .Cells(.Cells.Count).Offset(1, -1).Address(1, 0)
  36.             Set FC = .FormatConditions.Add(Type:=xlExpression, Formula1:="=OR(" & sCell & "," & eCell & ")")
  37.             FC.Interior.Color = vbGreen
  38.         End With
  39.     Next i
  40.     Application.ScreenUpdating = True
  41. End Sub

  42. Sub RemoveFC()
  43.     Dim FC
  44.     For Each FC In ActiveSheet.Cells.FormatConditions
  45.         FC.Delete
  46.     Next
  47. End Sub

  48. Sub 删除所有复选框() ' 简化代码
  49.     Dim ws As Worksheet
  50.     Dim cb As CheckBox
  51.    
  52.     ' 设置要操作的工作表
  53.     Set ws = ThisWorkbook.Sheets("初始赋值")
  54.     ws.DrawingObjects.Delete
  55.     ' 遍历并删除工作表中的所有复选框
  56. '    For Each cb In ws.CheckBoxes
  57. '        cb.Delete
  58. '    Next cb
  59. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2024-10-5 01:31 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
image.jpg

TA的精华主题

TA的得分主题

发表于 2024-10-5 09:43 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
Sub 复选框1()
Dim i As Byte, s As Byte
r = Cells(Rows.Count, 1).End(xlUp).row
With ActiveSheet
    For i = 1 To .CheckBoxes.Count
        l = .CheckBoxes(i).TopLeftCell.Column + 1
        h = .CheckBoxes(i).TopLeftCell.row
        If h < r Then
            If .CheckBoxes(i).Value = 1 Then
                .Cells(h, l).Interior.ColorIndex = 4
            Else
                .Cells(h, l).Interior.ColorIndex = 0
            End If
        End If
    Next i
End With
End Sub
Sub 复选框2()
Dim i As Byte, s As Byte
r = Cells(Rows.Count, 1).End(xlUp).row
With ActiveSheet
    For i = 1 To .CheckBoxes.Count
        l = .CheckBoxes(i).TopLeftCell.Column + 1
        h = .CheckBoxes(i).TopLeftCell.row
        If h = r Then
            If .CheckBoxes(i).Value = 1 Then
                For s = 1 To .CheckBoxes.Count
                    If .CheckBoxes(s).TopLeftCell.Column = l - 1 Then
                        .CheckBoxes(s) = True
                        If .Cells(.CheckBoxes(s).TopLeftCell.row, l) <> "" Then .Cells(.CheckBoxes(s).TopLeftCell.row, l).Interior.ColorIndex = 4
                    End If
                Next s
            Else
                For s = 1 To .CheckBoxes.Count
                    If .CheckBoxes(s).TopLeftCell.Column = l - 1 Then
                        .CheckBoxes(s) = False
                        .Cells(.CheckBoxes(s).TopLeftCell.row, l).Interior.ColorIndex = 0
                    End If
                Next s
            End If
        End If
    Next i
End With
End Sub
Sub 指定宏()
With ActiveSheet
    For i = 1 To .CheckBoxes.Count
        hh = .CheckBoxes(i).TopLeftCell.row
        .Shapes.Range(Array("Check Box " & i)).Select
        If hh = 17 Then
            Selection.OnAction = "复选框2"
        Else
            Selection.OnAction = "复选框1"
        End If
    Next i
End With
End Sub


TA的精华主题

TA的得分主题

发表于 2024-10-5 09:44 | 显示全部楼层
123.rar (37.36 KB, 下载次数: 2)

TA的精华主题

TA的得分主题

发表于 2024-10-5 09:51 | 显示全部楼层
4楼附件有误,以此为准
123.rar (37.74 KB, 下载次数: 10)

TA的精华主题

TA的得分主题

发表于 2024-10-5 14:08 | 显示全部楼层
  1. Sub qs()
  2. Application.ScreenUpdating = False
  3. Dim rng As Range, r As Range
  4. Set rng = Sheet3.Range("a2:r16")
  5. For Each r In rng
  6.     If r.Value = True Then
  7. '        MsgBox r.Offset(0, 1).Value
  8.         r.Offset(0, 1).Interior.Color = 65535
  9.     Else
  10.         r.Offset(0, 1).Interior.Pattern = xlNone
  11.     End If
  12. Next
  13. Application.ScreenUpdating = True
  14. End Sub

  15. Sub InsertCheckboxesAndHideText()
  16.     Dim ws As Worksheet
  17.     Dim col As Long
  18.     Dim row As Long
  19.     Dim cb As Object
  20.     Dim colArray As Variant
  21.     Dim i As Long
  22.    
  23.     ' 设置要操作的工作表
  24.     Set ws = ThisWorkbook.Sheets("初始赋值")
  25.    
  26.     ' 指定需要插入复选框的列:A, C, E, G, ..., Q(隔列)
  27.     colArray = Array(1, 3, 5, 7, 9, 11, 13, 15, 17) ' 这些是列号
  28.    
  29.     ' 遍历指定列并在第2行到第16行中插入复选框
  30.     For i = LBound(colArray) To UBound(colArray)
  31.         col = colArray(i)
  32.         
  33.         ' 在每列的2到16行中插入复选框
  34.         For row = 2 To 17
  35.             m = m + 1
  36.             ' 插入复选框
  37.             Set cb = ws.CheckBoxes.Add(ws.Cells(row, col).Left, ws.Cells(row, col).Top, ws.Cells(row, col).Width, ws.Cells(row, col).Height)
  38.             cb.Caption = "" ' 去掉复选框的标题
  39.             cb.linkedCell = ws.Cells(row, col).Address ' 将复选框与所在单元格链接
  40.             cb.Display3DShading = True ' 设置复选框为三维阴影效果
  41.             cb.Name = "cx" & m
  42.             
  43.             If m Mod 16 = 0 Then
  44.             cb.OnAction = "sq" '绑定的宏
  45.             Else
  46.             cb.OnAction = "qs" '绑定的宏
  47.             End If
  48.             
  49.             ' 设置单元格字体颜色为与背景相同,使TRUE或FALSE不可见
  50.             ws.Cells(row, col).Font.Color = ws.Cells(row, col).Interior.Color ' 字体颜色设置为与背景颜色相同
  51.         Next row
  52.     Next i
  53. End Sub

  54. Sub sq()
  55. For c = 1 To 17 Step 2
  56. If Sheet3.Cells(17, c) = True Then

  57. Sheet3.Cells(17, c).Offset(-15, 0).Resize(15, 1) = True
  58. Call qs
  59. Else
  60. Sheet3.Cells(17, c).Offset(-15, 0).Resize(15, 1) = False
  61. Call qs
  62. End If
  63. Next c
  64. End Sub

  65. Sub 删除所有复选框()
  66.     Dim ws As Worksheet
  67.     Dim cb As CheckBox
  68.    
  69.     ' 设置要操作的工作表
  70.     Set ws = ThisWorkbook.Sheets("初始赋值")
  71.    
  72.     ' 遍历并删除工作表中的所有复选框
  73.     For Each cb In ws.CheckBoxes
  74.         cb.Delete
  75.     Next cb
  76. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2024-10-5 14:09 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-10-5 15:07 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-19 05:29 , Processed in 0.047687 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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