Mình có một file danh sách hàng nhập
Mình muốn lập lệnh if với ý tưởng, trong dãy các ô(x,4) nếu ô nào có chữ "..." thì sẽ copy ô (x,6) vào flie debit note. Tuy nhiên mình lập code và k chạy được
Mong các bạn giải thích mình đã sai chỗ nào và sửa lại giúp mình
Với mệnh đầ "Trong dãy các ô(x,4) nếu ô nào có chữ "..." thì sẽ copy ô (x,6)"
Đầu tiên bạn fải xác định X biến thiên từ dòng 6 đến dòng thứ bao nhiêu thì kết thúc;
Chuyện này bạn nên làm vầy:
PHP:
Dim Rws As Long
Rws=[D65500].End(xlUp).Row
(Lúc này Rws sẽ chứa trị 24 ứng với dòng cuối chứa dữ liệu trong CSDL hiện thời của bạn;
Tiếp theo bạn cần khai báo 1 biến kiểu Range (Như Dim Cls As Range)
Sau đó duyệt toàn bộ các ô thuộc vùng cần tìm kiếm, như (A) dưới đây
(A)
PHP:
For Each Cls In Range("D2:D" & Rws)
If Cls.Value="..." Then
End If
Next Cls
Hay nhanh hơn xíu (B), nếu bạn đã biết về fương thức FIND(), kiểu như sau
(B)
Mã:
Dim Rng As Range, sRng As Range
Dim MyAdd As String
Set Rng=Range([D5], [D5].End(xlDown))
Set sRng=Rng.FIND("...",,xlFormulas, xlWhole)
If Not sRng Is Nothing Then
MyAdd = sRng.Address
Do
Loop . . . .
End If
. . . . . .
Bạn tiếp đi nha & chúc thành công trong công việc.
Bạn ơi, mình mới tập tành viết code VBA nên còn mù mờ lắm, bạn có thể chỉ rõ hơn, mình cần thêm những lệnh nào, xoá đi lệnh nào trong đoạn mã code của mình không
Bạn ơi, mình mới tập tành viết code VBA nên còn mù mờ lắm, bạn có thể chỉ rõ hơn, mình cần thêm những lệnh nào, xoá đi lệnh nào trong đoạn mã code của mình không
trước khi nhẩy cắm đầu thì luôn phải kiểm tra độ sâu của nước.
Code của bạn
Mã:
Sub test()
Dim x As Long
Dim wb1 As Workbook, wb2 As Workbook
Set wb1 = Workbooks("danhsachhangnhaptest.xlsm")
If wb1.Worksheets("sheet1").Cells(x, 4) = "2013/SIR-HPH2098 - FOX/5160" Then
Cells(x, 10).Select
Selection.Copy
Workbooks.Open ("debit note.xlsx")
Range("B11").Select
ActiveSheet.Paste
End If
End Sub
1.
Mã:
Set wb1 = Workbooks("danhsachhangnhaptest.xlsm")
Tôi hiểu là bạn muốn "nhớ" book có chứa code hiện hành để sau đó truy cập. Bạn có thể làm như
thế nhưng book chứa code hiện hành cũng chính là ThisWorkbook. Nếu bạn muốn truy cập tới book
hiện hành cho dù nó là book nào trong các book đang mở thì đó là ActiveWorkbook. Nếu bạn muốn
truy cập tới book có tên cụ thể thì bạn làm như bạn đã làm.
2.
Mã:
If wb1.Worksheets("sheet1").Cells(x, 4) = ...
Bạn chưa thiết lập giá trị cho biến x thì ở thời điểm ở trên thì x = 0. Bạn truy cập tới Cells(0, 4) thì sẽ
có lỗi
3.
Mã:
Cells(x, 10).Select
dòng code trên chọn Cells(x, 10) của "sheet active trong book active". Mà dụng ý của bạn là chọn
trong sheet1 của wb1. Nếu ở thời điểm trên book active không phải là wb1 thì code sẽ làm sai ý bạn.
Thậm chí nếu bạn viết
Mã:
wb1.Worksheets("sheet1").Cells(x, 10).Select
mà ở tời điểm trên wb1 không là book active thì bạn sẽ có error.
Nhưng tôi không hiểu bạn. Bạn cần copy giá trị Cells(x, 10) vào bộ nhớ đệm thì cứ copy thôi cần gì
Sub test()
Dim x As Long
Dim sh As Worksheet
x = 6
Set sh = ThisWorkbook.Worksheets("sheet1")
If sh.Cells(x, 4) = "2013/SIR-HPH2098 - FOX/5160" Then
sh.Cells(x, 10).Copy
Workbooks.Open (ThisWorkbook.Path & "\" & "debit note.xlsx")
Range("B11").Select
ActiveSheet.Paste
Application.CutCopyMode = False
End If
End Sub
Tất nhiên ở ví dụ trên thì bạn kiểm tra và copy ở dòng 6 (x = 6). Nếu bạn cần thao tác cho một loạt
dòng liên tiếp thì bạn có thể dùng vòng lặp FOR