Có thể dùng 1 command button cho nhiều tác vụ liên tiếp được không?

  • Thread starter Thread starter ninhhai
  • Ngày gửi Ngày gửi
Liên hệ QC

ninhhai

Thành viên chính thức
Tham gia
16/8/08
Bài viết
64
Được thích
3
Ví dụ em muốn làm một file excel có command button dùng để lần lượt viết các số 1, 2, 3 vào ô A1. Em tạo nút 1 để viết số 1, nút 2 để viết số 2 và nút 3 để viết số 3. Nhưng bây giờ em không muốn có 3 nút mà chỉ muốn có 1 nút, mỗi lần nhấn vào nó thì nó sẽ lần lượt làm việc của nút 1, 2, 3 và nhấn thêm một lần nữa thì nút đó sẽ biến đổi giống như nút NEXT chuyển thành FINISH khi cài các phần mềm. Không biết VBA có thể làm được điều đó không nhỉ?
 
Tất nhiên là được.
Một cách đơn giản là bạn copy các dòng lệnh của command button 2,3 rồi paste vào sau dòng lệnh trong thủ tục của commanbutton 1.
 
Upvote 0
Ý của mình không phải vậy, mình muốn 1 nút lần lượt làm thay việc của nhiều nút chứ không phải là 1 nút dùng để chạy nhiều sub
 
Upvote 0
Ví dụ em muốn làm một file excel có command button dùng để lần lượt viết các số 1, 2, 3 vào ô A1. Em tạo nút 1 để viết số 1, nút 2 để viết số 2 và nút 3 để viết số 3. Nhưng bây giờ em không muốn có 3 nút mà chỉ muốn có 1 nút, mỗi lần nhấn vào nó thì nó sẽ lần lượt làm việc của nút 1, 2, 3 và nhấn thêm một lần nữa thì nút đó sẽ biến đổi giống như nút NEXT chuyển thành FINISH khi cài các phần mềm. Không biết VBA có thể làm được điều đó không nhỉ?
Mình tạo một biến Punlic. Ví dụ:
Dim a As Byte
Private Sub CommandButton1_Click()
a = a + 1
Range("a1").Value = a
If a >= 3 Then CommandButton1.Caption = "Netxt"
End Sub
 
Upvote 0
Vẫn chưa được.
Mình cần là:
nhấn vào nút lần thứ nhất, ô A1 sẽ =1
nhấn vào nút lần thứ 2, ô A1 sẽ =2
nhấn vào nút lần thứ 3, ô A1 sẽ =3 và object của nút sẽ thay đổi
 
Upvote 0
Vẫn chưa được.
Mình cần là:
nhấn vào nút lần thứ nhất, ô A1 sẽ =1
nhấn vào nút lần thứ 2, ô A1 sẽ =2
nhấn vào nút lần thứ 3, ô A1 sẽ =3 và object của nút sẽ thay đổi
Ví dụ thế này
PHP:
Private Sub CommandButton1_Click()
If [a1].Value < 1 Then
    [a1].Value = 1
    UserForm1.CommandButton1.Caption = "2"
    Exit Sub
ElseIf [a1].Value < 2 Then
    [a1].Value = 2
    UserForm1.CommandButton1.Caption = "3"
    Exit Sub
Else
    [a1].Value = 3
    UserForm1.CommandButton1.Caption = "Finish"
    UserForm1.CommandButton1.Enabled = False
    Exit Sub
End If
End Sub
 
Upvote 0
Vẫn chưa được.
Mình cần là:
nhấn vào nút lần thứ nhất, ô A1 sẽ =1
nhấn vào nút lần thứ 2, ô A1 sẽ =2
nhấn vào nút lần thứ 3, ô A1 sẽ =3 và object của nút sẽ thay đổi
object của nút thay đổi là thay đổi làm sao?

To Khoavu,
- Không reset biến a thì nếu nhấn nút tiếp, a sẽ tăng lên mãi.
- Chữ punlicNetxt vô nghĩa.
 
Lần chỉnh sửa cuối:
Upvote 0
Ví dụ thế này
PHP:
Private Sub CommandButton1_Click()
If [a1].Value < 1 Then
    [a1].Value = 1
    UserForm1.CommandButton1.Caption = "2"
    Exit Sub
ElseIf [a1].Value < 2 Then
    [a1].Value = 2
    UserForm1.CommandButton1.Caption = "3"
    Exit Sub
Else
    [a1].Value = 3
    UserForm1.CommandButton1.Caption = "Finish"
    UserForm1.CommandButton1.Enabled = False
    Exit Sub
End If
End Sub
Code này đúng với ví dụ thực tế nhưng em không áp dụng được vì nó phụ thuộc vào giá trị của A1. Ý tưởng của em là đáng nhẽ người dùng phải lần lượt bấm vào nhiều nút khác nhau để thực hiện công việc thì chỉ cần bấm nhiều lần vào một nút và tiêu đề của nút có thể thay đổi tùy theo hoàn cảnh. ( vì đôi khi các bước phải làm đúng theo một trình tự nhất định và phải dừng lại giữa chừng để nhập dữ liệu chẳng hạn)
 
Upvote 0
Bạn nói quá bao quát thì mình không có cách gì giúp bạn được. Bạn hãy cụ thể hơn bằng cách đưa file lên đi. Việc bạn muốn caption nút thay đổi mỗi lần click thì chỉ cần sử dụng sự kiện Click của button rồi thay đổi .Caption của nó là được. Quan trọng là bạn muốn làm thế nào để ra điều kiện phù hợp.
 
Upvote 0
Code này đúng với ví dụ thực tế nhưng em không áp dụng được vì nó phụ thuộc vào giá trị của A1. Ý tưởng của em là đáng nhẽ người dùng phải lần lượt bấm vào nhiều nút khác nhau để thực hiện công việc thì chỉ cần bấm nhiều lần vào một nút và tiêu đề của nút có thể thay đổi tùy theo hoàn cảnh. ( vì đôi khi các bước phải làm đúng theo một trình tự nhất định và phải dừng lại giữa chừng để nhập dữ liệu chẳng hạn)
Thử code như sau xem sao:
PHP:
Private Sub CommandButton1_Click()
    With CommandButton1
        If .Caption = "Bat dau" Then
            MsgBox "Nhan de thuc hien buoc 1!"
            .Caption = "Buoc 1"
        ElseIf .Caption = "Buoc 1" Then
            MsgBox "Nhan de thuc hien buoc 2!"
            .Caption = "Buoc 2"
        ElseIf .Caption = "Buoc 2" Then
            MsgBox "Nhan de ket thuc!"
            .Caption = "Ket thuc"
        Else
            MsgBox "Qua trinh da hoan tat"
        End If
    End With
End Sub
Khi thiết kế, nút lệnh có Caption là "Bat dau", các Msgbox trong code có thể thay bởi các đoạn code phù hợp cho mỗi bước.
 
Upvote 0
Thử code như sau xem sao:
PHP:
Private Sub CommandButton1_Click()
    With CommandButton1
        If .Caption = "Bat dau" Then
            MsgBox "Nhan de thuc hien buoc 1!"
            .Caption = "Buoc 1"
        ElseIf .Caption = "Buoc 1" Then
            MsgBox "Nhan de thuc hien buoc 2!"
            .Caption = "Buoc 2"
        ElseIf .Caption = "Buoc 2" Then
            MsgBox "Nhan de ket thuc!"
            .Caption = "Ket thuc"
        Else
            MsgBox "Qua trinh da hoan tat"
        End If
    End With
End Sub
Khi thiết kế, nút lệnh có Caption là "Bat dau", các Msgbox trong code có thể thay bởi các đoạn code phù hợp cho mỗi bước.

Cám ơn anh, vậy mà em nghĩ không ra. Code của anh chỉ cần thêm .Caption = "Bat dau" vào trước End if nữa là ổn.
 
Upvote 0
Bạn có thể sử dụng 1 ô khác (ví dụ B1) để lưu giá trị trạng thái của các bước đã thực hiện.
 
Upvote 0
Web KT

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

Back
Top Bottom