標題:
[發問]
巨集產生的核取方塊,能讓的儲存格對應嗎?
[打印本頁]
作者:
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
Boolean 資料型態
Boolean 變數係以 16 位元( 2 個位元組)數字的形式儲存,但只能是 True 或是 False。Boolean 變數的值不是 True 就是 False ( 在使用 Print 的時候 ),或是 #TRUE# 和 #FALSE# ( 在使用 Write # 的時候 )。使用關鍵字 True 與 False 可將 Boolean 變數指定為這兩個狀態中的一個。
當轉換其他的數值型態為 Boolean 時,0 會轉成 False,而所有其他的值則變成 True。當轉換 Boolean 值為其他的資料型態,時,False 成為 0 ,而 True 成為 -1。
複製代碼
試試看
Option Explicit
Sub check()
Dim K As String, M As Boolean
With ActiveSheet.Shapes(Application.Caller)
With .TextFrame
K = .Characters.Text
If Left(K, 1) = "n" Then
.Characters.Text = "o 未選取"
M = False
Else
.Characters.Text = "n 選取"
M = True
End If
.Characters(1, Len(K) + 1).Font.Size = 10
.Characters(1, 1).Font.Size = 18
End With
.TopLeftCell.Offset(, 2) = M
.TopLeftCell.Offset(, 3) = IIf(CSng(M) = 0, 0, 1)
End With
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
不管方塊移動到何處,皆在固定的儲存格回應
一般模組的程式碼
Option Explicit
Dim AR(1 To 2), Sh As Worksheet '模組 私用變數
Sub AUTO_OPEN() '檔案開啟時一般模組 自動執行的檔案
Dim S As Shape, A(), B(), i As Integer
Set Sh = Sheets("工作表1")
For Each S In Sh.Shapes
If S.Type = msoTextBox Then '方塊的Type msoTextBox 值= 17
S.OnAction = "check" '指定巨集
ReDim Preserve A(i)
ReDim Preserve B(i)
A(i) = S.Name '方塊名稱
If i = 0 Then
Set B(i) = Sh.[d5] '指定儲存格
Else
Set B(i) = B(i - 1).Offset(1) '指定儲存格
End If
i = i + 1
End If
Next
AR(1) = A '指定陣列內容
AR(2) = B '指定陣列內容
End Sub
Sub check() '必須是按下方塊執行此程序
'AUTO_OPEN '如有錯誤 執行 AUTO_OPEN 一次
Dim K As String, M As Boolean, i As Integer
With Sh.Shapes(Application.Caller)
With .TextFrame
K = .Characters.Text
If Left(K, 1) = "n" Then
.Characters.Text = "o 未選取"
M = False
Else
.Characters.Text = "n 選取"
M = True
End If
.Characters(1, Len(K) + 1).Font.Size = 10
.Characters(1, 1).Font.Size = 18
End With
i = Application.Match(.Name, AR(1), 0) - 1 '取的方塊名稱在AR(1)的索引值
AR(2)(i).Value = M
AR(2)(i).Offset(, 1).Value = IIf(CSng(M) = 0, 0, 1)
End With
End Sub
複製代碼
作者:
kai6929
時間:
2012-10-12 12:39
感謝大師......
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)