Help!! Cần giúp đỡ debug code!! (1 người xem)

  • Thread starter Thread starter baolq1
  • Ngày gửi Ngày gửi
Liên hệ QC

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

baolq1

Thành viên mới
Tham gia
18/9/16
Bài viết
7
Được thích
0
Chào các bạn!!

Mình mới tập viết code VBA nên nhờ các bạn giúp mình debug code này nhé. Mình viết ra code như dưới nhưng khi chạy thì bị lỗi "Object variable or with block variable not set" nhờ mọi người coi giúp mình chỉnh lại nhé

Sub ccdonepep()
Dim rng As Range
Dim rngdata As Range
Set rngdata = Range("g3:g1000000")
Set rng = rngdata.Find("x", LookIn:=xlValues, lookat:=xlWhole)
If Not rng Is Nothing Then
Do
Sheets("Verifying").Select
Sheets("Verifying").Protect Password:="lamqb1", userinterfaceonly:=True
Application.ScreenUpdating = False
Sheets("PEPs").Select
Rows.Find("x", LookIn:=xlValues, lookat:=xlWhole).Select
ActiveCell = Now
ActiveCell.EntireRow.Select
Selection.Cut
Sheets("Verifying").Select
Rows("4:4").EntireRow.Select
Selection.Insert Shift:=xlDown
Sheets("PEPs").Select
Selection.Delete Shift:=xlUp
Loop
Else
MsgBox ("Not Selected Item!")
End If

End Sub
 
Chào các bạn!!

Mình mới tập viết code VBA nên nhờ các bạn giúp mình debug code này nhé. Mình viết ra code như dưới nhưng khi chạy thì bị lỗi "Object variable or with block variable not set" nhờ mọi người coi giúp mình chỉnh lại nhé

Sub ccdonepep()
Dim rng As Range
Dim rngdata As Range
Set rngdata = Range("g3:g1000000")
Set rng = rngdata.Find("x", LookIn:=xlValues, lookat:=xlWhole)
If Not rng Is Nothing Then
Do
Sheets("Verifying").Select
Sheets("Verifying").Protect Password:="lamqb1", userinterfaceonly:=True
Application.ScreenUpdating = False
Sheets("PEPs").Select
Rows.Find("x", LookIn:=xlValues, lookat:=xlWhole).Select
ActiveCell = Now
ActiveCell.EntireRow.Select
Selection.Cut
Sheets("Verifying").Select
Rows("4:4").EntireRow.Select
Selection.Insert Shift:=xlDown
Sheets("PEPs").Select
Selection.Delete Shift:=xlUp
Loop
Else
MsgBox ("Not Selected Item!")
End If

End Sub

Vòng lặp Do Loop của bạn điều kiện thoát đâu sao tôi không thấy nhỉ.
 
Upvote 0
Cứ cho là có điều kiện thoát đi; Thì câu lệnh này:
PHP:
Rows.Find("x", LookIn:=xlValues, lookat:=xlWhole).Select

ẩn chứa 2 lỗi rồi còn gì!

Thứ nhất, mệnh đề .Find("x", LookIn:=xlValues, lookat:=xlWhole) không có thì lấy gì để Select?
Thứ hai: Đọc lần nữa phương thức FIND() để thấy sai!

(Mà hình như VBE đang báo cái lỗi sai thứ hai này thì phải)
 
Lần chỉnh sửa cuối:
Upvote 0
VBA báo lỗi dòng đó đúng r bạn. Mình nên chỉnh lại ntn cho hợp lý nhỉ giúp mình với
 
Upvote 0
VBA báo lỗi dòng đó đúng r bạn. Mình nên chỉnh lại ntn cho hợp lý nhỉ giúp mình với

Vầy đi cho tiện:
- Đưa file cụ thể lên đây
- Nói rõ bạn cần làm điều gì
- Kết quả mà bạn mong muốn nhận được
Vậy là xong!
 
Upvote 0
Thứ nhất:

Cũng may là có lỗi, nếu không vòng lặp chạy mút chỉ hết pin mới nghỉ.

Muốn thoát vòng lặp có vài cách:

(*) Gán địa chỉ ô vừa tìm thấy vô biến (kiểu chuỗi);
Trong vòng lặp Do. . . Loop ta ấn định điều kiện gặp lại địa chỉ trùng với biến này thì thoát;

(*) Ta qui ước chỉ tìm mươi anh hay thậm chí 1 chị thôi là dừng!

(*) Đến khi tìm thấy ô lân cận có trị nào đó thì thoát/dừng.

(*) . . . .

thứ hai:

Nhưng nguy cơ cao nhất của bạn là xài lồng nhau 2 fương thức FIND(); Điều này là cấm kị tuyệt đối!

Đang ở trong fương thức FIND() ta chỉ có thể xài For. .. Next, Do .... Loop, hay gì gì khác nữa; Chứ xài như bạn là không thể.

Chỉ khi nào hết (tuyệt đối/dứt điểm) 01 fương thức FIND() này rối ta mới có quyền tạo & thực hiện 01 FIND() khác

Chúc ngày cuối tuần vui vẻ!
 
Lần chỉnh sửa cuối:
Upvote 0
Vầy đi cho tiện:
- Đưa file cụ thể lên đây
- Nói rõ bạn cần làm điều gì
- Kết quả mà bạn mong muốn nhận được
Vậy là xong!

Đay la fle cua minh. Mình cẩn đẩy những case có status là pending sang 1 sheet khác nhờ bạn giúp mình sửa code với.
 

File đính kèm

Upvote 0
Thứ nhất:

Cũng may là có lỗi, nếu không vòng lặp chạy mút chỉ hết pin mới nghỉ.

Muốn thoát vòng lặp có vài cách:

(*) Gán địa chỉ ô vừa tìm thấy vô biến (kiểu chuỗi);
Trong vòng lặp Do. . . Loop ta ấn định điều kiện gặp lại địa chỉ trùng với biến này thì thoát;

(*) Ta qui ước chỉ tìm mươi anh hay thậm chí 1 chị thôi là dừng!

(*) Đến khi tìm thấy ô lân cận có trị nào đó thì thoát/dừng.

(*) . . . .

thứ hai:

Nhưng nguy cơ cao nhất của bạn là xài lồng nhau 2 fương thức FIND(); Điều này là cấm kị tuyệt đối!

Đang ở trong fương thức FIND() ta chỉ có thể xài For. .. Next, Do .... Loop, hay gì gì khác nữa; Chứ xài như bạn là không thể.

Chỉ khi nào hết (tuyệt đối/dứt điểm) 01 fương thức FIND() này rối ta mới có quyền tạo & thực hiện 01 FIND() khác

Chúc ngày cuối tuần vui vẻ!

Bạn ơi bạn chỉ rõ giúp mình cách sửa phần code trên được không mình mới tập làm nên chưa rành lắm...nhờ bạn giúp
 
Upvote 0
Với định dạng như File của bạn các thầy sẽ có nhiều cách
Cách của mình. Tạo button ở sheet1. rồi gán code sau:
Mã:
Sub Button2_Click()
    Range("A1").Select
    Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
    Selection.Copy
    ActiveSheet.Next.Select
    Range("A1").Select
    ActiveSheet.Paste
ActiveSheet.Select
For Rw = Cells(65536, 5).End(xlUp).Row To 1 Step -1
       If Cells(Rw, 5).Value = "COMPLETE" Then Cells(Rw, 5).EntireRow.Delete
Next Rw
If Cells(2, 5) = blank Then MsgBox ("Nothing to do"), Sheets("Sheet1").Select
End Sub
À nhưng mà nếu file tầm vài nghìn dòng thì sẽ cà giật mình đoán thế
Nhưng mà trông cũng vui mắt
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Đây là macro áp dụng phương thức FIND() cho file #8 của bạn
PHP:
Sub ChuyenPENDING()
 Dim Rng As Range, sRng As Range
 Dim MyAdd As String, Status As String
 Dim Rw As Long
 
 Sheet1.Select
 [A1:e1].Copy Destination:=Sheet2.[A1]
1 'Xóa Du Lieu Cua Lân Chay Truóc:'
 Sheet2.[B2].CurrentRegion.Offset(1).ClearContents
 Set Rng = Range([E1], [E1].End(xlDown))
 MsgBox Rng.Rows.Count
 Status = "PENDING"
2 'Thuc Hien Phuong Thúc Tìm:'
 Set sRng = Rng.Find(Status, , xlFormulas, xlWhole)
 If Not sRng Is Nothing Then
    MyAdd = sRng.Address
    Do
        Rw = Sheet2.[B65500].End(xlUp).Offset(1).Row
        Sheet2.Cells(Rw, "A").Resize(, 5).Value = Cells(sRng.Row, "A").Resize(, 5).Value
        sRng.Interior.ColorIndex = 38
        Set sRng = Rng.FindNext(sRng)
    Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
 End If
End Sub
 
Upvote 0
Với định dạng như File của bạn các thầy sẽ có nhiều cách
Cách của mình. Tạo button ở sheet1. rồi gán code sau:
Mã:
Sub Button2_Click()
    Range("A1").Select
    Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
    Selection.Copy
    ActiveSheet.Next.Select
    Range("A1").Select
    ActiveSheet.Paste
ActiveSheet.Select
For Rw = Cells(65536, 5).End(xlUp).Row To 1 Step -1
       If Cells(Rw, 5).Value = "COMPLETE" Then Cells(Rw, 5).EntireRow.Delete
Next Rw
If Cells(2, 5) = blank Then MsgBox ("Nothing to do"), Sheets("Sheet1").Select
End Sub
À nhưng mà nếu file tầm vài nghìn dòng thì sẽ cà giật mình đoán thế
Nhưng mà trông cũng vui mắt

mình muốn đảy những case complete qua một sheet khác và xoá luôn những case dó ở sheet 1 thì có cách nào không bạn?
 
Upvote 0
Web KT

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

Back
Top Bottom