hiénlinh197
Thành viên tiêu biểu
- Tham gia
- 26/5/09
- Bài viết
- 491
- Được thích
- 113
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?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!
For i=Sheet1.[F7] to Sheet1.[G7]
'Làm gì đó...'
Next
Thử thế này.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!
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ạnTạ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ạnThử 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
Chắc có lẻ bạn muốn vầy thì phải.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 à
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 à: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
Như này bạn nhéTrong code của bạn đã có A1 vậy thay bằng F6 là xong rồi.
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.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
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ìnhHy 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
Thử thêm dòng này:Bây giờ chỉ là gọi cho code đó chạy theo giá trị tăng dần thôi mà bạn
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ạnThử 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ũ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
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ảm ơn bạnCũ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?...
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ả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
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.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
Cứ để tự động cho nó chạy bạnVậ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...
Vậy tôi sửa trên code của bạn nhé!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
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
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.(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
DIỄN ĐÀN GIẢI PHÁP EXCEL Group 1
DIỄN ĐÀN GIẢI PHÁP EXCEL Group 2