Code thực hiện nhiều nút "CommandButton" (1 người xem)

  • Thread starter Thread starter lhthai
  • Ngày gửi Ngày gửi

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

lhthai

Thành viên thường trực
Tham gia
1/9/07
Bài viết
309
Được thích
27
Chào các Anh
Hiện tại mỗi CommandButton em viết 1 lệnh để trả về kết quả cột B & cột C như hai CommandButton đã làm
em cần đến 50 CommandButton thì copy chỉnh sửa đến 50 lần rất lâu
Nay nhờ các chi hướng dẫn
 
Chào các Anh
Hiện tại mỗi CommandButton em viết 1 lệnh để trả về kết quả cột B & cột C như hai CommandButton đã làm
em cần đến 50 CommandButton thì copy chỉnh sửa đến 50 lần rất lâu
Nay nhờ các chi hướng dẫn
Bạn có thể chia sẻ mục đích công việc này của bạn không?
 
Upvote 0
mình làm thử để học từ vựng tiếng nhật đó mà.

Mục đích bạn nêu rộng quá, mình muốn hỏi cụ thể nhu cầu, cách thức làm việc, mục đích, cũng như ý tưởng của việc phải tạo ra 50 nút bấm cơ.
 
Upvote 0
Mình muốn sử dụng vòng lập nhưng không biết cách áp dụng như thế nào
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Integer
For i = 1 To 50
With Sheet1
        If .Controls("CommandButton" & i).Caption = Cells(i, 2) Then
            .Caption = Cells(i, 3)
            .ForeColor = &HFF0000
            .Font = "Times New Roman"
        Else
            .Caption = Cells(i, 2)
            .ForeColor = &HFF&
            .Font = "Tahoma"
        End If
    End With
    Next i
End Sub
 
Upvote 0
Ai biết chơi code thì code này là nhức nhối luôn
PHP:
Sub Go()
Dim n As Long, Sh As Shape
   n = ActiveSheet.Shapes(Application.Caller).AlternativeText
   Set Sh = ActiveSheet.Shapes(CLng(n))
   With Sh.TextFrame2.TextRange
      If .Text = Cells(n + 2, 2) Then
         .Text = Cells(n + 2, 3)
         .Font.Fill.ForeColor.RGB = RGB(0, 255, 0)
         Sh.Fill.ForeColor.RGB = RGB(255, 0, 0)
      Else
         .Text = Cells(n + 2, 2)
         .Font.Fill.ForeColor.RGB = RGB(255, 0, 0)
         Sh.Fill.ForeColor.RGB = RGB(0, 255, 0)
      End If
   End With
End Sub
 
Upvote 0
1. trước hết mình dựa vào bài này :

của Thầy Ndu để mình học cách vận dụng Class

2. Mình cũng mới viết Class lần đầu ( chỉ vận dụng lại theo bài trên ). Nên không biết có sai gì không ( nhưng mình thử thì thấy nó chạy ). Các bước bạn làm như sau:

- chèn 1 class ( trong file mình không đổi tên mà để là "Class1") => Copy code này vào
Mã:
Public WithEvents CB As CommandButton
Private Sub CB_Click()
Dim i As Long
i = Right(CB.Name, Len(CB.Name) - 13)  'tru 13 la do dai cua chuoi "CommandButton"
With CB
    If .Caption = Sheet1.Cells(i + 2, 2) Then
        .Caption = Sheet1.Cells(i + 2, 3)
        .ForeColor = &HFF0000
        .Font = "Times New Roman"
    Else
        .Caption = Sheet1.Cells(i + 2, 2)
        .ForeColor = &HFF&
        .Font = "Tahoma"
    End If
End With
End Sub

- Thêm code sau vào module:
Mã:
Public Button() As New Class1
Sub Auto_Open()
  Dim i As Long, Obj As OLEObject
    With Sheet1
        For Each Obj In .OLEObjects
            If InStr(Obj.progID, "Forms.CommandButton") Then
                ReDim Preserve Button(i)
                Set Button(i).CB = Obj.Object
                i = i + 1
            End If
        Next Obj
    End With
End Sub

- chạy Sub Auto_Open để thử xem kết quả nhé
 
Upvote 0
1. trước hết mình dựa vào bài này :


của Thầy Ndu để mình học cách vận dụng Class

2. Mình cũng mới viết Class lần đầu ( chỉ vận dụng lại theo bài trên ). Nên không biết có sai gì không ( nhưng mình thử thì thấy nó chạy ). Các bước bạn làm như sau:

- chèn 1 class ( trong file mình không đổi tên mà để là "Class1") => Copy code này vào
Mã:
Public WithEvents CB As CommandButton
Private Sub CB_Click()
Dim i As Long
i = Right(CB.Name, Len(CB.Name) - 13)  'tru 13 la do dai cua chuoi "CommandButton"
With CB
    If .Caption = Sheet1.Cells(i + 2, 2) Then
        .Caption = Sheet1.Cells(i + 2, 3)
        .ForeColor = &HFF0000
        .Font = "Times New Roman"
    Else
        .Caption = Sheet1.Cells(i + 2, 2)
        .ForeColor = &HFF&
        .Font = "Tahoma"
    End If
End With
End Sub

- Thêm code sau vào module:
Mã:
Public Button() As New Class1
Sub Auto_Open()
  Dim i As Long, Obj As OLEObject
    With Sheet1
        For Each Obj In .OLEObjects
            If InStr(Obj.progID, "Forms.CommandButton") Then
                ReDim Preserve Button(i)
                Set Button(i).CB = Obj.Object
                i = i + 1
            End If
        Next Obj
    End With
End Sub

- chạy Sub Auto_Open để thử xem kết quả nhé
đã test chạy được rồi
cám ơn bạn nha
 
Upvote 0
Ai biết chơi code thì code này là nhức nhối luôn
PHP:
Sub Go()
Dim n As Long, Sh As Shape
   n = ActiveSheet.Shapes(Application.Caller).AlternativeText
   Set Sh = ActiveSheet.Shapes(CLng(n))
   With Sh.TextFrame2.TextRange
      If .Text = Cells(n + 2, 2) Then
         .Text = Cells(n + 2, 3)
         .Font.Fill.ForeColor.RGB = RGB(0, 255, 0)
         Sh.Fill.ForeColor.RGB = RGB(255, 0, 0)
      Else
         .Text = Cells(n + 2, 2)
         .Font.Fill.ForeColor.RGB = RGB(255, 0, 0)
         Sh.Fill.ForeColor.RGB = RGB(0, 255, 0)
      End If
   End With
End Sub
sub nay copy vào file không chạy được báo lỗi Type mismatch
 
Upvote 0

File đính kèm

Upvote 0
Cám ơn anh nhiều nha
Cái này thêm font chữ được không anh
PHP:
Sub Go()
Dim n As Long, Sh As Shape
   n = ActiveSheet.Shapes(Application.Caller).AlternativeText
   Set Sh = ActiveSheet.Shapes(CLng(n))
   With Sh.TextFrame2.TextRange
      If .Text = Cells(n + 2, 2) Then
         .Text = Cells(n + 2, 3)
         .Font.Fill.ForeColor.RGB = RGB(0, 255, 0)
         .Font.Name = "Times New Roman"
         Sh.Fill.ForeColor.RGB = RGB(255, 0, 0)
      Else
         .Text = Cells(n + 2, 2)
         .Font.Fill.ForeColor.RGB = RGB(255, 0, 0)
         .Font.Name = "Tahoma"
         Sh.Fill.ForeColor.RGB = RGB(0, 255, 0)
      End If
   End With
End Sub
 
Upvote 0

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

Back
Top Bottom