Giúp code VBA Chạy vòng lặp theo chu kỳ

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

Văn Toàn 1996

Thành viên bị đình chỉ hoạt động
Thành viên bị đình chỉ hoạt động
Tham gia
5/6/23
Bài viết
102
Được thích
22
Xin chào toàn thể quý cô chú anh chị trên toàn quốc. Em cần 1 đoạn vba chạy theo vòng lặp từ 1 đến 100 chỉ lặp lại 3 đoạn code 1,2,3. Xin chân thành cảm ơn
1720255092981.png


Sub code1()
MsgBox ("abc")
End Sub


Sub code2()
MsgBox ("dasers")
End Sub

Sub code3()
MsgBox ("daserdadsgs")
End Sub
 
PHP:
Sub VongLap3_100()
 Dim J As Integer
 For J = 1 To 100
    If J Mod 3 <> 0 Then
        GPE J Mod 3
    Else
        GPE 3
    End If
 Next J
End Sub
Mã:
Sub GPE(W As Integer)
 MsgBox Str(W)
End Sub
 
Upvote 0
Hoặc thử code này:

Mã:
For i = 1 To 100
Select Case i Mod 3
   Case 1
   Call code1
   Case 2
   Call code2
   Case 0
   Call code3
End Select
 
Upvote 0
Mã:
Option Explicit

Sub code1()
MsgBox "call code1"
End Sub

Sub code2()
MsgBox "call code2"
End Sub

Sub code3()
MsgBox "call code3"
End Sub


Sub A_A()
Dim i, j, k
On Error Resume Next
For i = 1 To 3 '10000000000
    j = i Mod 3 + 1
    k = "code" & j
    Run k
Next i
End Sub
- - - - - - - - - -
 
Upvote 0
:D :D :D

PHP:
Dim J As Integer
Sub Choose_3()
 For J = 1 To 10
    GPE Choose((J Mod 3) + 1, "Daserdadsgs", "ABC", "Dasers")
 Next J
End Sub
Mã:
Sub GPE(Tmp As String)
 MsgBox Tmp,,J
End Sub
 
Upvote 0
Quý vị có thấy 3 lần gọi cuối cùng nó chả theo mót miếc gì hết hôn?

For i2 = 1 to 33
Code1
Code2
Code3
If i2 = 32 Then Code1 ' coi như i = 97
' đợt tới i coi như 98-99-100
Next i

Chú: biết là thớt cẩu thả nhưng mình cứ tưởng tượng gặp hợp khùng khịu thế này thì giải ra sao?
 
Upvote 0
Quý vị có thấy 3 lần gọi cuối cùng nó chả theo mót miếc gì hết hôn?
. . . .
Chú: biết là thớt cẩu thả nhưng mình cứ tưởng tượng gặp hợp khùng khịu thế này thì giải ra sao?
Thì coi 3 số cuối này là trường hợp riêng so với mấy thằng 'không khùng' bên trên;
PHP:
Dim J As Integer
Sub Choose_3()
 Dim Tmp As String
 
 J = 0
 Do
    J = J + 1:              If J > 100 Then Exit Do
    If J = 10 Then J = 97
    If J > 97 Then
        Tmp = Switch(J = 98, "ABC", J = 99, "Dasers", J = 100, "Daserdadsgs", J = 101, "Quá Ngu")
        GPE Tmp
    Else
        GPE Choose((J Mod 3) + 1, "Daserdadsgs", "ABC", "Dasers")
    End If
 Loop
End Sub
Mã:
Sub GPE(Tmp As String)
 MsgBox Tmp, , J
End Sub
 
Upvote 0
@Văn Toàn 1996
Bạn có thể sử dụng toán tử Mod, do khi chia dư số bị chia bằng số được chia sẽ là 0 nên cần giảm đi 1 giá trị, và thêm 1 giá trị sau khi chia.

JavaScript:
Sub testCallByStep()
  Dim i%, iStep%
  iStep = 3
  While i < 100
    i = i + 1
    ' cach goi 1
    Application.OnTime Now,"'" & ThisWorkbook.Name & "'!code" & CStr((i - 1) Mod iStep + 1)
    ' cach goi 2
    Application.Run "'" & ThisWorkbook.Name & "'!code" & CStr((i - 1) Mod iStep + 1)
  Wend
End Sub
 
Upvote 0
@Văn Toàn 1996
Bạn có thể sử dụng toán tử Mod, do khi chia dư số bị chia bằng số được chia sẽ là 0 nên cần giảm đi 1 giá trị, và thêm 1 giá trị sau khi chia.

JavaScript:
Sub testCallByStep()
  Dim i%, iStep%
  iStep = 3
  While i < 100
    i = i + 1
    ' cach goi 1
    Application.OnTime Now,"'" & ThisWorkbook.Name & "'!code" & CStr((i - 1) Mod iStep + 1)
    ' cach goi 2
    Application.Run "'" & ThisWorkbook.Name & "'!code" & CStr((i - 1) Mod iStep + 1)
  Wend
End Sub
mình chạy thử bị lỗi dòng này: Application.Run "'" & ThisWorkbook.Name & "'!code" & CStr((i - 1) Mod iStep + 1)
 
Upvote 0
Nếu có trường hợp i = 98 Code1 ... Thì bạn thêm CStr((i - 1 + (i>=98) * 97 ) Mod iStep + 1)

@Trần Văn Bình bạn chép 3 thủ tục bài chính
 
Lần chỉnh sửa cuối:
Upvote 0
Quý vị có thấy 3 lần gọi cuối cùng nó chả theo mót miếc gì hết hôn?

For i2 = 1 to 33
Code1
Code2
Code3
If i2 = 32 Then Code1 ' coi như i = 97
' đợt tới i coi như 98-99-100
Next i

Chú: biết là thớt cẩu thả nhưng mình cứ tưởng tượng gặp hợp khùng khịu thế này thì giải ra sao?
Chắc có lẽ chủ thớt tính nhẩm 100 - 1 = 99 chia hết cho 3 :p:D
 
Upvote 0
Mã:
Option Explicit

Sub code1()
MsgBox "call code1"
End Sub

Sub code2()
MsgBox "call code2"
End Sub

Sub code3()
MsgBox "call code3"
End Sub


Sub A_A()
Dim i, j, k
On Error Resume Next
For i = 1 To 3 '10000000000
    j = i Mod 3 + 1
    k = "code" & j
    Run k
Next i
End Sub
- - - - - - - - - -
Code bạn Test kỷ là Sai Nhé. nó chạy Code 2 -> Code 3 -> Code 1. Sai ở lần đầu tiên
Mình Chỉnh lại chính xác tuyệt đối nhé
Mã:
Sub Main()
    Dim i As Long
    For i = 1 To 9
        Select Case i Mod 3
            Case 1
                code1
            Case 2
                 code2
            Case 0
                 code3
        End Select
    Next i
End Sub
Bài đã được tự động gộp:

Quý vị có thấy 3 lần gọi cuối cùng nó chả theo mót miếc gì hết hôn?

For i2 = 1 to 33
Code1
Code2
Code3
If i2 = 32 Then Code1 ' coi như i = 97
' đợt tới i coi như 98-99-100
Next i

Chú: biết là thớt cẩu thả nhưng mình cứ tưởng tượng gặp hợp khùng khịu thế này thì giải ra sao?
Chổ tới 98,99,100 là người ta Minh Họa đến 1 số nào đó chỉ là 1 con số ví dụ. Còn muốn đúng chu kỳ ví dụ 3 chu kỳ mà muốn lặp lại 30 lần thì Next i đến 99.
 
Lần chỉnh sửa cuối:
Upvote 0
Code bạn Test kỷ là Sai Nhé. nó chạy Code 2 -> Code 3 -> Code 1. Sai ở lần đầu tiên
Mình Chỉnh lại chính xác tuyệt đối nhé
Mã:
Sub Main()
    Dim i As Long
    For i = 1 To 9
        Select Case i Mod 3
            Case 1
                code1
            Case 2
                 code2
            Case 0
                 code3
        End Select
    Next i
End Sub
Có lẽ không cần thiết phải mất công code lại đâu bạn.
Cái vòng lặp trong sub A_A chỉ cần cho bắt đầu từ 0 là đâu vào đấy ngay thôi
 
Upvote 0
PHP:
Sub VongLap3_100()
 Dim J As Integer
 For J = 1 To 100
    If J Mod 3 <> 0 Then
        GPE J Mod 3
    Else
        GPE 3
    End If
 Next J
End Sub
Mã:
Sub GPE(W As Integer)
 MsgBox Str(W)
End Sub
Anh nói người ta Điên Khùng Nhưng code của anh Trật Lất. code chạy sai thứ tự từ 1 đến 3 và lặp lại
Sai: code 2 -> code 1 -> Code 3
Đúng: Code 1-> code 2-> code 3


Mã:
Dim J As Integer
Sub Choose_3()
 For J = 1 To 9
    GPE Choose((J Mod 3) + 1, "Code 3", "code 2", "Code 1")
 Next J
End Sub

Sub GPE(Tmp As String)
 MsgBox Tmp, , J
End Sub

Bớt khinh thường lại đi. Già rồi
 
Upvote 0
...
Chổ tới 98,99,100 là người ta Minh Họa đến 1 số nào đó chỉ là 1 con số ví dụ. Còn muốn đúng chu kỳ ví dụ 3 chu kỳ mà muốn lặp lại 30 lần thì Next i đến 99.
Ví dụ sai thì ví dụ làm chi.
3 x 30 = 90
Lại lô gic đi trước thiên hạ 10 năm.

Chú thích về gọi hàm kết nối trễ:
Tại sao lại phải dùng Run để chạy 3 hàm đã xác định? (ở đây chỉ có 3 hàm chứ có phải cả chục đâu)
Tốn 99 lần nối chuỗi, thêm 99 lần kết nối trễ.
 
Upvote 0
Web KT

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

Back
Top Bottom