Macro chạy liên tục trong giới hạn

Liên hệ QC

hiénlinh197

Thành viên tiêu biểu
Tham gia
26/5/09
Bài viết
491
Được thích
113
Nhờ các bạn trên diễn đàn viết giúp code như trong file đính kèm
Cảm ơn các bạn!
 

File đính kèm

  • copy hay(hỎI).xlsm
    25.7 KB · Đọc: 8
Nhờ các bạn trên diễn đàn viết giúp code như trong file đính kèm
Cảm ơn các bạn!
Tại sao bạn không dùng vòng lặp For cho tiện mà phải gán giá trị vào ô F6 làm chi vậy?
Cú pháp chỉ là:
Mã:
For i=Sheet1.[F7] to Sheet1.[G7]
    'Làm gì đó...'
Next
 
Upvote 0
Nhờ các bạn trên diễn đàn viết giúp code như trong file đính kèm
Cảm ơn các bạn!
Thử thế này.
Mã:
Public Sub sGpe()
Dim Rng As Range, Rws As Long, Col As Long, N As Long
With Sheets("NHAP")
    If .Range("F6").Value < .Range("F7").Value Then .Range("F6").Value = .Range("F7").Value
    If .Range("F6").Value = .Range("G7").Value Then
        MsgBox "Het luot copy roi ban"
        Exit Sub
    End If
    N = .Range("F6").Value
    Set Rng = .Range("B5:C19")
    Rws = Int(N / 8) * 18 + 5
    Col = (N Mod 8) * 3 + 2
    Rng.Copy Sheets("CSDL").Cells(Rws, Col)
    .Range("F6").Value = .Range("F6").Value + 1
    MsgBox "Da Copy Lan " & .Range("F6").Value, , "GPE"
End With
End Sub
 
Upvote 0
Tại sao bạn không dùng vòng lặp For cho tiện mà phải gán giá trị vào ô F6 làm chi vậy?
Cú pháp chỉ là:
Mã:
For i=Sheet1.[F7] to Sheet1.[G7]
    'Làm gì đó...'
Next
Cảm ơn bạn
nghiaphuc
Thật sự trình độ VBA mình không am hiểu, bạn viết giúp mình luôn với
Cảm ơn bạn.
Bài đã được tự động gộp:

Thử thế này.
Mã:
Public Sub sGpe()
Dim Rng As Range, Rws As Long, Col As Long, N As Long
With Sheets("NHAP")
    If .Range("F6").Value < .Range("F7").Value Then .Range("F6").Value = .Range("F7").Value
    If .Range("F6").Value = .Range("G7").Value Then
        MsgBox "Het luot copy roi ban"
        Exit Sub
    End If
    N = .Range("F6").Value
    Set Rng = .Range("B5:C19")
    Rws = Int(N / 8) * 18 + 5
    Col = (N Mod 8) * 3 + 2
    Rng.Copy Sheets("CSDL").Cells(Rws, Col)
    .Range("F6").Value = .Range("F6").Value + 1
    MsgBox "Da Copy Lan " & .Range("F6").Value, , "GPE"
End With
End Sub
Cảm ơn bạn
Cái code copy đã có sẵn rồi bạn à
Bây giờ chỉ cần kích hoạt nó chạy lần lượt bạn à
 
Upvote 0
Cảm ơn bạn
nghiaphuc
Thật sự trình độ VBA mình không am hiểu, bạn viết giúp mình luôn với
Cảm ơn bạn.
Bài đã được tự động gộp:


Cảm ơn bạn
Cái code copy đã có sẵn rồi bạn à
Bây giờ chỉ cần kích hoạt nó chạy lần lượt bạn à
Chắc có lẻ bạn muốn vầy thì phải.
Mã:
Public Sub sGpe()
Dim Rng As Range, Rws As Long, Col As Long, N As Long, i As Long
With Sheets("NHAP")
    For i = .Range("F7").Value To .Range("G7").Value
        N = i - 1
        Set Rng = .Range("B5:C19")
        Rws = Int(N / 8) * 18 + 5
        Col = (N Mod 8) * 3 + 2
        Rng.Copy Sheets("CSDL").Cells(Rws, Col)
    Next i
End With
MsgBox "Da thuc hien xong"
End Sub
 
Upvote 0
Chắc có lẻ bạn muốn vầy thì phải.
Mã:
Public Sub sGpe()
Dim Rng As Range, Rws As Long, Col As Long, N As Long, i As Long
With Sheets("NHAP")
    For i = .Range("F7").Value To .Range("G7").Value
        N = i - 1
        Set Rng = .Range("B5:C19")
        Rws = Int(N / 8) * 18 + 5
        Col = (N Mod 8) * 3 + 2
        Rng.Copy Sheets("CSDL").Cells(Rws, Col)
    Next i
End With
MsgBox "Da thuc hien xong"
End Sub
Cũng không phải bạn à:
Trong file mình đã có code copy rồi
Bây giờ mình chỉ cần cứ tăng 1 giá trị thì lại gọi cái code copy đó chạy thôi bạn à
Bạn viết lại giúp mình nhé
Cảm ơn bạn
 
Upvote 0
Cũng không phải bạn à:
Trong file mình đã có code copy rồi
Bây giờ mình chỉ cần cứ tăng 1 giá trị thì lại gọi cái code copy đó chạy thôi bạn à
Bạn viết lại giúp mình nhé
Cảm ơn bạn
Trong code của bạn đã có A1 vậy thay bằng F6 là xong rồi.
 
Upvote 0
Trong code của bạn đã có A1 vậy thay bằng F6 là xong rồi.
Như này bạn nhé
Trong file của mình đã có code copy.
Bây giờ mình muốn mỗi lần chạy xong code copy thì ô F6 sẽ tăng lên 1 giá trị
Và khi tăng lên thì lại gọi code kia chạy tiếp tục bạn à.
Bạn sửa giúp mình nhé
Cảm ơn bạn
 
Upvote 0
Như này bạn nhé
Trong file của mình đã có code copy.
Bây giờ mình muốn mỗi lần chạy xong code copy thì ô F6 sẽ tăng lên 1 giá trị
Và khi tăng lên thì lại gọi code kia chạy tiếp tục bạn à.
Bạn sửa giúp mình nhé
Cảm ơn bạn
Hy vọng là lần này hiểu đúng ý bạn, càng giải thích càng rối vậy? Mình thuộc dạng luôn luôn lắng nghe nhưng lâu lâu mới hiểu.
Mã:
Public Sub sGpe()
Dim Rng As Range, Rws As Long, Col As Long, N As Long
With Sheets("NHAP")
    If .Range("F6").Value < .Range("F7").Value Then .Range("F6").Value = .Range("F7").Value - 1
    If .Range("F6").Value = .Range("G7").Value Then
        MsgBox "Het luot copy roi ban"
        Exit Sub
    End If
    N = .Range("A1").Value
    Set Rng = .Range("B5:C19")
    Rws = Int(N / 8) * 18 + 5
    Col = (N Mod 8) * 3 + 2
    Rng.Copy Sheets("CSDL").Cells(Rws, Col)
    .Range("F6").Value = .Range("F6").Value + 1
    .Range("A1").Value = N + 1
    MsgBox "Da Copy Lan " & .Range("A1").Value, , "GPE"
End With
End Sub
 
Upvote 0
Hy vọng là lần này hiểu đúng ý bạn, càng giải thích càng rối vậy? Mình thuộc dạng luôn luôn lắng nghe nhưng lâu lâu mới hiểu.
Mã:
Public Sub sGpe()
Dim Rng As Range, Rws As Long, Col As Long, N As Long
With Sheets("NHAP")
    If .Range("F6").Value < .Range("F7").Value Then .Range("F6").Value = .Range("F7").Value - 1
    If .Range("F6").Value = .Range("G7").Value Then
        MsgBox "Het luot copy roi ban"
        Exit Sub
    End If
    N = .Range("A1").Value
    Set Rng = .Range("B5:C19")
    Rws = Int(N / 8) * 18 + 5
    Col = (N Mod 8) * 3 + 2
    Rng.Copy Sheets("CSDL").Cells(Rws, Col)
    .Range("F6").Value = .Range("F6").Value + 1
    .Range("A1").Value = N + 1
    MsgBox "Da Copy Lan " & .Range("A1").Value, , "GPE"
End With
End Sub
Bạn ơi, bạn vẫn chưa hiểu ý mình
Ô "B5:C19" không liên quan gì đến vấn đề này, bởi vì nó đã nằm trong code có sẵn trong file rồi
Bây giờ chỉ là gọi cho code đó chạy theo giá trị tăng dần thôi mà bạn
 
Upvote 0
Bạn ơi, bạn vẫn chưa hiểu ý mình
Ô "B5:C19" không liên quan gì đến vấn đề này, bởi vì nó đã nằm trong code có sẵn trong file rồi
Bây giờ chỉ là gọi cho code đó chạy theo giá trị tăng dần thôi mà bạn
Vậy bạn đợi ai hiểu bạn sẽ giúp còn tôi thì chịu.
 
Upvote 0
Bây giờ chỉ là gọi cho code đó chạy theo giá trị tăng dần thôi mà bạn
Thử thêm dòng này:
If .Range("A1").Value < .Range("G7").Value Then Call sGpe
Mã:
Public Sub sGpe()
Dim Rng As Range, Rws As Long, Col As Long, N As Long
With Sheets("NHAP")
    N = .Range("A1").Value
    Set Rng = .Range("B5:C19")
    Rws = Int(N / 8) * 18 + 5
    Col = (N Mod 8) * 3 + 2
    Rng.Copy Sheets("CSDL").Cells(Rws, Col)
    .Range("A1") = N + 1
MsgBox "Da Copy Lan " & N + 1, , "GPE"
If .Range("A1").Value < .Range("G7").Value Then Call sGpe
End With
End Sub
 
Upvote 0
Thử thêm dòng này:
If .Range("A1").Value < .Range("G7").Value Then Call sGpe
Mã:
Public Sub sGpe()
Dim Rng As Range, Rws As Long, Col As Long, N As Long
With Sheets("NHAP")
    N = .Range("A1").Value
    Set Rng = .Range("B5:C19")
    Rws = Int(N / 8) * 18 + 5
    Col = (N Mod 8) * 3 + 2
    Rng.Copy Sheets("CSDL").Cells(Rws, Col)
    .Range("A1") = N + 1
MsgBox "Da Copy Lan " & N + 1, , "GPE"
If .Range("A1").Value < .Range("G7").Value Then Call sGpe
End With
End Sub
Cảm ơn bạn
giaiphap

phuocam

Mình theo gợi ý của bạn
nghiaphuc

đã viết code như nàyNhưng vẫn chưa biết viết cho ô F6 tăng giá trị mỗi khi chạy xong 1 lần code Và mình vẫn chưa điều chỉnh cho code chạy đúng được Nhờ các bạn chỉnh sửa giúp.
Sub VD()
Dim I As Long
For I = Sheets("NHAP").[F7] To Sheets("NHAP").[G7]
Call Thu_ty
Next
End Sub
 

File đính kèm

  • copy hay(hỎI).xlsm
    27.1 KB · Đọc: 1
Upvote 0
Cảm ơn bạn
giaiphap

phuocam

Mình theo gợi ý của bạn
nghiaphuc

đã viết code như nàyNhưng vẫn chưa biết viết cho ô F6 tăng giá trị mỗi khi chạy xong 1 lần code Và mình vẫn chưa điều chỉnh cho code chạy đúng được Nhờ các bạn chỉnh sửa giúp.
Sub VD()
Dim I As Long
For I = Sheets("NHAP").[F7] To Sheets("NHAP").[G7]
Call Thu_ty
Next
End Sub
Cũng muốn giúp bạn nhưng thực sự hiểu không đúng yêu cầu bạn nên không giúp được. Bây giờ bạn mô tả từng chi tiết, nêu từng bước, bước 1 là gì, sau khi có bước 1 thì bước 2 là gì? mục đích của bạn ra sao?...
 
Upvote 0
Cũng muốn giúp bạn nhưng thực sự hiểu không đúng yêu cầu bạn nên không giúp được. Bây giờ bạn mô tả từng chi tiết, nêu từng bước, bước 1 là gì, sau khi có bước 1 thì bước 2 là gì? mục đích của bạn ra sao?...
Cảm ơn bạn
giaiphap
Như mình đã miêu tả trong file

Nhờ các bạn viết giúp code chạy theo giới hạn
Ô F7 là giới hạn chạy code ban đầu (Cái này cho bằng số cụ thể)
Ô G7 là giới hạn chạy code Cuối cùng (Cái này cho bằng số cụ thể)
Sau mỗi lần chạy xong code thì ô F6 sẽ tăng lên 1 giá trị (Mục đích giá trị của ô này tăng để thay đổi giữ liệu)
Và code lại bắt đầu chạy lần 2
Cứ mỗi lần chạy xong code thì ô F6 lại tăng thêm 1 giá trị
Và code lại tiếp tục chạy
Khi nào giá trị của ô F6 lớn hơn giá trị của ô G7 thì Thì không chạy code nữa
Cảm ơn các bạn
 
Upvote 0
Cảm ơn bạn
giaiphap
Như mình đã miêu tả trong file

Nhờ các bạn viết giúp code chạy theo giới hạn
Ô F7 là giới hạn chạy code ban đầu (Cái này cho bằng số cụ thể)
Ô G7 là giới hạn chạy code Cuối cùng (Cái này cho bằng số cụ thể)
Sau mỗi lần chạy xong code thì ô F6 sẽ tăng lên 1 giá trị (Mục đích giá trị của ô này tăng để thay đổi giữ liệu)
Và code lại bắt đầu chạy lần 2
Cứ mỗi lần chạy xong code thì ô F6 lại tăng thêm 1 giá trị
Và code lại tiếp tục chạy
Khi nào giá trị của ô F6 lớn hơn giá trị của ô G7 thì Thì không chạy code nữa
Cảm ơn các bạn
Vậy mỗi lần chạy là mỗi lần ra lệnh (Click nút lệnh) hay nó cứ chạy xong lần 1 là tự động chạy lần 2, xong lần 2 tự động chạy lần 3...
 
Upvote 0
Nhờ các bạn viết giúp code chạy theo giới hạn
Ô F7 là giới hạn chạy code ban đầu (Cái này cho bằng số cụ thể)
Ô G7 là giới hạn chạy code Cuối cùng (Cái này cho bằng số cụ thể)
Sau mỗi lần chạy xong code thì ô F6 sẽ tăng lên 1 giá trị (Mục đích giá trị của ô này tăng để thay đổi giữ liệu)
Và code lại bắt đầu chạy lần 2
Cứ mỗi lần chạy xong code thì ô F6 lại tăng thêm 1 giá trị
Và code lại tiếp tục chạy
Khi nào giá trị của ô F6 lớn hơn giá trị của ô G7 thì Thì không chạy code nữa
Cảm ơn các bạn
Theo như mấy chỗ màu đỏ thì giữa các lần chạy bạn không thể can thiệp gì đến dữ liệu hiện có. Và những gì bạn mô tả là đúng với cách thức hoạt động của vòng lặp For-Next, vậy thì cứ theo đó mà triển khai thôi.
Đã có 15 bài viết trả lời rồi mà vấn đề của bạn vẫn chưa giải quyết được thì đúng là khó hiểu thật.
 
Upvote 0
Vậy mỗi lần chạy là mỗi lần ra lệnh (Click nút lệnh) hay nó cứ chạy xong lần 1 là tự động chạy lần 2, xong lần 2 tự động chạy lần 3...
Cứ để tự động cho nó chạy bạn
giaiphap à
Mình đã làm theo gợi ý của bạn
nghiaphuc như này

Sub VD()
Dim I As Long
For I = Sheets("NHAP").[F7] To Sheets("NHAP").[G7]
Call Thu_ty
Next
End Sub
Mình thấy là hướng đi đã đúng nhưng mình không biết sửa code
(Chú ý: ô F6 tăng giá trị sau mỗi lần chạy code rất quan trọng tức là nó thay đổi dữ liệu bạn à.)
Bạn giúp mình nhé
Cảm ơn bạn
 
Upvote 0
Cứ để tự động cho nó chạy bạn
giaiphap à
Mình đã làm theo gợi ý của bạn
nghiaphuc như này

Sub VD()
Dim I As Long
For I = Sheets("NHAP").[F7] To Sheets("NHAP").[G7]
Call Thu_ty
Next
End Sub
Mình thấy là hướng đi đã đúng nhưng mình không biết sửa code
(Chú ý: ô F6 tăng giá trị sau mỗi lần chạy code rất quan trọng tức là nó thay đổi dữ liệu bạn à.)
Bạn giúp mình nhé
Cảm ơn bạn
Vậy tôi sửa trên code của bạn nhé!
Mã:
Sub VD()
Dim I As Long
'Hoặc Sheets("NHAP").[F6]=Sheets("NHAP").[F6]+1
For I = Sheets("NHAP").[F7] To Sheets("NHAP").[G7]
Sheets("NHAP").[F6]=I 'Nếu không đúng thì bỏ chổ này thay bằng chổ ở trên.
Call Thu_ty
Next
End Sub
 
Upvote 0
(Chú ý: ô F6 tăng giá trị sau mỗi lần chạy code rất quan trọng tức là nó thay đổi dữ liệu bạn à.)
Bạn giúp mình nhé
Cảm ơn bạn
Uầy! Cái vấn đề rất quan trọng mà bạn nói đến thì thực ra lại rất đơn giản, chỉ là gán cho ô F6 bằng giá trị của biến chạy trong vòng For là được thôi.
Đại loại là: Sheet1.[F6]=i
 
Upvote 0
Web KT
Back
Top Bottom