Tự tạo checkbox bằng lệnh (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

vippro1610

Thành viên mới
Tham gia
8/12/14
Bài viết
4
Được thích
0
Hi Anh Em
Hiện tại mình muốn tạo 1 VBA cho excel.
1 file excel gồm nhiều sheet (Mỗi sheet là thông tin của 1 model máy). Mình muốn tạo 1 form mà khi load form đó lên thì nó sẽ list hết tất cả model máy ra thành từng checkbox để người dùng có thể tick chọn các model mình cần để thao tác. Khi mình tạo thêm 1 sheet mới thì checkbox sẽ tự động tăng thêm 1 cái nữa.
Mình không biết như vậy có làm được không, ai giúp mình giải thuật với
 
Hi Anh Em
Hiện tại mình muốn tạo 1 VBA cho excel.
1 file excel gồm nhiều sheet (Mỗi sheet là thông tin của 1 model máy). Mình muốn tạo 1 form mà khi load form đó lên thì nó sẽ list hết tất cả model máy ra thành từng checkbox để người dùng có thể tick chọn các model mình cần để thao tác. Khi mình tạo thêm 1 sheet mới thì checkbox sẽ tự động tăng thêm 1 cái nữa.
Mình không biết như vậy có làm được không, ai giúp mình giải thuật với

Theo mô tả thì có vẻ như bạn cần 1 form mà trong đó có CheckBox (hoặc cái gì đó) để khi bạn click vào thì nó sẽ liên kết đến sheet bạn cần, đúng không?
Nhưng dù là gì đi chăng thì điều trước tiên bạn cần làm là: Cho file lên đây + mô tả chi tiết bên trong file
Vậy đi nha
 
Upvote 0
Hi Anh Em
Hiện tại mình muốn tạo 1 VBA cho excel.
1 file excel gồm nhiều sheet (Mỗi sheet là thông tin của 1 model máy). Mình muốn tạo 1 form mà khi load form đó lên thì nó sẽ list hết tất cả model máy ra thành từng checkbox để người dùng có thể tick chọn các model mình cần để thao tác. Khi mình tạo thêm 1 sheet mới thì checkbox sẽ tự động tăng thêm 1 cái nữa.
Mình không biết như vậy có làm được không, ai giúp mình giải thuật với
Vọc chơi với bạn vài thủ tục tự động tạo UserForm, Module đây:

Mã:
Public regKey As String
''**************************************************************************


Sub cmdCreateNewForm()
    On Error Resume Next
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    Application.Calculation = xlCalculationManual
    
    Dim sheetcount As Long
    Dim usform As Object, clsModule As Object
    Dim c As Integer, r As Integer, iLeft As Integer, iTop As Integer
    
    sheetcount = ThisWorkbook.Worksheets.Count
    
    Dim MyObj
    Set usform = ThisWorkbook.VBProject.VBComponents("usfSheetSelect")
    ThisWorkbook.VBProject.VBComponents.Remove usform
    
    With ThisWorkbook.VBProject.VBComponents.Add(vbext_ct_MSForm)
        .Properties("Height") = 340
        .Properties("Width") = 520
        .Properties("Caption") = "USERFORM WITH SHEET OPTION"
        .CodeModule.InsertLines 2, AddCodeInForm
        For r = 1 To sheetcount
            iTop = Fix(c / 5): iLeft = (c Mod 5)
            With .Designer.Add("Forms.OptionButton.1", "Opt" & ThisWorkbook.Worksheets(r).Name)
                .Top = 6 + 24 * iTop
                .Left = 6 + 102 * iLeft
                .Height = 18
                .Width = 96
                .BackColor = &HFFFF80
                .Caption = ThisWorkbook.Worksheets(r).Name
            End With
            c = c + 1
        Next
        .Properties("Name") = "usfSheetSelect"
    End With
    
    Set clsModule = ThisWorkbook.VBProject.VBComponents("clsControl")
    ThisWorkbook.VBProject.VBComponents.Remove clsModule
    With ThisWorkbook.VBProject.VBComponents.Add(vbext_ct_ClassModule)
        .CodeModule.InsertLines 2, AddCodeInClass
        .Properties("Name") = "clsControl"
    End With
        
    Set clsModule = Nothing
    Set usform = Nothing
    ThisWorkbook.Save
    
    Application.Calculation = xlCalculationAutomatic
    Application.EnableEvents = True
    Application.ScreenUpdating = True
End Sub


Function AddCodeInForm() As String
    AddCodeInForm = _
    "Private optArr(1 to " & ThisWorkbook.Worksheets.Count & ") As New clsControl" & vbLf & vbLf & _
    "Private Sub UserForm_Initialize()" & vbLf & _
    "    Dim i As Byte" & vbLf & _
    "    Dim opt As MSForms.OptionButton" & vbLf & _
    "    For Each opt In Me.Controls" & vbLf & _
    "        If TypeName(opt) = " & """OptionButton""" & " Then" & vbLf & _
    "            i = i + 1" & vbLf & _
    "            Set optArr(i).OptBttn = opt" & vbLf & _
    "        End If" & vbLf & _
    "    Next" & vbLf & _
    "End Sub"
End Function


Function AddCodeInClass() As String
    AddCodeInClass = _
    "Public WithEvents OptBttn As MSForms.OptionButton" & vbLf & vbLf & _
    "Private Sub OptBttn_Change()" & vbLf & _
    "    If OptBttn.Value Then" & vbLf & _
    "        Sheets(OptBttn.Caption).Select" & vbLf & _
    "        Unload usfSheetSelect" & vbLf & _
    "    End If" & vbLf & _
    "End Sub"
End Function
 

File đính kèm

Upvote 0
Upvote 0
- Lần đầu bấm nút, nó quay quay 1 hồi rồi nó tạo ra thêm 1 cái nút khác
- Bấm lần thứ 2: không có gì xảy ra sau khi quay quay
- Bấm cái nút mới vừa được tạo thêm: UserForm mới xuất hiện
Xem video là thấy chứ gì
Thì em tạo sẳn nút lệnh đó mà, sau khi bấm nút tạo form thì mới hiện lên nút kia, bấm nút thứ 2 nó mới show form. Chưa có form được tạo thì nút đó chưa được sử dụng nên để chế độ ẩn đó mà Thầy.
 
Upvote 0
Thì em tạo sẳn nút lệnh đó mà, sau khi bấm nút tạo form thì mới hiện lên nút kia, bấm nút thứ 2 nó mới show form. Chưa có form được tạo thì nút đó chưa được sử dụng nên để chế độ ẩn đó mà Thầy.

Gì kỳ vậy? Bấm cái mở form xài luôn chứ (tức tạo xong mở luôn)
 
Upvote 0
Gì kỳ vậy? Bấm cái mở form xài luôn chứ (tức tạo xong mở luôn)
Rồi khi người ta thoát form xong thì lấy nút nào gọi lại hả Thầy, em là em làm vậy đó mà! Hỏng lẽ mỗi lần gọi form là phải tạo lại form sao? Trừ khi người dùng thêm sheet thì tạo tiếp.
 
Upvote 0
Rồi khi người ta thoát form xong thì lấy nút nào gọi lại hả Thầy, em là em làm vậy đó mà! Hỏng lẽ mỗi lần gọi form là phải tạo lại form sao? Trừ khi người dùng thêm sheet thì tạo tiếp.

Uh! Vậy đấy! Mỗi lần gọi code thì mỗi lần tạo rồi mở luôn. Thoát form đồng thời xóa tất những thứ đã tạo
Mà hình như code của Nghĩa hơi chậm trong quá trình tạo Form thì phải (nhớ lúc trước có làm vụ này cũng khá nhanh mà)
 
Upvote 0
Uh! Vậy đấy! Mỗi lần gọi code thì mỗi lần tạo rồi mở luôn. Thoát form đồng thời xóa tất những thứ đã tạo
Mà hình như code của Nghĩa hơi chậm trong quá trình tạo Form thì phải (nhớ lúc trước có làm vụ này cũng khá nhanh mà)
Tại em Save nó lại đó mà. Kiểu là nếu không thay đổi thì cứ để đó không xóa. Chứ chọn 1 sheet là xóa thì uổng đạn quá!
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom