2024年11月5日 星期二

vba:檢查所有的checkbox設定,抓取設定

一個一個檢查CheckBox內容太累了,用用程式的方法來取得八。

之前分享了一個控制命令物件的for迴圈例子,再來分享一個檢查CheckBox的例子

 Function CheckAllCheckBoxes()

    Dim ws As Worksheet

    Dim oleObj As OLEObject

Set ws = ActiveSheet

    ' 遍歷工作表上的所有 OLEObject

    For Each oleObj In ws.OLEObjects

        ' 檢查是否為 CheckBox 控制項

       If TypeName(oleObj.Object) = "CheckBox" Then

            ' 進行你需要的操作,例如檢查其值

            If oleObj.Object.Value = True = True Then

                If Total = "" Then                

                    Total = oleObj.Object.Caption                

                Else                

                    Total = Total & "@" & oleObj.Object.Caption   & "@" & oleObj.Object.value

                End If           

            End If

        End If

    Next oleObj    

    CheckAllCheckBoxes = Total    

End Function


這段 VBA 代碼的功能是檢查工作表上所有的 CheckBox 控制項,如果某個 CheckBox 被勾選,則將其標題(Caption)和值(Value)累積到一個字符串變量 Total 中,最終返回這個累積的字符串。

部分功能詳細描述

函數 CheckAllCheckBoxes 的作用

這個函數遍歷當前工作表上的所有 OLEObject,並檢查每個 OLEObject 是否為 CheckBox 控制項。

如果某個 CheckBox 被勾選,則將其標題和值累積到變量 Total 中。


變數聲明:

ws:表示當前的工作表 (Worksheet)。

oleObj:表示工作表上的每一個 OLEObject(嵌入的控制項)。

VBA流程:

設置 ws 為當前的工作表。

使用 For Each 迴圈遍歷工作表上的所有 OLEObject。

使用 TypeName 函數檢查 OLEObject 是否為 CheckBox 控制項。

如果是 CheckBox 控制項,則進一步檢查其是否被勾選 (Value = True)。

如果 CheckBox 被勾選,則將其標題累積到變量 Total 中。

如果 Total 變量為空,則直接將 CheckBox 的標題賦值給 Total。

如果 Total 變量不為空,則將 CheckBox 的標題和值以 @ 分隔的方式累積到 Total 中。

最後返回變量 Total,這個變量包含了所有被勾選的 CheckBox 的標題和值。

逐行說明:

這行定義了一個名為 CheckAllCheckBoxes 的函數。

Function CheckAllCheckBoxes()

這兩行聲明了兩個變數:ws 代表工作表,oleObj 代表工作表上的每一個 OLEObject(嵌入的控制項)。

    Dim ws As Worksheet

    Dim oleObj As OLEObject

這行將變數 ws 設置為當前的活動工作表。

    Set ws = ActiveSheet

這行開始一個 For Each 迴圈,遍歷工作表上的所有 OLEObject。

    ' 遍歷工作表上的所有 OLEObject

    For Each oleObj In ws.OLEObjects

這行檢查當前的 OLEObject 是否為 CheckBox 控制項。

這行開始一個 For Each 迴圈,遍歷工作表上的所有 OLEObject。

這幾行將被勾選的 CheckBox 的標題(Caption)和其值累積到變量 Total 中。如果 Total 為空,則直接賦值;否則,將新的標題和值以 @ 分隔的方式累積到 Total 中。

                If Total = "" Then

                    Total = oleObj.Object.Caption

                Else

                    Total = Total & "@" & oleObj.Object.Caption & "@" & oleObj.Object.Value

                End If

這幾行分別結束 If 條件和 For Each 迴圈。

            End If

        End If

    Next oleObj

這兩行將累積的標題和值字符串(Total)賦值給函數 CheckAllCheckBoxes,並結束函數。

    CheckAllCheckBoxes = Total

End Function




沒有留言:

張貼留言

關箱文:我的雷達

   密集測試半年成績 不再貼文更新