Nhờ các bạn khắc phục lỗi range giúp mình với, cảm ơn các bạn rất nhiều

Liên hệ QC

vuha

Thành viên hoạt động
Tham gia
28/4/08
Bài viết
159
Được thích
34
Mình muốn in liên tục các phiếu từ Cột AT, sheet 5. Mình đã tạo command button gán với code này nhưng khi chạy thì báo lỗi như file đính kèm mà chưa biết khắc phục sao. Mong các bạn chỉ cách sửa code cho đúng giúp mình với. Cảm ơn các bạn rất nhiều.
 

File đính kèm

  • TB loi.jpg
    TB loi.jpg
    16.7 KB · Đọc: 30
  • Code bi loi.jpg
    Code bi loi.jpg
    51.6 KB · Đọc: 29
Mình muốn in liên tục các phiếu từ Cột AT, sheet 5. Mình đã tạo command button gán với code này nhưng khi chạy thì báo lỗi như file đính kèm mà chưa biết khắc phục sao. Mong các bạn chỉ cách sửa code cho đúng giúp mình với. Cảm ơn các bạn rất nhiều.
Mở help nhập từ khóa range
 
Upvote 0

File đính kèm

  • search range.jpg
    search range.jpg
    272.3 KB · Đọc: 11
Upvote 0
Mình muốn in liên tục các phiếu từ Cột AT, sheet 5. Mình đã tạo command button gán với code này nhưng khi chạy thì báo lỗi như file đính kèm mà chưa biết khắc phục sao. Mong các bạn chỉ cách sửa code cho đúng giúp mình với. Cảm ơn các bạn rất nhiều.
Thay thử xem sao:
[ = ("
] = ")
 
Upvote 0
Hic, mình mở range thì ra hàng loạt như hình đính kèm mà chưa thấy cái mình cần tìm đâu cả, mong bạn trực tiếp sửa giúp code với. Cảm ơn bạn rất nhiều.
Nó như vậy:
1632806621114.png

Code bạn trong range lại là một range, nhưng theo tài liệu thì nó là tên của range
Bạn hiểu chỗ sai của bạn chưa?
Mà lần sau bạn chú ý cái tiêu đề nhé, nó chưa đúng tính chất là tiêu đề bài viết!
 
Upvote 0
Nó như vậy:
View attachment 266831

Code bạn trong range lại là một range, nhưng theo tài liệu thì nó là tên của range
Bạn hiểu chỗ sai của bạn chưa?
Mà lần sau bạn chú ý cái tiêu đề nhé, nó chưa đúng tính chất là tiêu đề bài viết!
Cảm ơn bạn, mình không hiểu nên mình gửi file lên đây nhờ các bạn sửa code giúp mình nhé. Cảm ơn các bạn nhiều.
Xin lỗi các bạn, mình mở lại file không hiểu sao không thấy code, bị xóa hết rồi là sao nhỉ. Để mình copy lại code rồi up lại nhờ các bạn giúp vậy nhé.
Mình up lại file rồi, nhờ các bạn sửa giúp code để in liên tục phiếu giúp mình nhé. Cảm ơn các bạn rất nhiều.
 

File đính kèm

  • Hoi GPE 28-9.xlsx
    1.6 MB · Đọc: 3
  • Hoi GPE 28-9.xls
    5.8 MB · Đọc: 3
Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn bạn, mình không hiểu nên mình gửi file lên đây nhờ các bạn sửa code giúp mình nhé. Cảm ơn các bạn nhiều.
Xin lỗi các bạn, mình mở lại file không hiểu sao không thấy code, bị xóa hết rồi là sao nhỉ. Để mình copy lại code rồi up lại nhờ các bạn giúp vậy nhé.
File có đuôi là .xlsx sẽ xóa code, muốn giữ code phải lưu file với phần mở rộng là .xls, .xlsm hoặc .xlsb

.
 
Upvote 0
Mình up lại file rồi, nhờ các bạn sửa giúp code để in liên tục phiếu giúp mình nhé. Cảm ơn các bạn rất nhiều.
Trong ảnh ở bài #1 thì là

Set rng = Range(Sheet5.[AT10], Sheet5.[AT65535].End(xlUp))

Trong khi đó code ở bài #7 lại là

Set rng = Range(Sheet4.[AT10], Sheet4.[AT65535].End(xlUp))

Thậm chí tập tin đính kèm không có Sheet4, nhìn trên hình ở dưới thì thấy.

range.jpg

Thôi thì đoán mò. 200% chắc chắn nguyên nhân như sau. Giả sử là code như bài #1, tức

Set rng = Range(Sheet5.[AT10], Sheet5.[AT65535].End(xlUp)) (A)

Sheet5 là sheet CSDL. 2 CommandButton và code nằm ở Sheet9 = sheet PN-PX. Khi click CommandButton thì Sheet9 là sheet hoạt động - active. Vì thế code ở (A) là

Set rng = Range(Sheet5.[AT10], Sheet5.[AT65535].End(xlUp)) = Sheet9.Range(Sheet5.[AT10], Sheet5.[AT65535].End(xlUp))

Không có lỗi mới lạ. Nghĩa của code là:

hãy ghi nhớ Range trên sheet9 được xác định bởi 2 cell đầu - Sheet5.[AT10] và cuối - Sheet5.[AT65535].End(xlUp) trên sheet5.

Phải sửa thành

Mã:
Set rng = Sheet5.Range(Sheet5.[AT10], Sheet5.[AT65535].End(xlUp))

hoặc

With Sheet5
    Set rng = .Range(.[AT10], .[AT65535].End(xlUp))
End With

Đấy là nói về sự đúng đắn của code. Còn trong trường hợp của chủ thớt do trong cột AT có công thức tới tận AT2144 nên chắc chắn rng = AT10:AT2144, do vậy khỏi phải End(xlUp) làm chi cho mệt, đơn giản hơn

Mã:
Set rng = Sheet5.Range("AT10:AT2144")

Bài học miễn phí: Khi sheet active có thể thay đổi do người dùng, hoặc chắc chắn sheet active sẽ khác sheet cần truy cập tới, thì bắt buộc phải viết tường minh. Không thể là RANGE(...) mà phải là <sheet cần truy cập>.RANGE(...)
 
Lần chỉnh sửa cuối:
Upvote 0
Trong ảnh ở bài #1 thì là

Set rng = Range(Sheet5.[AT10], Sheet5.[AT65535].End(xlUp))

Trong khi đó code ở bài #7 lại là

Set rng = Range(Sheet4.[AT10], Sheet4.[AT65535].End(xlUp))

Thậm chí tập tin đính kèm không có Sheet4, nhìn trên hình ở dưới thì thấy.

View attachment 266903

Thôi thì đoán mò. 200% chắc chắn nguyên nhân như sau. Giả sử là code như bài #1, tức

Set rng = Range(Sheet5.[AT10], Sheet5.[AT65535].End(xlUp)) (A)

Sheet5 là sheet CSDL. 2 CommandButton và code nằm ở Sheet9 = sheet PN-PX. Khi click CommandButton thì Sheet9 là sheet hoạt động - active. Vì thế code ở (A) là

Set rng = Range(Sheet5.[AT10], Sheet5.[AT65535].End(xlUp)) = Sheet9.Range(Sheet5.[AT10], Sheet5.[AT65535].End(xlUp))

Không có lỗi mới lạ. Nghĩa của code là:

hãy ghi nhớ Range trên sheet9 được xác định bởi 2 cell đầu - Sheet5.[AT10] và cuối - Sheet5.[AT65535].End(xlUp) trên sheet5.

Phải sửa thành

Mã:
Set rng = Sheet5.Range(Sheet5.[AT10], Sheet5.[AT65535].End(xlUp))

hoặc

With Sheet5
    Set rng = .Range(.[AT10], .[AT65535].End(xlUp))
End With

Đấy là nói về sự đúng đắn của code. Còn trong trường hợp của chủ thớt do trong cột AT có công thức tới tận AT2144 nên chắc chắn rng = AT10:AT2144, do vậy khỏi phải End(xlUp) làm chi cho mệt, đơn giản hơn

Mã:
Set rng = Sheet5.Range("AT10:AT2144")

Bài học miễn phí: Khi sheet active có thể thay đổi do người dùng, hoặc chắc chắn sheet active sẽ khác sheet cần truy cập tới, thì bắt buộc phải viết tường minh. Không thể là RANGE(...) mà phải là <sheet cần truy cập>.RANGE(...)
Cảm ơn bạn nhiều lắm. Đúng là sheet 5 và sheet 9 như bạn nói, vì code sau mình copy lại nhưng quên chưa sửa. Cảm ơn các bạn rất nhiều.
 
Upvote 0
Trong ảnh ở bài #1 thì là

Set rng = Range(Sheet5.[AT10], Sheet5.[AT65535].End(xlUp))

Trong khi đó code ở bài #7 lại là

Set rng = Range(Sheet4.[AT10], Sheet4.[AT65535].End(xlUp))

Thậm chí tập tin đính kèm không có Sheet4, nhìn trên hình ở dưới thì thấy.

View attachment 266903

Thôi thì đoán mò. 200% chắc chắn nguyên nhân như sau. Giả sử là code như bài #1, tức

Set rng = Range(Sheet5.[AT10], Sheet5.[AT65535].End(xlUp)) (A)

Sheet5 là sheet CSDL. 2 CommandButton và code nằm ở Sheet9 = sheet PN-PX. Khi click CommandButton thì Sheet9 là sheet hoạt động - active. Vì thế code ở (A) là

Set rng = Range(Sheet5.[AT10], Sheet5.[AT65535].End(xlUp)) = Sheet9.Range(Sheet5.[AT10], Sheet5.[AT65535].End(xlUp))

Không có lỗi mới lạ. Nghĩa của code là:

hãy ghi nhớ Range trên sheet9 được xác định bởi 2 cell đầu - Sheet5.[AT10] và cuối - Sheet5.[AT65535].End(xlUp) trên sheet5.

Phải sửa thành

Mã:
Set rng = Sheet5.Range(Sheet5.[AT10], Sheet5.[AT65535].End(xlUp))

hoặc

With Sheet5
    Set rng = .Range(.[AT10], .[AT65535].End(xlUp))
End With

Đấy là nói về sự đúng đắn của code. Còn trong trường hợp của chủ thớt do trong cột AT có công thức tới tận AT2144 nên chắc chắn rng = AT10:AT2144, do vậy khỏi phải End(xlUp) làm chi cho mệt, đơn giản hơn

Mã:
Set rng = Sheet5.Range("AT10:AT2144")

Bài học miễn phí: Khi sheet active có thể thay đổi do người dùng, hoặc chắc chắn sheet active sẽ khác sheet cần truy cập tới, thì bắt buộc phải viết tường minh. Không thể là RANGE(...) mà phải là <sheet cần truy cập>.RANGE(...)
Bạn ơi, sao mình sửa code như bạn nói rồi mà khi click command button không thấy tín hiệu gì cả , không thấy in ra mà cũng không thấy báo lỗi là sao nhỉ.
Mình có thử nhấp phải chuột vào command button để kiểm tra xem đã gán với code chưa nhưng cũng không thấy xổ menu khi click phải chuột là sao nhỉ. Bạn giúp mình với nhé. Cảm ơn bạn rất nhiều.
Mình xin lỗi vì quên chưa đính kèm file mình đã sửa mà chưa được. Mình up rồi, nhờ bạn giúp mình với. Cảm ơn bạn nhiều.
 

File đính kèm

  • Hoi GPE 29-9.xls
    5.8 MB · Đọc: 3
Lần chỉnh sửa cuối:
Upvote 0
Bạn ơi, sao mình sửa code như bạn nói rồi mà khi click command button không thấy tín hiệu gì cả , không thấy in ra mà cũng không thấy báo lỗi là sao nhỉ.
Mình có thử nhấp phải chuột vào command button để kiểm tra xem đã gán với code chưa nhưng cũng không thấy xổ menu khi click phải chuột là sao nhỉ. Bạn giúp mình với nhé. Cảm ơn bạn rất nhiều.
Bạn nên gửi theo file đính kèm thì kiểm tra dễ hơn là diễn tả thế này, vì đôi khi mình diễn tả cũng đâu có đủ và đúng hết như trong file.
 
Upvote 0
Bạn nên gửi theo file đính kèm thì kiểm tra dễ hơn là diễn tả thế này, vì đôi khi mình diễn tả cũng đâu có đủ và đúng hết như trong file.
Mình quên kèm file, mình đã đính kèm tại bài #11 rồi, mong các bạn bớt chút thời gian giúp mình với. Cảm ơn các bạn nhiều.
 
Upvote 0
Bạn ơi, sao mình sửa code như bạn nói rồi mà khi click command button không thấy tín hiệu gì cả , không thấy in ra mà cũng không thấy báo lỗi là sao nhỉ.
Mình có thử nhấp phải chuột vào command button để kiểm tra xem đã gán với code chưa nhưng cũng không thấy xổ menu khi click phải chuột là sao nhỉ. Bạn giúp mình với nhé.
2 CommandButton chưa được gán cho 2 macro. Bạn phải chuột không thấy gì là do sheet đang được protect.
 
Upvote 0
2 CommandButton chưa được gán cho 2 macro. Bạn phải chuột không thấy gì là do sheet đang được protect.
Bạn ơi, mình unprotect rồi mà vẫn vậy mình gửi lại file bạn xem giúp mình với nhé.
Mình định click phải chuột vào command button để gán với code đó mà không thấy xổ ra menu.
 

File đính kèm

  • Hoi GPE 29-9.xls
    5.8 MB · Đọc: 2
Upvote 0
Bạn ơi, mình unprotect rồi mà vẫn vậy mình gửi lại file bạn xem giúp mình với nhé.
Mình định click phải chuột vào command button để gán với code đó mà không thấy xổ ra menu.
Bạn chưa biết những điều rất sơ đẳng. Nếu bạn thêm:
1. Nếu bạn thêm Button từ Form Controls thì phải chuột và chọn Assign macro.

2. Nếu thêm CommandButton từ ActiveX Controls thì ở thời điểm chọn CommandButton nút Design Mode trong thẻ Developer sẽ được Excel chọn. Về sau muốn sửa gì thì phải tự chọn Design Mode, sau đó mới phải chuột và chọn View Code.

Tóm lại bạn có trường hợp 2. Nhưng bây giờ nếu bạn phải chuột và chọn View Code thì Excel sẽ chèn
Mã:
Private Sub CommandButton1_Click()

End Sub

và

Private Sub CommandButton2_Click()

End Sub

Tại sao? Vì 2 nút của bạn tên là CommandButton1 và CommandButton2. Thế thôi.

Rất có thể trước đó nó là thế và sau khi viết code thì bạn tự đổi tên thành
Mã:
Sub In_tat_ca_PN_click()

và

Sub In_tat_ca_PX_click()

nên sau đó bạn click 2 nút thì không thấy động đậy gì như hiện thời.

Lưu ý: Nếu nút commandbutton có tên là CommandButton1 hoặc hichic thì bắt buộc macro phải là CommandButton1_Click hoặc hichic_Click. Không có chuyện nút tên là CommandButton1 nhưng macro lại là In_tat_ca_PN_click

Hiện tại bạn có CommandButton1 và CommandButton2 và Sub In_tat_ca_PN_click() và Sub In_tat_ca_PX_click(). Bạn có 2 lựa chọn:

1. Chọn View Code -> viết code vào CommandButton1_Click và CommandButton2_Click rồi xóa Sub In_tat_ca_PN_click() và Sub In_tat_ca_PX_click(). Hoặc đơn giản hơn là sửa Sub In_tat_ca_PN_click() và Sub In_tat_ca_PX_click() thành CommandButton1_Click và CommandButton2_Click. Bây giờ tự CommandButton1 và CommandButton2 "tìm lại được" macro của mình.

2. Nếu bạn thích tên macro In_tat_ca_PN_click và In_tat_ca_PX_click thì: trên sheet chọn Design Mode -> chọn CommandButton1 -> ở Name Box (cùng "dòng" với thanh công thức nhưng ở đầu trái) sửa tên CommandButton1 thành In_tat_ca_PN. Làm tương tự với CommandButton2 và sửa thành In_tat_ca_PX.
 
Upvote 0
Bạn chưa biết những điều rất sơ đẳng. Nếu bạn thêm:
1. Nếu bạn thêm Button từ Form Controls thì phải chuột và chọn Assign macro.

2. Nếu thêm CommandButton từ ActiveX Controls thì ở thời điểm chọn CommandButton nút Design Mode trong thẻ Developer sẽ được Excel chọn. Về sau muốn sửa gì thì phải tự chọn Design Mode, sau đó mới phải chuột và chọn View Code.

Tóm lại bạn có trường hợp 2. Nhưng bây giờ nếu bạn phải chuột và chọn View Code thì Excel sẽ chèn
Mã:
Private Sub CommandButton1_Click()

End Sub

và

Private Sub CommandButton2_Click()

End Sub

Tại sao? Vì 2 nút của bạn tên là CommandButton1 và CommandButton2. Thế thôi.

Rất có thể trước đó nó là thế và sau khi viết code thì bạn tự đổi tên thành
Mã:
Sub In_tat_ca_PN_click()

và

Sub In_tat_ca_PX_click()

nên sau đó bạn click 2 nút thì không thấy động đậy gì như hiện thời.

Lưu ý: Nếu nút commandbutton có tên là CommandButton1 hoặc hichic thì bắt buộc macro phải là CommandButton1_Click hoặc hichic_Click. Không có chuyện nút tên là CommandButton1 nhưng macro lại là In_tat_ca_PN_click

Hiện tại bạn có CommandButton1 và CommandButton2 và Sub In_tat_ca_PN_click() và Sub In_tat_ca_PX_click(). Bạn có 2 lựa chọn:

1. Chọn View Code -> viết code vào CommandButton1_Click và CommandButton2_Click rồi xóa Sub In_tat_ca_PN_click() và Sub In_tat_ca_PX_click(). Hoặc đơn giản hơn là sửa Sub In_tat_ca_PN_click() và Sub In_tat_ca_PX_click() thành CommandButton1_Click và CommandButton2_Click. Bây giờ tự CommandButton1 và CommandButton2 "tìm lại được" macro của mình.

2. Nếu bạn thích tên macro In_tat_ca_PN_click và In_tat_ca_PX_click thì: trên sheet chọn Design Mode -> chọn CommandButton1 -> ở Name Box (cùng "dòng" với thanh công thức nhưng ở đầu trái) sửa tên CommandButton1 thành In_tat_ca_PN. Làm tương tự với CommandButton2 và sửa thành In_tat_ca_PX.
Cảm ơn bạn rất rất nhiều.
 
Upvote 0
Web KT

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

Back
Top Bottom