【问题标题】:VBA Macro - check particular boxesVBA 宏 - 选中特定框
【发布时间】:2021-07-30 02:09:24
【问题描述】:

早上好!

我正在开发一个小项目,我遇到了这个宏世界,也就是我以前从未听说过的“宏 VBA 脚本”。

我想这是非常基本的东西,但我仍然在努力。

到目前为止我做了什么? 很多谷歌搜索。

我做了我自己的方法:

Sub Clickall()
With Selection
ActiveSheet.Shapes.Range("Check Box 2").Select
.Value = xlOn
.LinkedCell = ""
.Display3DShading = False
End With
End Sub

但是这个一次只检查 1 个框。而且它失败了很多次,没有任何理由。

然后我发现了这个:

Public Function Check(filePath As String, sheetName As String)
Dim xlWorkbook As Workbook
Dim xlWorksheet As Worksheet
Dim xlRange As Range
Set xlWorkbook = Workbooks.Open(filePath, UpdateLinks:=False)
Set xlWorksheet = xlWorkbook.Worksheets(sheetName)
For Each chkBox In xlWorksheet.CheckBoxes
chkBox.Value = xlOn
Next chkBox
xlWorkbook.Save
xlWorkbook.Close
End Function

但在这种情况下,是同时选中所有框,而我只想选中特定框。

所以,当我收到那个 excel 文件时。复选框 1、2、3、4 已经被选中。 我的工作是选中 5、6、7、8、9 号复选框,并取消选中 10 号和 11 号复选框。

有人知道如何做到这一点吗?

谢谢

【问题讨论】:

  • 总是有 11 个盒子吗?然后一个计数器可以帮助它在 5 圈后停止
  • 嗨,@Capt.Krusty,是的,总是 11 盒 :)

标签: excel vba


【解决方案1】:

请测试下一个代码。什么都不回,做个Sub就够了:

Sub CheckCB(filePath As String, sheetName As String)
 Dim xlWorkbook As Workbook, xlWorksheet As Worksheet, xlRange As Range, i As Long
 Set xlWorkbook = Workbooks.Open(filePath, UpdateLinks:=False)
 Set xlWorksheet = xlWorkbook.Worksheets(sheetName)
 For i = 1 To xlWorksheet.CheckBoxes.count
    Select Case i
        Case 5, 6, 7, 8, 9
              xlWorksheet.CheckBoxes("Check Box " & i).value = True
    End Select
 Next i
 xlWorkbook.Close , True
End Sub

【讨论】:

  • “选择案例”有什么作用?
  • @Capt.Krusty 就像它的名字所暗示的那样......当i = 5,或6,或那里的枚举时,它执行以下代码行。
  • 啊酷,所以我现在可以使用“带孔的循环”了,谢谢!点赞! :)
  • @Capt.Krusty 如果使用更多复选框甚至使用不连续的数字,我尝试提供的解决方案提供了轻松调整代码的可能性。像 2, 4, 6, 7, 8 ... 当你不能直接迭代,没有很多 If - Enf If 条件时。
  • @Capt.Krusty 有趣的是,我可以在赞成票上方看到这一事实,但我的恶名钱包中没有任何内容......甚至刷新页面。
【解决方案2】:
Public Function Check(filePath As String, sheetName As String)
Dim xlWorkbook As Workbook
Dim xlWorksheet As Worksheet
Dim xlRange As Range
Dim i As Integer
Set xlWorkbook = Workbooks.Open(filePath, UpdateLinks:=False)
Set xlWorksheet = xlWorkbook.Worksheets(sheetName)

For i = 5 To 9
   xlWorksheet.OLEObjects("Checkbox" & i).Object.Value = True 'Give name as String as your checkboxes are named
Next i

xlWorkbook.Save
xlWorkbook.Close

End Function

【讨论】:

  • 您的代码没有在a = "Checkbox" & i 行引发错误吗?在您的情况下,您应该将其声明为 String... 但更短的变体是跳过此变量并直接使用串联而不是 a
  • 了不起的工作@Capt.Krusty,这小段代码是真正的工程工作。非常感谢您的时间和精力。你是大佬非常感谢!!
【解决方案3】:

您可以使用索引数组或名称.CheckBoxes(Array(...)) 对复选框进行操作

Sub SetCheckBoxes()
    ' set all the CheckBoxes to False
    ActiveSheet.CheckBoxes.Value = False
    
    ' option one: indexes of the checkboxes = checkboxes numbers
    ActiveSheet.CheckBoxes(Array(5, 6, 7, 8, 9)).Value = True
    
    ' option two: indexes of the checkboxes <> checkboxes numbers
    arr = Array(5, 6, 7, 8, 9)
    For i = 0 To UBound(arr)    'make array with the checkboxes names
        arr(i) = "Check Box " & arr(i)
    Next
    ActiveSheet.CheckBoxes(arr).Value = True    'apply
End Sub

【讨论】:

    猜你喜欢
    • 2017-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-26
    • 2013-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多