Đố vui: Tôi đã sử dụng Controls gì?

Liên hệ QC

Hoàng Trọng Nghĩa

Chuyên gia GPE
Thành viên BQT
Moderator
Tham gia
17/8/08
Bài viết
8,649
Được thích
16,707
Giới tính
Nam
Để giải trí cuối tuần, tôi đố các bạn, trong video đưới đây, tôi đã sử dụng Controls gì cho cái list trên form?

(Vui lòng chờ cho đến khi nó up file lên xong nhé!).

[video=youtube_share;RWweQD-YBDM]http://youtu.be/RWweQD-YBDM 5%[/video]
 
Sao Thầy tô màu được trên cái tiêu đề được hay vậy? Độc đáo thật!

Đúng là từ bài này mà có nhiều sáng tạo quá!

Dùng API thôi. Thằng nào có window handle là "nắm cổ" được hết. Hên thằng ListView này có (ListView1.hWnd)
Công việc gần giống với thay đổi màu Text trên thanh tiêu đề nào đó (UserForm hoặc Excel)
Ẹc... Ẹc...
--------------------------
Cho em hỏi 1 chút, em vào Tool/Additional Controls ... nhưng tại sao không và được bảng Additional Controls?
Thì xem bài này:
http://www.giaiphapexcel.com/forum/...t-tình-trạng-Additional-Controls-mất-tác-dụng
 
Upvote 0
Dùng API thôi. Thằng nào có window handle là "nắm cổ" được hết. Hên thằng ListView này có (ListView1.hWnd)
Công việc gần giống với thay đổi màu Text trên thanh tiêu đề nào đó (UserForm hoặc Excel)
Ẹc... Ẹc...
--------------------------

Thì xem bài này:
http://www.giaiphapexcel.com/forum/showthread.php?32295-Tin-HOT-%C4%91%E1%BA%A7u-n%C4%83m-Gi%E1%BA%A3i-quy%E1%BA%BFt-t%C3%ACnh-tr%E1%BA%A1ng-Additional-Controls-m%E1%BA%A5t-t%C3%A1c-d%E1%BB%A5ng
Link đã tải không được Thầy ơi, không biết có phải Ad kỹ thuật đang sửa cái box này hay không nữa.
 
Upvote 0
Có thể máy em có vấn đề về tải tập tin .rar từ diễn đàn. (Xin lỗi vì đã lạc đề trong topic này).
Mới bị sáng này, đối với các tập tin khác .rar thì tải được, không biết có ai gặp trường hợp này không xin hướng dẫn dùm.
Đã thiết lập đuôi mở rộng trong IDM, bỏ proxy trong mạng Lan, đã thử các trình duyệt Explorer, Co rom, Chrome.
 
Upvote 0
Có thể máy em có vấn đề về tải tập tin .rar từ diễn đàn. (Xin lỗi vì đã lạc đề trong topic này).
Mới bị sáng này, đối với các tập tin khác .rar thì tải được, không biết có ai gặp trường hợp này không xin hướng dẫn dùm.
Đã thiết lập đuôi mở rộng trong IDM, bỏ proxy trong mạng Lan, đã thử các trình duyệt Explorer, Co rom, Chrome.

Thì đừng download bằng IDM ---> Down bằng chính trình duyệt đi
 
Upvote 0
Có phải vsflex không anh?
 
Upvote 0
Cho em hỏi 1 chút, em vào Tool/Additional Controls ... nhưng tại sao không và được bảng Additional Controls?
Làm theo hướng dẫn tại đây chưa?:
http://office.microsoft.com/en-us/h...controls-in-office-documents-HA010031067.aspx

Dùng API thôi. Thằng nào có window handle là "nắm cổ" được hết. Hên thằng ListView này có (ListView1.hWnd)
Công việc gần giống với thay đổi màu Text trên thanh tiêu đề nào đó (UserForm hoặc Excel)
Ẹc... Ẹc...
Cho mình xem file với!
 
Lần chỉnh sửa cuối:
Upvote 0
Dùng API thôi. Thằng nào có window handle là "nắm cổ" được hết. Hên thằng ListView này có (ListView1.hWnd)
Công việc gần giống với thay đổi màu Text trên thanh tiêu đề nào đó (UserForm hoặc Excel)
Ẹc... Ẹc...
--------------------------


Từ lúc em xài thằng 2013 rồi hạ xuống 2010 bị thằng em ListView nó "hành hạ" khổ sở giữa máy cơ quan xài thằng 2003 rồi em xài thằng 2010, lưu qua lưu lại bị lỗi như bài này đã nói:

Chính vì các Control 6.0 rất "cà giựt", với file Excel 2003 lưu có ListView chẳng hạn, rồi sau đó sử dụng file đó trên Excel 2010 và lưu lại, sau đó dùng file đó sử dụng lại trên Excel 2003 thì bị lỗi không sử dụng được ListView, vã lại, các controls loại này thường không sử dụng được với Unicode Tiếng Việt, và còn phải tải về và cài đặt nữa chứ, nên tôi phải dùng các controls khác để thực hiện mà không bị "cà giựt" như thế nữa!

Cho nên em đã không còn hứng thú với cái ListView nói riêng và các controls 6.0 nói chung nữa!

Và vì thế em đã "chế" ra cái List mới từ 3 loại controls: FRAME, LABEL & LISTBOX. Để thực hiện chúng, em để ý từng cách chúng hoạt động và lợi dụng những sự kiện của chúng, em đã dùng tiểu xảo và dùng code để chạy sự kiện, như thế, chúng chạy rất mượt mà!

Như thế, thứ nhất nó có TIÊU ĐỀ nhờ các LABEL, thứ hai các tiêu đề nó trượt dài trên FRAME và chạy theo SCROLL ngang, và đương nhiên với LISTBOX, ta có thể dễ dàng nạp cho nó bằng LIST (ARRAY) hoặc ROWSOURCE (RANGE); hơn nữa nó không kén UNICODE!
 
Upvote 0
Tạo một cái FORM thủ công thì OK rồi, giờ tôi muốn thực hiện bằng code cho nhanh, nhưng bị vướng 1 vấn đề, nhờ các cao thủ giúp tôi.

Tôi muốn tạo một form với 1 frame, một listbox và một số label bên trong frame, cái vướng của tôi là tạo chúng quá dễ, nhưng làm sao mà tạo được các label và cái listbox nó nằm bên trong cái frame thì chẳng biết phải làm thế nào.

Code như thế này:

Mã:
Sub CreateNewUserForm()
    On Error Resume Next
    Dim UsfName As String
    UsfName = "Nghia1"
    With ThisWorkbook.VBProject
        If .VBComponents(UsfName) Is Nothing Then
            .VBComponents.Add(vbext_ct_MSForm).Name = UsfName
            With .VBComponents(UsfName)
                With .Designer.Controls.Add("Forms.Frame.1", "FrameList")
                    .SpecialEffect = fmSpecialEffectSunken
                End With
''                With .Designer.Controls.Add("Forms.Label.1", "ColHeader")
''                    .Caption = "Nghia"
''                    .SpecialEffect = fmSpecialEffectRaised
''                    .Top = 0
''                    .Left = 0
''                End With
            End With
        Else
            MsgBox "Trùng tên! Ban phai dat ten khac cho UserForm."
        End If
    End With
End Sub

Giúp tôi thực hiện vấn đề này nhé các bạn.
 
Upvote 0
tạo một cái form thủ công thì ok rồi, giờ tôi muốn thực hiện bằng code cho nhanh, nhưng bị vướng 1 vấn đề, nhờ các cao thủ giúp tôi.

Tôi muốn tạo một form với 1 frame, một listbox và một số label bên trong frame, cái vướng của tôi là tạo chúng quá dễ, nhưng làm sao mà tạo được các label và cái listbox nó nằm bên trong cái frame thì chẳng biết phải làm thế nào.

Code như thế này:

Mã:
sub createnewuserform()
    on error resume next
    dim usfname as string
    usfname = "nghia1"
    with thisworkbook.vbproject
        if .vbcomponents(usfname) is nothing then
            .vbcomponents.add(vbext_ct_msform).name = usfname
            with .vbcomponents(usfname)
                with .designer.controls.add("forms.frame.1", "framelist")
                    .specialeffect = fmspecialeffectsunken
                end with
''                with .designer.controls.add("forms.label.1", "colheader")
''                    .caption = "nghia"
''                    .specialeffect = fmspecialeffectraised
''                    .top = 0
''                    .left = 0
''                end with
            end with
        else
            msgbox "trùng tên! Ban phai dat ten khac cho userform."
        end if
    end with
end sub

giúp tôi thực hiện vấn đề này nhé các bạn.
vậy là cái mới vẫn hay hơn cái cũ đúng không anh htn ?
 
Upvote 0
vậy là cái mới vẫn hay hơn cái cũ đúng không anh htn ?

Trời, lạy à! Cũng là Control 6.0 mà thằng em 2003 xài xong chẳng lỗi nào, qua 2010 xài tiếp, lưu lại, chuyển lại mở qua 2003 thì báo lỗi. Lạ lùng chưa?

Cho nên mình cứ vận dụng những gì Excel tích hợp sẳn mà làm thôi cho chắc ăn!
 
Upvote 0
Cuối cùng nhiều người đa ra giống cái tác giả mà tác giả vẫn chưa đưa ra đáp án thì có thể quy về các tội như sau:
1. Mình không biết dùng Control gì đưa ra đố để biết
2. Muốn hỏi có những control nào làm được như thế nhưng lại ngại hỏi đàng đưa ra câu đố
Chiếu theo tội trên, tác giả tự tra để biết mức án nhé
ẹc ẹc.. nói vui thôi nhé
Thân.
 
Upvote 0
Tạo một cái FORM thủ công thì OK rồi, giờ tôi muốn thực hiện bằng code cho nhanh, nhưng bị vướng 1 vấn đề, nhờ các cao thủ giúp tôi.

Tôi muốn tạo một form với 1 frame, một listbox và một số label bên trong frame, cái vướng của tôi là tạo chúng quá dễ, nhưng làm sao mà tạo được các label và cái listbox nó nằm bên trong cái frame thì chẳng biết phải làm thế nào.

Code như thế này:

Mã:
Sub CreateNewUserForm()
    On Error Resume Next
    Dim UsfName As String
    UsfName = "Nghia1"
    With ThisWorkbook.VBProject
        If .VBComponents(UsfName) Is Nothing Then
            .VBComponents.Add(vbext_ct_MSForm).Name = UsfName
            With .VBComponents(UsfName)
                With .Designer.Controls.Add("Forms.Frame.1", "FrameList")
                    .SpecialEffect = fmSpecialEffectSunken
                End With
''                With .Designer.Controls.Add("Forms.Label.1", "ColHeader")
''                    .Caption = "Nghia"
''                    .SpecialEffect = fmSpecialEffectRaised
''                    .Top = 0
''                    .Left = 0
''                End With
            End With
        Else
            MsgBox "Trùng tên! Ban phai dat ten khac cho UserForm."
        End If
    End With
End Sub

Giúp tôi thực hiện vấn đề này nhé các bạn.

Máy tự động hả? Thử xem

Mã:
Sub CreateNewUserForm()
'    On Error Resume Next
Dim UsfName As String, frame As Object
Dim form As Object
    UsfName = "Nghia1"
    Set form = ThisWorkbook.VBProject.VBComponents.Add(vbext_ct_MSForm)
    If Not form Is Nothing Then
        form.name = UsfName
        With form.Designer.Add("Forms.Frame.1", "FrameList")
            .Left = 20
            .Top = 20
            .SpecialEffect = fmSpecialEffectSunken
            With .Controls.Add("Forms.Label.1", "ColHeader")
                .Caption = "Nghia"
                .Left = 0
                .Top = 0
                .SpecialEffect = fmSpecialEffectRaised
            End With
        End With
    End If
End Sub
 
Upvote 0
Cuối cùng nhiều người đa ra giống cái tác giả mà tác giả vẫn chưa đưa ra đáp án thì có thể quy về các tội như sau:
1. Mình không biết dùng Control gì đưa ra đố để biết
2. Muốn hỏi có những control nào làm được như thế nhưng lại ngại hỏi đàng đưa ra câu đố
Chiếu theo tội trên, tác giả tự tra để biết mức án nhé
ẹc ẹc.. nói vui thôi nhé
Thân.


Xin thưa với anh là cái tôi hỏi ở bài #29 là mới phát sinh thôi nhé, còn chuyện tôi "chế" ra cái controls kết hợp với 3 controls Frame, Label & ListBox hình ảnh, cũng như video đã nói lên tất cả rồi nhé!

Bài #28 cũng đã nói rõ rồi mà ta:

Và vì thế em đã "chế" ra cái List mới từ 3 loại controls: FRAME, LABEL & LISTBOX. Để thực hiện chúng, em để ý từng cách chúng hoạt động và lợi dụng những sự kiện của chúng, em đã dùng tiểu xảo và dùng code để chạy sự kiện, như thế, chúng chạy rất mượt mà!

Tôi hỏi như thế là bị vướng đúng chỗ đó, nếu không tôi đã gửi bộ "công cụ" tạo List mới lên sẽ nhanh hơn viết code cho thằng ListView đấy nhé!
 
Lần chỉnh sửa cuối:
Upvote 0
Máy tự động hả? Thử xem

Mã:
Sub CreateNewUserForm()
'    On Error Resume Next
Dim UsfName As String, frame As Object
Dim form As Object
    UsfName = "Nghia1"
    Set form = ThisWorkbook.VBProject.VBComponents.Add(vbext_ct_MSForm)
    If Not form Is Nothing Then
        form.name = UsfName
        With form.Designer.Add("Forms.Frame.1", "FrameList")
            .Left = 20
            .Top = 20
            .SpecialEffect = fmSpecialEffectSunken
            With .Controls.Add("Forms.Label.1", "ColHeader")
                .Caption = "Nghia"
                .Left = 0
                .Top = 0
                .SpecialEffect = fmSpecialEffectRaised
            End With
        End With
    End If
End Sub


OH, cám ơn Thầy rất nhiều! Em thề có trời làm chứng là hồi chiều em cũng đã làm như Thầy mà nó lại bị lỗi liên tục, cho nên em mới đưa bài lên hỏi. Hay tại em không Set nhỉ? Nhưng như thế cũng không đúng, Set hay With đều ổn mà ta? Mà rất lạ là đưa code Thầy vào thì chạy được!!!

Cám ơn Thầy.
 
Upvote 0
OH, cám ơn Thầy rất nhiều! Em thề có trời làm chứng là hồi chiều em cũng đã làm như Thầy mà nó lại bị lỗi liên tục, cho nên em mới đưa bài lên hỏi. Hay tại em không Set nhỉ? Nhưng như thế cũng không đúng, Set hay With đều ổn mà ta? Mà rất lạ là đưa code Thầy vào thì chạy được!!!

Cám ơn Thầy.

"Cũng đã làm như" tôi? Tức cụ thể thế nào?

Bạn có

Mã:
With [B][COLOR=#ff0000].Designer[/COLOR][/B].Controls.Add("Forms.Label.1", "ColHeader")

Tôi có

Mã:
With .Controls.Add("Forms.Label.1", "ColHeader")

Cái chuyện "Set form =" là chuyện phụ. Nếu trong code của tôi bạn sửa

Mã:
With .Controls.Add("Forms.Label.1", "ColHeader")

thành

Mã:
With [B][COLOR=#ff0000].Designer[/COLOR][/B].Controls.Add("Forms.Label.1", "ColHeader")

thì bạn sẽ thấy sai. Bạn "tắt" On Error Resume Next đi thì bạn mới biết những chỗ sai trong code.

Mà tôi nghĩ là nếu code có nhiều "With ... End With" lồng nhau thì code sẽ rất "tối", đọc rất mệt và khi cần tìm lỗi trong một đoạn code dài sẽ rất mất thời gian.
 
Upvote 0
"Cũng đã làm như" tôi? Tức cụ thể thế nào?

Bạn có

Mã:
With [B][COLOR=#ff0000].Designer[/COLOR][/B].Controls.Add("Forms.Label.1", "ColHeader")

Tôi có

Mã:
With .Controls.Add("Forms.Label.1", "ColHeader")

Cái chuyện "Set form =" là chuyện phụ. Nếu trong code của tôi bạn sửa

Mã:
With .Controls.Add("Forms.Label.1", "ColHeader")

thành

Mã:
With [B][COLOR=#ff0000].Designer[/COLOR][/B].Controls.Add("Forms.Label.1", "ColHeader")

thì bạn sẽ thấy sai. Bạn "tắt" On Error Resume Next đi thì bạn mới biết những chỗ sai trong code.

Mà tôi nghĩ là nếu code có nhiều "With ... End With" lồng nhau thì code sẽ rất "tối", đọc rất mệt và khi cần tìm lỗi trong một đoạn code dài sẽ rất mất thời gian.

Rồi, em đã thấy lỗi rồi! Do em nhìn chưa kỹ! Đúng là cái chỗ màu đỏ Thầy nói! Hèn gì làm tới làm lui mà bị lỗi!
 
Upvote 0
Trời, lạy à! Cũng là Control 6.0 mà thằng em 2003 xài xong chẳng lỗi nào, qua 2010 xài tiếp, lưu lại, chuyển lại mở qua 2003 thì báo lỗi. Lạ lùng chưa?

Cho nên mình cứ vận dụng những gì Excel tích hợp sẳn mà làm thôi cho chắc ăn!

Thích màu mè thì ráng chịu thôi
Tôi thì khác, nghiên cứu chơi để xem như "mình cũng biết" chứ chả mấy đời xài! Với tôi: ĐUA XE TỐC ĐỘ + AN TOÀN VỀ NHÀ mới là thứ quan trọng nhất
Lúc trước cũng chính chú mày là người khen Listview hết lời, giờ "ngán" rồi sao?
Ẹc... Ẹc...
 
Upvote 0
Thích màu mè thì ráng chịu thôi
Tôi thì khác, nghiên cứu chơi để xem như "mình cũng biết" chứ chả mấy đời xài! Với tôi: ĐUA XE TỐC ĐỘ + AN TOÀN VỀ NHÀ mới là thứ quan trọng nhất
Lúc trước cũng chính chú mày là người khen Listview hết lời, giờ "ngán" rồi sao?
Ẹc... Ẹc...

Ngán thì em chả ngán, chỉ có điều máy em được chú LDT trang bị Win & Off cao cấp quá mà máy ở CQ lại tệ quá, thậm chí Office 2000 vẫn còn dùng, nên em muốn nghiên cứu cái gì đó cho nó "hòa đồng dân tộc" mà thôi Thầy ơi!

Nếu máy nào cũng đồng bộ thì chả ngán thằng tây nào hết á!
 
Lần chỉnh sửa cuối:
Upvote 0
Xin thưa với anh là cái tôi hỏi ở bài #29 là mới phát sinh thôi nhé, còn chuyện tôi "chế" ra cái controls kết hợp với 3 controls Frame, Label & ListBox hình ảnh, cũng như video đã nói lên tất cả rồi nhé!

Bài #28 cũng đã nói rõ rồi mà ta:



Tôi hỏi như thế là bị vướng đúng chỗ đó, nếu không tôi đã gửi bộ "công cụ" tạo List mới lên sẽ nhanh hơn viết code cho thằng ListView đấy nhé!

Vậy là em cũng đã trả lời được 1/3 câu hỏi của anh rồi. Vì mới vào gia đình GPE nên để làm như của anh thì hơi khó. Em còn phải học hỏi các anh, chị và các thầy rất nhiều. Mong mọi người (cười) khi hướng dẫn giúp em, em sẽ cố gắng tìm hiểu để hỏi những câu ra "trò" và đầy ngớ ngẩn, thì mọi người cũng đừng khó chịu nhé. Hì hì...
 
Upvote 0
Web KT
Back
Top Bottom