Nhờ giải thích Code trong sử dụng lệnh If (1 người xem)

Liên hệ QC

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

langtu00189

Thành viên mới
Tham gia
29/11/08
Bài viết
25
Được thích
0
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
 

File đính kèm

Bạn còn thiếu nhiều lệnh lắ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.
 
Upvote 0
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
 
Upvote 0
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 mới tập tành viết code thì tốt nhất là ta phân tích code của bạn. Vì nếu đưa ra code mới thì bạn

vẫn không biết mình đã sai ở đâu để mà tránh trong tương lai. Học từ những lỗi của mình và của

người khác cũng là học. Bạn thấy ai đó nhẩy cắm đầu xuống nước mà hóa ra nước nông quá để rồi

tổn thương đầu và sống cuộc đời còn lại như thực vật thì bạn có bài học quí, đúng không? Rằ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ì

Select?

4.
Mã:
Workbooks.Open ("debit note.xlsx")

Bạn phải nhập toàn bộ đường dẫn tới tập tin cần mở.

5. Code ví dụ

Mã:
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

Mã:
...
For x = hichic to hehe
...
Next x
 
Upvote 0

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

Back
Top Bottom