Board logo

標題: [發問] 巨集產生的核取方塊,能讓的儲存格對應嗎? [打印本頁]

作者: kai6929    時間: 2012-10-9 10:58     標題: 巨集產生的核取方塊,能讓的儲存格對應嗎?

請教各位大師!
                            巨集產生的核取方塊,能讓的儲存格對應嗎?

                            如:  按未選取 B10:=TRUE或 FALSE
                            如:  按未選取 B10:=1或0

                            [attach]12731[/attach]
作者: GBKEE    時間: 2012-10-9 11:15

本帖最後由 GBKEE 於 2012-10-9 11:24 編輯

回復 1# kai6929
  1. Boolean 資料型態
  2. Boolean 變數係以 16 位元( 2 個位元組)數字的形式儲存,但只能是 True 或是 False。Boolean 變數的值不是 True 就是 False ( 在使用 Print 的時候 ),或是 #TRUE# 和 #FALSE# ( 在使用 Write # 的時候 )。使用關鍵字 True 與 False 可將 Boolean 變數指定為這兩個狀態中的一個。
  3. 當轉換其他的數值型態為 Boolean 時,0 會轉成 False,而所有其他的值則變成 True。當轉換 Boolean 值為其他的資料型態,時,False 成為 0 ,而 True 成為 -1。
複製代碼
試試看
  1. Option Explicit
  2. Sub check()
  3.     Dim K As String, M As Boolean
  4.     With ActiveSheet.Shapes(Application.Caller)
  5.         With .TextFrame
  6.             K = .Characters.Text
  7.             If Left(K, 1) = "n" Then
  8.                 .Characters.Text = "o 未選取"
  9.                 M = False
  10.             Else
  11.                 .Characters.Text = "n 選取"
  12.                 M = True
  13.             End If
  14.             .Characters(1, Len(K) + 1).Font.Size = 10
  15.             .Characters(1, 1).Font.Size = 18
  16.         End With
  17.         .TopLeftCell.Offset(, 2) = M
  18.         .TopLeftCell.Offset(, 3) = IIf(CSng(M) = 0, 0, 1)
  19.     End With
  20. End Sub
複製代碼

作者: kai6929    時間: 2012-10-9 13:29

哇! 大師真是貼心十萬分的感謝
              但能否在請教一下現在儲存格的(值)會隨著,核取方塊位置改變而改變
               想做到不論核取方塊放那       儲存格的值都不會改變這樣可行嗎?
作者: GBKEE    時間: 2012-10-9 13:58

回復 3# kai6929
儲存格的(值)會隨著,核取方塊位置改變而改變,又要做到不論核取方塊放那,儲存格的值都不會改變
這樣不是有點矛盾嗎?
作者: kai6929    時間: 2012-10-9 15:45

抱歉大師,我指的是儲存格的位置
作者: kai6929    時間: 2012-10-9 15:50

抱歉大師,我指的是儲存格的位置不變動固定,而核取方塊可以隨意放
作者: GBKEE    時間: 2012-10-9 17:21

回復 6# kai6929
不管方塊移動到何處,皆在固定的儲存格回應

一般模組的程式碼
  1. Option Explicit
  2. Dim AR(1 To 2), Sh As Worksheet   '模組 私用變數
  3. Sub AUTO_OPEN()                   '檔案開啟時一般模組 自動執行的檔案
  4.     Dim S As Shape, A(), B(), i As Integer
  5.     Set Sh = Sheets("工作表1")
  6.     For Each S In Sh.Shapes
  7.         If S.Type = msoTextBox Then             '方塊的Type   msoTextBox 值= 17
  8.             S.OnAction = "check"                '指定巨集
  9.             ReDim Preserve A(i)
  10.             ReDim Preserve B(i)
  11.             A(i) = S.Name                       '方塊名稱
  12.             If i = 0 Then
  13.                Set B(i) = Sh.[d5]               '指定儲存格
  14.             Else
  15.                 Set B(i) = B(i - 1).Offset(1)   '指定儲存格
  16.             End If
  17.             i = i + 1
  18.         End If
  19.     Next
  20.     AR(1) = A                                   '指定陣列內容
  21.     AR(2) = B                                   '指定陣列內容
  22. End Sub
  23. Sub check()  '必須是按下方塊執行此程序
  24.     'AUTO_OPEN   '如有錯誤 執行 AUTO_OPEN 一次
  25.     Dim K As String, M As Boolean, i As Integer
  26.     With Sh.Shapes(Application.Caller)
  27.         With .TextFrame
  28.             K = .Characters.Text
  29.             If Left(K, 1) = "n" Then
  30.                 .Characters.Text = "o 未選取"
  31.                 M = False
  32.             Else
  33.                 .Characters.Text = "n 選取"
  34.                 M = True
  35.             End If
  36.             .Characters(1, Len(K) + 1).Font.Size = 10
  37.             .Characters(1, 1).Font.Size = 18
  38.         End With
  39.         i = Application.Match(.Name, AR(1), 0) - 1      '取的方塊名稱在AR(1)的索引值
  40.         AR(2)(i).Value = M
  41.         AR(2)(i).Offset(, 1).Value = IIf(CSng(M) = 0, 0, 1)
  42.     End With
  43. End Sub
複製代碼

作者: kai6929    時間: 2012-10-12 12:39

感謝大師......




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)