Macro chạy liên tục trong giới hạn (1 người xem)

Liên hệ QC

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

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

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

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
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
Cảm ơn bạn
giaiphap
Đúng rồi bạn à, nhưng mình thấy số lần chạy code vẫn chưa đúng theo giới hạn của ô F7 và ô G7
Bạn Chỉnh cho mình chỗ này là ok
Bài đã được tự động gộp:

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
Khổ quá bạn
nghiaphuc
ơi, Macro đối với mình thì ngu ngơ lắm mình nghiên cứu đã lâu roài, nhưng mà bây giờ đọc code còn không hiểu hết ý nghĩa, nên mình không biết sửa các dòng lện bạn à.
Môn VBA đối với mình quá khó, và quá trìu tượng
 
Upvote 0
Cảm ơn bạn
giaiphap
Đúng rồi bạn à, nhưng mình thấy số lần chạy code vẫn chưa đúng theo giới hạn của ô F7 và ô G7
Bạn Chỉnh cho mình chỗ này là ok
Tức là sai chổ nào? như thế nào mới đúng? Cũng bạn không chứ tôi có nói gì đâu, bạn cho là code của bạn đúng rồi tôi có sửa code bạn chổ nào đâu, chỉ thêm cái bạn cần chứ không hề xóa miếng code nào của bạn cả.
 
Upvote 0
Cảm ơn bạn
giaiphap
Đúng rồi bạn à, nhưng mình thấy số lần chạy code vẫn chưa đúng theo giới hạn của ô F7 và ô G7
Bạn Chỉnh cho mình chỗ này là ok
Nếu bạn muốn ô F6 nhận giá trị trong đoạn từ F7 đến G7 thì gán như trong code, còn nếu bạn muốn giá trị ô F6 luôn bắt đầu từ số 1, bất kể là F7 bằng mấy thì bạn có thể gán Sheet1.[F6]=i-Sheet1.[F7]+1 hoặc là trước vòng For, gán Sheet1.[F6]=0, trong vòng For thêm câu lệnh Sheet1.[F6]=Sheet1.[F6]+1
Hoặc là cách khác: Giữ nguyên code trên, nhưng thay câu
Mã:
For I = Sheets("NHAP").[F7] To Sheets("NHAP").[G7]
bởi câu
Mã:
For I = 1 to Sheets("NHAP").[G7] - Sheets("NHAP").[F7]+1
 
Upvote 0
Tức là sai chổ nào? như thế nào mới đúng? Cũng bạn không chứ tôi có nói gì đâu, bạn cho là code của bạn đúng rồi tôi có sửa code bạn chổ nào đâu, chỉ thêm cái bạn cần chứ không hề xóa miếng code nào của bạn cả.
Ví dụ như code copy trong file thì khi chạy code xong thì số lần copy chưa đúng bạn à, bạn xem lại giúp mình nhé
Ví dụ mình để trong file bạn kiểm tra giúp
Bài đã được tự động gộp:

Nếu bạn muốn ô F6 nhận giá trị trong đoạn từ F7 đến G7 thì gán như trong code, còn nếu bạn muốn giá trị ô F6 luôn bắt đầu từ số 1, bất kể là F7 bằng mấy thì bạn có thể gán Sheet1.[F6]=i-Sheet1.[F7]+1 hoặc là trước vòng For, gán Sheet1.[F6]=0, trong vòng For thêm câu lệnh Sheet1.[F6]=Sheet1.[F6]+1
Hoặc là cách khác: Giữ nguyên code trên, nhưng thay câu
Mã:
For I = Sheets("NHAP").[F7] To Sheets("NHAP").[G7]
bởi câu
Mã:
For I = 1 to Sheets("NHAP").[G7] - Sheets("NHAP").[F7]+1
Cảm ơn bạn
nghiaphuc
giaiphap

Và tất cả các bạn
Đã giúp đỡ, code chạy đã đúng rồi, số lần không đúng là do cập nhật nhanh quá
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Ví dụ như code copy trong file thì khi chạy code xong thì số lần copy chưa đúng bạn à, bạn xem lại giúp mình nhé
Ví dụ mình để trong file bạn kiểm tra giúp
Bài đã được tự động gộp:


Cảm ơn bạn
nghiaphuc
giaiphap

Và tất cả các bạn
Đã giúp đỡ, code chạy đã đúng rồi, số lần không đúng là do cập nhật nhanh quá
bạn nói sao chứ mình chạy code nó chạy đủ số lần mà, bạn xem lại file.
 

File đính kèm

Upvote 0

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

Back
Top Bottom