Board logo

標題: [發問] 判斷checkbox為true之後將資料選取 [打印本頁]

作者: rick4615    時間: 2013-8-12 10:21     標題: 判斷checkbox為true之後將資料選取

小弟目前要將checkbox確定為true之資料欄進行選取   並定義為一個字串 以便之後進行檔案輸出用

Function 資料輸出test() '2013/08/12
    Dim CK As Object
    Dim HK As String
    For Each CK In ActiveSheet.OLEObjects
     If CK.Name Like "CheckBox*" & CK.Object.Value = True Then
   
現在卡在checkbox不知道如何與要選取的欄位做一個連結的動作

檔案格式大概如下

需要將連同listname連同item進行選取
               A                          B                     C
1         checkbox1    checkbox2    checkbox3

2         listname 1     listname 2    listname 3
3          item                 item                  item
4          item                 item                  item

求各位前輩幫忙解答~~~∼~
作者: rick4615    時間: 2013-8-12 10:35

QQ 補充一下
因之前新增checkbox之程式碼有點問題
checkbox並不會依照號碼遞增  會有跳號動作@@
作者: Hsieh    時間: 2013-8-12 11:19

回復 2# rick4615
[attach]15760[/attach]
  1. Sub 加入()
  2. With 工作表1
  3.   For i = 1 To 3
  4.   Set a = .Range("A1").Offset(, i)
  5.      With .OLEObjects.Add(ClassType:="Forms.CheckBox.1", Left:=.Cells(i, 1).Left, Top:=.Cells(i, 1).Top, Width:=100, Height:=20)
  6.      .LinkedCell = a.Address
  7.      .Object.Caption = i
  8.      End With
  9.   Next
  10. End With
  11. End Sub
  12. Sub 刪除()
  13. ActiveSheet.OLEObjects.Delete
  14. End Sub
  15. Sub 資料輸出()
  16. With 工作表1
  17. For i = 1 To .OLEObjects.Count
  18.    If .OLEObjects(i).Object.Value Then
  19.       Set a = Range(.OLEObjects(i).LinkedCell)
  20.       MsgBox a.Offset(1).Value & Chr(10) & a.Offset(2).Value & Chr(10) & a.Offset(3).Value
  21.     End If
  22. Next
  23. End With
  24. End Sub
複製代碼

作者: rick4615    時間: 2013-8-12 11:54

回復 3# Hsieh

Hsieh前輩您好 小弟看了您的程式碼之後有些不明白,可能需要您幫忙解答一下@@

Sub 刪除()
ActiveSheet.OLEObjects.Delete               <= 這裡是要刪除什麼QQ? 如果有其他的oleobjects 會不會刪除到別的呢?
End Sub

最後一段就完全不懂了@@

Sub 資料輸出()
With 工作表1
For i = 1 To .OLEObjects.Count
   If .OLEObjects(i).Object.Value Then
      Set a = Range(.OLEObjects(i).LinkedCell)
      MsgBox a.Offset(1).Value & Chr(10) & a.Offset(2).Value & Chr(10) & a.Offset(3).Value
    End If
Next
End With
End Sub
作者: GBKEE    時間: 2013-8-12 14:00

回復 4# rick4615
不了解就多看VBA的說明
  1. Sub 資料輸出()
  2. With 工作表1
  3. For i = 1 To .OLEObjects.Count          'Count 屬性 傳回集合中的物件數目。
  4.    If .OLEObjects(i).Object.Value Then '  它的Value是True 條件就成立
  5.       Set a = Range(.OLEObjects(i).LinkedCell)
  6.       MsgBox a.Offset(1).Value & Chr(10) & a.Offset(2).Value & Chr(10) & a.Offset(3).Value
  7.     End If
  8. Next
  9. End With
  10. End Sub
複製代碼

作者: Hsieh    時間: 2013-8-12 14:04

回復 4# rick4615
  1. Sub 加入()
  2. With 工作表1
  3.   For i = 1 To 3 '加入3個CheckBox
  4.   Set a = .Range("A1").Offset(, i)
  5.      With .OLEObjects.Add(ClassType:="Forms.CheckBox.1", Left:=.Cells(i, 1).Left, Top:=.Cells(i, 1).Top, Width:=100, Height:=20)
  6.      .LinkedCell = a.Address '指定連結儲存格
  7.      .Object.Caption = i
  8.      End With
  9.   Next
  10. End With
  11. End Sub
  12. Sub 刪除()
  13. Dim Ob As OLEObject
  14. For Each Ob In ActiveSheet.OLEObjects
  15.    If Ob.progID = "Forms.CheckBox.1" Then Ob.Delete '只刪除CheckBox
  16. Next
  17. End Sub
  18. Sub 資料輸出()
  19. With 工作表1
  20. For i = 1 To .OLEObjects.Count
  21. If .OLEObjects(i).progID = "Forms.CheckBox.1" Then
  22.    If .OLEObjects(i).Object.Value Then
  23.       Set a = Range(.OLEObjects(i).LinkedCell) '被勾選地的CheckBox連結儲存格
  24.       MsgBox a.Offset(1).Value & Chr(10) & a.Offset(2).Value & Chr(10) & a.Offset(3).Value '顯示被勾選的項目
  25.     End If
  26. End If
  27. Next
  28. End With
  29. End Sub
複製代碼

作者: rick4615    時間: 2013-8-12 15:53

回復 5# GBKEE


    收到!  只是常常分開我還能大概董 合在一起就不知道怎解了
作者: rick4615    時間: 2013-8-12 16:06

回復 6# Hsieh

請問前輩 如何要讓他自動增加offset項目呢??
因為資料比數可能是會變動的 如果寫這樣是不是會無法得到所有資料呢@@?
作者: Hsieh    時間: 2013-8-12 16:24

回復 8# rick4615
  1. Sub 資料輸出()
  2. With 工作表1
  3. For i = 1 To .OLEObjects.Count
  4. If .OLEObjects(i).progID = "Forms.CheckBox.1" Then
  5.    If .OLEObjects(i).Object.Value Then
  6.       Set a = .Range(.OLEObjects(i).LinkedCell) '被勾選地的CheckBox連結儲存格
  7.       MsgBox Join(Application.Transpose(.Range(a.Offset(1), a.End(xlDown))), Chr(10)) '顯示被勾選的項目
  8.    End If
  9. End If
  10. Next
  11. End With
  12. End Sub
複製代碼

作者: rick4615    時間: 2013-8-12 17:39

回復 9# Hsieh


   我試著用前輩的方法改我的程式碼  不過一直行不通
可以麻煩幫我看看問題出在哪嗎@@?
這是新增的部分
For i = 0 To ListCount - 1
      Set a = Range("A3").Offset(, i)
        OLEObjects.Add(ClassType:="Forms.CheckBox.1", _
        DisplayAsIcon:=False, Link:=False, Left:=0 + 93.5 * i, Top:=126, Width:=90, Height:=22.5) _
        .Object.Caption = listname(i) _
        .LinkedCell = a.Address
     Next i
   
他會一直出現  " 不正確的定位項(qualifier) "
作者: Hsieh    時間: 2013-8-12 23:10

回復 10# rick4615
  1. Sub ex()
  2. Dim Sht As Worksheet
  3. Set Sht = 工作表1
  4.    With Sht.OLEObjects("ListBox1").Object '清單方塊
  5.       For i = 0 To .ListCount - 1 '清單
  6.       MyList = .List(i)
  7.          With Sht.OLEObjects.Add(ClassType:="Forms.CheckBox.1", _
  8.               DisplayAsIcon:=False, Link:=False, Left:=0 + 93.5 * i, Top:=126, Width:=90, Height:=22.5)
  9.               .Object.Caption = MyList '以清單為CheckBox標題
  10.          End With
  11.       Next
  12.     End With
  13. End Sub
複製代碼

作者: rick4615    時間: 2013-8-13 13:55

回復 11# Hsieh


    了解! 感謝您的解答:) :)




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