Dùng code nào để vẽ 1 CommandButton lên bảng tính

Liên hệ QC

ndu96081631

Huyền thoại GPE
Thành viên BQT
Super Moderator
Tham gia
5/6/08
Bài viết
30,703
Được thích
53,952
Có câu hỏi hơi... ngố nhờ mọi người giúp đở: Dùng code nào để vẽ 1 CommandButton lên bảng tính?
Tức là thay vì làm bằng tay bằng cách chọn CommandButton trên thanh Control Toolbox rồi vẽ lên bảng tính, tôi muốn 1 code nào đó tự động làm công việc này (gọi macro là lập tức 1 CommandButton được tạo)
Có vẽ đơn giản nhưng tôi làm không được nên nhờ mọi người trợ giúp
Cảm ơn!
 
Sư phụ mà còn làm không được, vậy ai làm được, làm đại chơi thôi, không phải thì thôi nha. Nữa muốn gữi lên nữa muốn không. Hic,Hic
 
Upvote 0
Sư phụ mà còn làm không được, vậy ai làm được, làm đại chơi thôi, không phải thì thôi nha. Nữa muốn gữi lên nữa muốn không. Hic,Hic
Có phải thứ gì tôi cũng biết đâu... Chuyện thường
Ẹc... Ẹc...
Giờ thí nghiệm vầy nha
- Bạn dùng code của bạn tạo 1 CommandButton
- Tạo 1 CommandButton khác bằng cách tự tay vẽ lấy
- Click phải lên 2 cái CommandButon này xem có gì khác biệt? Cái mà bạn tạo ra bằng code nó hổng có thằng "Properties"... Ẹc... Ẹc...
Thử hỏi: Nếu tôi vẽ vài chục cái CommandButton và tôi lười, muốn dùng code tạo ra mà bị mất cái Properties thì làm sao xài đây?
 
Upvote 0
Hic, Hic, trước khi gữi bài lên, biết thế nào cũng có cái gì đó sư phụ mới hỏi. làm chơi vậy mà. Cái này chắc không được. Hehehehe.
 
Upvote 0
Hic, Hic, trước khi gữi bài lên, biết thế nào cũng có cái gì đó sư phụ mới hỏi. làm chơi vậy mà. Cái này chắc không được. Hehehehe.
Không sao cả. Cho dù thế nào thì tôi cũng cảm ơn sự trợ giúp của tất cả mọi người mà
Không biết thì hỏi, biết đâu ai đó có ý tưởng hay mà tôi chưa biết
(Oải vụ này cả ngày nay rồi)
 
Upvote 0
Không sao cả. Cho dù thế nào thì tôi cũng cảm ơn sự trợ giúp của tất cả mọi người mà
Không biết thì hỏi, biết đâu ai đó có ý tưởng hay mà tôi chưa biết
(Oải vụ này cả ngày nay rồi)

Bật Properties lên vẫn có liệt kê button đó để điều chỉnh mà.
 
Upvote 0
Bật Properties lên vẫn có liệt kê button đó để điều chỉnh mà.
Điều chỉnh cái gì chứ? Mà nó cũng có mục Properties gì đâu mà chỉnh với chả sửa
Ví dụ sau khi tạo CommandButton xong, tôi muốn tô màu xanh cho nó thì làm thế nào đây?
Nếu bạn biết thì vui lòng hướng dẫn rõ ràng 1 chút. Cảm ơn!
 
Upvote 0
Propeties có cái gì thì điều chỉnh cái đó nếu thích. Nó có Properties thì mới nói ở bài trên chứ không có thì nói làm gì.

Properties bật ở Control Toolbox.
 
Upvote 0
Nó có Properties đầy đủ đấy, giờ Ndu làm thế mày xem nha

Ndu chọn CommandButton1 là nút Ndu vẽ tay, nhấn chuột phải mở Dialog Properties. Giờ Ndu để nguyên Dialog chọn CommandButton2 vẽ bằng Code xem sao? Nó vẫn có đầy đủ như thường. Vậy là lỗi ở đây là lỗi của Menu chuột phải không nhận đúng đối tượng mà thôi.

Mình thử như sau vấn được:

Mã:
Private Sub CommandButton1_Click()
CommandButton2.Caption = "Sealand"
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Có phải thứ gì tôi cũng biết đâu... Chuyện thường
Ẹc... Ẹc...
Giờ thí nghiệm vầy nha
- Bạn dùng code của bạn tạo 1 CommandButton
- Tạo 1 CommandButton khác bằng cách tự tay vẽ lấy
- Click phải lên 2 cái CommandButon này xem có gì khác biệt? Cái mà bạn tạo ra bằng code nó hổng có thằng "Properties"... Ẹc... Ẹc...
Thử hỏi: Nếu tôi vẽ vài chục cái CommandButton và tôi lười, muốn dùng code tạo ra mà bị mất cái Properties thì làm sao xài đây?

Có phải thế này không Ndu ? Cấm không được xem code nha.
Lưu ý: Muốn CommandButton xuất hiện ở đâu thì đặt con trỏ vào đó trước khi chạy code.
 

File đính kèm

Upvote 0
Em tạo thử 10 cái luôn xem sao:

Mã:
Sub cmdNdu()
Dim i As Long
Dim cmd As OLEObject

For i = 1 To 10
   With ActiveSheet.Cells(i + 1, 1)
       Set cmd = ActiveSheet.OLEObjects.Add(ClassType:="forms.CommandButton.1", _
         Left:=.Left, Top:=.Top, Width:=.Width, Height:=.Height)
       cmd.Name = "cmdNdu" & i
      
   End With
Next i

End Sub
 
Upvote 0
Nó có Properties đầy đủ đấy, giờ Ndu làm thế mày xem nha

Ndu chọn CommandButton1 là nút Ndu vẽ tay, nhấn chuột phải mở Dialog Properties. Giờ Ndu để nguyên Dialog chọn CommandButton2 vẽ bằng Code xem sao? Nó vẫn có đầy đủ như thường. Vậy là lỗi ở đây là lỗi của Menu chuột phải không nhận đúng đối tượng mà thôi.

Mình thử như sau vấn được:

Mã:
Private Sub CommandButton1_Click()
CommandButton2.Caption = "Sealand"
End Sub
Thật ra ý em không phải vậy! Em muốn dùng code để điều khiển được cái CommandButton do em tạo ra (cũng bằng code). Chỉ vậy thôi
Ngoài ra, với cái CommandButton vừa vẽ bằng code ấy, anh click phải chuột, chọn Grouping\Ungroup xem ---> Rất quái dị
-----------------------------------
Có phải thế này không Ndu ? Cấm không được xem code nha.
Lưu ý: Muốn CommandButton xuất hiện ở đâu thì đặt con trỏ vào đó trước khi chạy code.
Em đã nghĩ đến hướng này nếu cuối cùng không có cách nào khác. Nhưng... may mà ráng "vọc", cuối cùng cũng đã "làm chủ" được mọi thứ với cái CommandButton kỳ cục vừa vẽ ra... Ẹc... Ẹc...
Mời xem code:
1> Code trong Module:
PHP:
Dim obj() As New Class1
Sub CreateCmd()
  Dim Clls As Range, i As Long
  Application.ScreenUpdating = False
  For Each Clls In Selection
    i = i + 1
    With Clls.Parent.OLEObjects.Add("Forms.CommandButton.1")
      .Left = Clls.Left: .Top = Clls.Top
      .Width = Clls.Width: .Height = Clls.Height
      .Object.BackColor = &HFF0000
      .Object.Caption = "Ngày: " & Format(Now, "dd/mm/yyyy") & vbLf & _
                        "Tên: Máy " & i
      .Object.Font.Size = 0: .Object.Font.Bold = True
      .Object.ForeColor = &HFFFFFF
      .Name = "Cmd_" & Clls.Address(0, 0)
      .Parent.Shapes(.Name).AlternativeText = .Width & "-" & .Height
      .Parent.Shapes(.Name).ZOrder 1
    End With
  Next
  Application.ScreenUpdating = True
End Sub
PHP:
Sub Auto_Open()
  Dim Ctl As OLEObject, i As Long
  'On Error Resume Next
  For Each Ctl In Sheet1.OLEObjects
    If Ctl.progID = "Forms.CommandButton.1" Then
      ReDim Preserve obj(i)
      Set obj(i).cmd = Ctl.Object
      i = i + 1
    End If
  Next
End Sub
2> Code trong Class:
PHP:
Public WithEvents cmd As CommandButton
Private Sub cmd_Click()
  Dim Ctl As Object, wSize As Double, hSize As Double
  For Each Ctl In cmd.Parent.OLEObjects
    If Ctl.Name <> cmd.Name Then
      With Ctl.Parent.Shapes(Ctl.Name)
        wSize = Split(.AlternativeText, "-")(0)
        hSize = Split(.AlternativeText, "-")(1)
        .ZOrder 1
      End With
      Ctl.Width = wSize: Ctl.Height = hSize
      Ctl.Object.Font.Size = 0
    End If
  Next
  With cmd
    Range(Replace(.Name, "Cmd_", "")).Select
    With .Parent.Shapes(cmd.Name)
      .ZOrder 0
      wSize = Split(.AlternativeText, "-")(0)
      hSize = Split(.AlternativeText, "-")(1)
    End With
    .Width = IIf(.Width = wSize, 3 * wSize, wSize)
    .Height = IIf(.Height = hSize, 3 * hSize, hSize)
    .Font.Size = IIf(.Font.Size = 12, 0, 12)
  End With
End Sub
Nói chung sau khi dùng code vẽ xong, ta lại dùng code để "điều khiển" mọi thứ với CommandButton này, như: Tô màu, thêm Caption, thay đổi kích thước... vân vân và vân vân
-----------------------
Phù...
-----------------------
Còn 1 trục trặc nhỏ nhờ mọi người giúp: Làm sao chạy Sub CreateCmd rồi chạy luôn Sub Auto_Open cùng lúc mà không phải gọi code 2 lần?
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom