Lỗi code

Liên hệ QC

Shinichikudo_Sh

Thành viên mới
Tham gia
28/2/20
Bài viết
13
Được thích
2
[RE-POST]
Các anh chị em vào xem giúp em mã code VBA này với ạ!
Hôm qua nó vẫn chạy bình thường được khoảng chục file thì chết ngoắc. Em đã tắt đi mở lại mà không được. Cũng xóa đi phần code viết thêm mà vẫn k ăn thua.
File "nháp full" là file macro. File còn lại là file test cho macro trên,
Anh chị xem giúp em với ạ! Em cần gấp gấp cho cuối tháng mà sửa mãi không được.
Em cảm ơn cả làng ạ :)))
 

File đính kèm

[RE-POST]
Các anh chị em vào xem giúp em mã code VBA này với ạ!
Hôm qua nó vẫn chạy bình thường được khoảng chục file thì chết ngoắc. Em đã tắt đi mở lại mà không được. Cũng xóa đi phần code viết thêm mà vẫn k ăn thua.
File "nháp full" là file macro. File còn lại là file test cho macro trên,
Anh chị xem giúp em với ạ! Em cần gấp gấp cho cuối tháng mà sửa mãi không được.
Em cảm ơn cả làng ạ :)))
1582878410764.png
Nó báo lỗi mấy dòng này. đầu tiên là ko tìm thấy cái cột nào có cái tên Conductor thì phải
Tiếp theo khi mà file dữ liệu có cái sheet UP rồi thì nó báo lỗi cái dòng thứ 2
Dòng 3 lỗi như dòng 1 thì phải. Mình mò được đến đó thôi
 
Upvote 0
View attachment 232625
Nó báo lỗi mấy dòng này. đầu tiên là ko tìm thấy cái cột nào có cái tên Conductor thì phải
Tiếp theo khi mà file dữ liệu có cái sheet UP rồi thì nó báo lỗi cái dòng thứ 2
Dòng 3 lỗi như dòng 1 thì phải. Mình mò được đến đó thôi
Cảm ơn b nhé! Cái đó t cũng thấy rồi. Có điều hôm qua nó vẫn chạy được. Với lại cùng hàm, cùng dòng cùng cột, biến "a=Range("A:M").Find("Amount").column" vẫn chạy được mà. Ký tự conductor vẫn tồn tại trong file đó mà không hiểu sao k ra.
 
Upvote 0
Có điều hôm qua nó vẫn chạy được.
Đừng cãi là hôm qua "chạy ngon" mà hôm nay lại không chạy. Hãy suy nghĩ chút đi.

Hôm qua trước khi chạy code thì chưa có sheet UP. Khi chạy code thì code mở tập tin, tạo sheet mới và đặt tên cho nó là "UP"
Mã:
ActiveSheet.Name = "UP"
Không có lỗi gì cả vì chưa có sheet nào tên là "UP".

Hôm nay mở cũng tập tin đó, trước khi chạy code thì đã có sheet "UP" được tạo ngày hôm qua. Khi chạy code thì nó tạo sheet mới. Nhưng khi đổi tên sheet mới thành "UP"
Mã:
ActiveSheet.Name = "UP"
thì có lỗi do sheet có tên là "UP" đã tồn tại.
Với lại cùng hàm, cùng dòng cùng cột, biến "a=Range("A:M").Find("Amount").column" vẫn chạy được mà.
Sheet đang hoạt động là sheet "Cost sheet" do dòng
Mã:
Sheets("Cost sheet").Activate
Trong sheet này có "Amount" nên
Mã:
a=Range("A:M").Find("Amount").column
không có lỗi.

Nhưng do sheet đang hoạt động - sheet "Cost sheet" không có "Conductor" nên có lỗi tại
Mã:
b = Range("A:M").Find("Conductor").Row
Cot = Range("A:M").Find("Conductor").Column
Ký tự conductor vẫn tồn tại trong file đó mà không hiểu sao k ra.
Nếu bạn khăng khăng cho là có "Conductor" thì hãy tiết lộ bí mật, nó ở ô nào của sheet đang hoạt động - sheet "Cost sheet". Tồn tại "Conductor" nhưng không ở sheet đang hoạt động - sheet "Cost sheet".
Khi làm việc với nhiều sheet thì phải biết sheet nào đang hoạt động. Và muốn thao tác với sheet không hoạt động thì phải viết như thế nào
 
Upvote 0
Đừng cãi là hôm qua "chạy ngon" mà hôm nay lại không chạy. Hãy suy nghĩ chút đi.

Hôm qua trước khi chạy code thì chưa có sheet UP. Khi chạy code thì code mở tập tin, tạo sheet mới và đặt tên cho nó là "UP"
Mã:
ActiveSheet.Name = "UP"
Không có lỗi gì cả vì chưa có sheet nào tên là "UP".

Hôm nay mở cũng tập tin đó, trước khi chạy code thì đã có sheet "UP" được tạo ngày hôm qua. Khi chạy code thì nó tạo sheet mới. Nhưng khi đổi tên sheet mới thành "UP"
Mã:
ActiveSheet.Name = "UP"
thì có lỗi do sheet có tên là "UP" đã tồn tại.

Sheet đang hoạt động là sheet "Cost sheet" do dòng
Mã:
Sheets("Cost sheet").Activate
Trong sheet này có "Amount" nên
Mã:
a=Range("A:M").Find("Amount").column
không có lỗi.

Nhưng do sheet đang hoạt động - sheet "Cost sheet" không có "Conductor" nên có lỗi tại
Mã:
b = Range("A:M").Find("Conductor").Row
Cot = Range("A:M").Find("Conductor").Column

Nếu bạn khăng khăng cho là có "Conductor" thì hãy tiết lộ bí mật, nó ở ô nào của sheet đang hoạt động - sheet "Cost sheet". Tồn tại "Conductor" nhưng không ở sheet đang hoạt động - sheet "Cost sheet".
Khi làm việc với nhiều sheet thì phải biết sheet nào đang hoạt động. Và muốn thao tác với sheet không hoạt động thì phải viết như thế nào
Em k giỏi code lắm nên bác sửa trực tiếp code cho em với vì em nghe k hiểu.
1. hôm qua em quên k xóa sheet up va bk trước khi gửi lên nhưng lúc chạy đã có ý thức bỏ đi rồi vẫn lỗi. Bác xóa đi rồi chạy còn lỗi k?
2. Sheet cost sheet đang active thì hàm find conductor sao lại k chạy được? Nó thao tác hết trên sheet costsheet rồi mới tạo sheet up và bk nhé nên activesheet hiện tại vẫn là costsheet nhé. Công thức đấy vẫn là tìm trên costsheet.
Thanks
Bài đã được tự động gộp:

Em k giỏi code lắm nên bác sửa trực tiếp code cho em với vì em nghe k hiểu.
1. hôm qua em quên k xóa sheet up va bk trước khi gửi lên nhưng lúc chạy đã có ý thức bỏ đi rồi vẫn lỗi. Bác xóa đi rồi chạy còn lỗi k?
2. Sheet cost sheet đang active thì hàm find conductor sao lại k chạy được? Nó thao tác hết trên sheet costsheet rồi mới tạo sheet up và bk nhé nên activesheet hiện tại vẫn là costsheet nhé. Công thức đấy vẫn là tìm trên costsheet.
Cảm ơn
À quên hình như hàm find tìm ký tự k phân biệt viết hoa viết thường.e đã thử xóa hoa thường nhưng k ăn thua.
Bài đã được tự động gộp:

Em k giỏi code lắm nên bác sửa trực tiếp code cho em với vì em nghe k hiểu.
1. hôm qua em quên k xóa sheet up va bk trước khi gửi lên nhưng lúc chạy đã có ý thức bỏ đi rồi vẫn lỗi. Bác xóa đi rồi chạy còn lỗi k?
2. Sheet cost sheet đang active thì hàm find conductor sao lại k chạy được? Nó thao tác hết trên sheet costsheet rồi mới tạo sheet up và bk nhé nên activesheet hiện tại vẫn là costsheet nhé. Công thức đấy vẫn là tìm trên costsheet.
Cảm ơn
Bài đã được tự động gộp:


À quên hình như hàm find tìm ký tự k phân biệt viết hoa viết thường.e đã thử xóa hoa thường nhưng k ăn thua. Conductor nàm ở dòng 15 sheet costsheet mà bác nhìn k ra à?
 
Lần chỉnh sửa cuối:
Upvote 0
Upvote 0
Thứ nhất bạn viết những câu lệnh này là bạn đang đi trên dây & có ngày lộn nhào & mất mạng không toàn thây!
a = Range("A:M").Find("Amount").Column
b = Range("A:M").Find("Conductor").Row
c = Columns(Cot).Find("Total raw material cost").Row

Thứ 2: Sao trong macro của bạn chứa nhiều dòng trống làm vậy; Để thể hiện tính 'hàn lâm' trong viết Code của mình ư, vô nghĩa?
Ngược lại chuyện này làm cho bạn & những người khác cần dọc Code thêm chút khó khăn không đáng mà thôi.
Những người khác làm ngược với bạn họ sẽ bao quát hơn toàn bộ đứa con tinh thần của họ; Từ đó dễ phát hiện ra lỗi , nhất là lỗi logic như
Có For nhưng thiếu Next; Có If nhưng không có End If,. . . . .
. . . . .
& cuối cùng là tiêu đề bài viết của bạn sao cột lốc như vậy " Lỗi code "

(Biết rằng bạn sẽ buồn khi đọc xong bài này, nhưng cũng viết . . . . )
 
Lần chỉnh sửa cuối:
Upvote 0
Thứ nhất bạn viết những câu lệnh này là bạn đang đi trên dây & có ngày lộn nhào & mất mạng không toàn thây!


Thứ 2: Sao trong macro của bạn chứa nhiều dòng trống làm vậy; Để thể hiện tính 'hàn lâm' trong viết Code của mình ư, vô nghĩa?
Ngược lại chuyện này làm cho bạn & những người khác cần dọc Code thêm chút khó khăn không đáng mà thôi.
Những người khác làm ngược với bạn họ sẽ bao quát hơn toàn bộ đứa con tinh thần của họ; Từ đó dễ phát hiện ra lỗi , nhất là lỗi logic như
Có For nhưng thiếu Next; Có If nhưng không có End If,. . . . .
. . . . .
& cuối cùng là tiêu đề bài viết của bạn sao cột lốc như vậy " Lỗi code "

(Biết rằng bạn sẽ buồn khi đọc xong bài này, nhưng cũng viết . . . . )
Code này thớt có người viết giùm, hoặc lấy ở đâu ra thôi.
Nhìn thì biết người viết code chịu khó bỏ công, nhưng người dùng thì khá lười biếng.
Cái bác ở bài #4, #7 chịu khó chứ tôi thì đọc thấy mấy từ viết tắt (k) là sợ tính cẩu thả và chủ quan, dây vào dài dòng lắm. Chỉ một vấn đề nhỏ có thể kéo dài mấy bài mới giải thích xong.
 
Upvote 0
Thứ nhất bạn viết những câu lệnh này là bạn đang đi trên dây & có ngày lộn nhào & mất mạng không toàn thây!


Thứ 2: Sao trong macro của bạn chứa nhiều dòng trống làm vậy; Để thể hiện tính 'hàn lâm' trong viết Code của mình ư, vô nghĩa?
Ngược lại chuyện này làm cho bạn & những người khác cần dọc Code thêm chút khó khăn không đáng mà thôi.
Những người khác làm ngược với bạn họ sẽ bao quát hơn toàn bộ đứa con tinh thần của họ; Từ đó dễ phát hiện ra lỗi , nhất là lỗi logic như
Có For nhưng thiếu Next; Có If nhưng không có End If,. . . . .
. . . . .
& cuối cùng là tiêu đề bài viết của bạn sao cột lốc như vậy " Lỗi code "

(Biết rằng bạn sẽ buồn khi đọc xong bài này, nhưng cũng viết . . . . )
Ồ nghiệp dư nên phải tách ra xem mình đang làm thao tác gì :). Như thế sẽ dễ nhìn hơn trong quá trình thao tác với nhiều sheet và sử dụng nhiều câu lệnh cho từng bước trong quá trình tính toán. Code này ngắn nên bạn nhìn vậy thôi. Chứ code dài nhìn còn k ra mình làm gì ấy.
Bài đã được tự động gộp:

Tôi đã viết rất rõ
Bác k đọc hết comment em à? Dòng 15 sheet costsheet bác k thấy chữ conductor à? Quan trọng là bác có sửa được file thì úp lên cho em down về chạy thử????
Bài đã được tự động gộp:

Thứ nhất bạn viết những câu lệnh này là bạn đang đi trên dây & có ngày lộn nhào & mất mạng không toàn thây!


Thứ 2: Sao trong macro của bạn chứa nhiều dòng trống làm vậy; Để thể hiện tính 'hàn lâm' trong viết Code của mình ư, vô nghĩa?
Ngược lại chuyện này làm cho bạn & những người khác cần dọc Code thêm chút khó khăn không đáng mà thôi.
Những người khác làm ngược với bạn họ sẽ bao quát hơn toàn bộ đứa con tinh thần của họ; Từ đó dễ phát hiện ra lỗi , nhất là lỗi logic như
Có For nhưng thiếu Next; Có If nhưng không có End If,. . . . .
. . . . .
& cuối cùng là tiêu đề bài viết của bạn sao cột lốc như vậy " Lỗi code "

(Biết rằng bạn sẽ buồn khi đọc xong bài này, nhưng cũng viết . . . . )
Cái này cũng
Bài đã được tự động gộp:

Ồ nghiệp dư nên phải tách ra xem mình đang làm thao tác gì :). Như thế sẽ dễ nhìn hơn trong quá trình thao tác với nhiều sheet và sử dụng nhiều câu lệnh cho từng bước trong quá trình tính toán. Code này ngắn nên bạn nhìn vậy thôi. Chứ code dài nhìn còn k ra mình làm gì ấy.
Bài đã được tự động gộp:


Bác k đọc hết comment em à? Dòng 15 sheet costsheet bác k thấy chữ conductor à? Quan trọng là bác có sửa được file thì úp lên cho em down về chạy thử????
Bài đã được tự động gộp:


Cái này cũng
Cái này học bập bõm thôi. Để câu lệnh vậy có lỗi thì t mới detail phần đầu như workbook hay wksheet. Còn thấy chạy vẫn ngon mà lệnh cũng vài dòng chưa dính đến nhiều file, chưa rối lên kệ. :)
 
Lần chỉnh sửa cuối:
Upvote 0
Bác k đọc hết comment em à? Dòng 15 sheet costsheet bác k thấy chữ conductor à? Quan trọng là bác có sửa được file thì úp lên cho em down về chạy thử????
Bây giờ đã thấy C15 = CONDUCTOR 0.05X0.7 SNT2
Muốn tìm ô có 1 phần là CONDUCTOR thì ÍT NHẤT phải là ̣(xlPart)

Mã:
b = Range("A:M").Find("Conductor", , xlValues, xlPart).Row

Tất nhiên tốt nhất nên là
Mã:
Dim rng As Range
...
Set rng = Range("A:M").Find("Conductor", , xlValues, xlPart)
If not rng Is Nothing then
    b = rng.Row
    Cot = rng. Column
End If

Các FIND khác cũng tương tự
 
Lần chỉnh sửa cuối:
Upvote 0
Bây giờ đã thấy C15 = CONDUCTOR 0.05X0.7 SNT2
Muốn tìm ô có 1 phần là CONDUCTOR thì ÍT NHẤT phải là ̣(xlPart)

Mã:
b = Range("A:M").Find("Conductor", , xlValues, xlPart).Row

Tất nhiên tốt nhất nên là
Mã:
Dim rng As Range
...
Set rng = Range("A:M").Find("Conductor", , xlValues, xlPart)
If not rng Is Nothing then
    b = rng.Row
    Cot = rng. Column
End If

Các FIND khác cũng tương tự
Chỉ duy nhất biến b bị vậy. Các biến khác code như cũ vẫn ngon. Cụ tỉ là biến a dù "amount" cũng chỉ là 1 phần giá trị của ô nhưng vẫn chạy ok ngay từ đầu. Mà file hôm trước code như vậy vẫn chạy nuột. Dù sao file đã test ok. Cảm ơn các bác đã nhiệt tình.
 
Upvote 0
Chỉ duy nhất biến b bị vậy. Các biến khác code như cũ vẫn ngon. Cụ tỉ là biến a dù "amount" cũng chỉ là 1 phần giá trị của ô nhưng vẫn chạy ok ngay từ đầu. Mà file hôm trước code như vậy vẫn chạy nuột. Dù sao file đã test ok. Cảm ơn các bác đã nhiệt tình.
Nếu đã chạy nuột thì lần sau bạn cứ viết theo như ý mình thôi.
 
Upvote 0
Đúng là chưa thấy quan tài, chưa đỗ lệ, hết biết luôn!

QTJPG.JPG
 
Lần chỉnh sửa cuối:
Upvote 0
Đúng là chưa thấy quan tài, chưa đỗ lệ, hết biết luôn!
Tại các bác bắt bệnh nhầm, xem chưa kỹ rồi đổ cho người ta mà anh hùng bàn phím xong làm kiểu chữ to nổi bần bật nhức hết mắt kiểu "nói mấy lần nghe k hiểu à?" thế kia em mí gay gắt thế :)
[/QUOTE]
 
Upvote 0
Nào mình có dám bắt bệnh với kiểu viết code như của bạn.
& quả thật mình cũng chưa đọc quá mươi dòng lệnh của code bạn viết. Nguyên nhân là mình rất dị ứng với kiểu cách viết code như vậy.
Mình không có ý tìm ra bệnh trong mấy dòng code đó của bạn.
Mình chỉ khuyến cáo viết code cho chắc chắn hơn, tránh xa những nguy cơ tìềm ẩn khi mấy cụm từ cần tìm không có trong file thôi mà & xin chào tạm biệt bạn!
 
Upvote 0
Em chỉ sửa mỗi biến b thôi bác. Comment hữu ích nhất ngày của bác cho e đấy. Nhìn mấy comment trước của bác em tưởng k nhờ cậy được gì.
Thực ra tôi không muốn giải thích gì nữa nên tôi chỉ cho bạn con cá.

Bạn có biết vì sao không cần sửa mà vẫn có
Các biến khác code như cũ vẫn ngon. Cụ tỉ là biến a dù "amount" cũng chỉ là 1 phần giá trị của ô nhưng vẫn chạy ok ngay từ đầu
Nếu bạn hỏi thì mặc dù không muốn nữa nhưng tôi sẽ giải thích, vì sao có sự khác biệt giữa Amount và Conductor. Nhưng do thái độ của bạn nên tôi thôi.

Bạn có biết vì sao bạn chỉ phải sửa b = ... mà không cần sửa
Mã:
d = Columns(cot).Find("cutting").Row
???

Bạn muốn thử không?
1. Hãy biến các dòng từ a = Range("A:M").Find("Amount").Column tới On Error Resume Next thành chú thích.
2. Do d = ... dùng Cot nên sau khi biến Cot = ... thành chú thích thì dòng d = ... sẽ có lỗi. Nhưng ta biết là Cot = 3 (Conductor nằm ở C15). Vậy sau dòng On Error Resume Next hãy thêm dòng
Mã:
Cot = 3

Bây giờ chạy code xem có chạy nuột không hay sẽ có lỗi tại dòng d = ... nhé.

Kết luận:
- sửa dòng b = ... thì dòng d = ... không cần sửa vẫn chạy nuột ***
- không sửa dòng b = ... mà chỉ nhập cứng Cot = 3 thì dòng d = ... sẽ có lỗi.

Có nguyên nhân cả đấy. Nhưng với thái độ của bạn tôi không còn muốn giải thích.

***: Ngoài ra tôi nói sửa hết vì muốn tập cho bạn thói quen viết code sao cho không phụ thuộc vào hên xui. Sao cho lúc nào cũng chạy nuột chứ không phải "hôm qua", "lúc nãy" chạy nuột mà "bây giờ" lại không nuột.

Nhưng thôi. Với kiểu đó thì một ngày đẹp trời sẽ lại không nuột vì bạn vẫn chưa biết vì sao với Amount thì "nuột" mà với Conductor thì không "nuột". Tại sao khi sửa b = ... thì không cần sửa d = ...
 
Lần chỉnh sửa cuối:
Upvote 0
Tại các bác bắt bệnh nhầm, xem chưa kỹ rồi đổ cho người ta mà anh hùng bàn phím xong làm kiểu chữ to nổi bần bật nhức hết mắt kiểu "nói mấy lần nghe k hiểu à?" thế kia em mí gay gắt thế
Bạn viết dòng
Conductor nàm ở dòng 15 sheet costsheet mà bác nhìn k ra à?

trong thẻ [QUOT.] ... [/QUOT.] nên nó bị giấu như trong hình

an.JPG

Nếu bạn viết bình thường như là bài trả lời chứ không như là đoạn trích thì không bao giờ nó bị ẩn. Làm sao tôi biết được là bạn viết câu trả lời tôi trong thẻ [Q ...] ... [/Q ...]. Tôi không ngờ trong phần TRÍCH lại có câu trả lời, vì thế tôi không mở ra. Hãy tập viết cho chuẩn trước khi trách cứ người khác.

Bạn cho tôi là anh hùng bàn phím? Bạn sẽ không bao giờ còn cơ hội viết dòng như thế đâu.
 
Upvote 0
Bái phục mức độ kiên nhẫn của bác.
Cái câu ở bài #16 mà bác cũng hiểu được.
Tôi thì chỉ hiểu được cái mệnh đề đầu "Tại các bác bắt bệnh nhầm, xem chưa kỹ rồi đổ cho người ta"
Nhưng lời kế sau đó, kể từ chữ "mà" trở đi, văn phạm tét bét hết. Chả hiểu trách ai và trần tình gì.

Chú: đây là tôi gởi "compliment" chứ không phải "comment" nhé. :D:D:D
 
Upvote 0
Web KT

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

Back
Top Bottom