Lệnh select ? (2 người xem)

Liên hệ QC

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

Hoàng Nhật Phương

Thành viên gắn bó
Tham gia
5/11/15
Bài viết
1,895
Được thích
1,219
Xin chào các bạn,

Tôi đang vướng một trường hợp như sau:
Với file đính kèm,

Khi tôi muốn lựa chọn ô B16, tôi dùng câu lệnh:
Mã:
Range("B" & Range("B1048576").End(xlUp).Row+1).Select 'B16

Khi tôi muốn lựa chọn ô B23, tôi dùng câu lệnh:
Mã:
Range("B" & Range("E1048576").End(xlUp).Row).Select 'B23

Vậy khi tôi muốn lựa chọn vùng B16:B23, thì câu lệnh phải viết như thế nào?
Các bạn giúp tôi trường hợp này với ạ.
 

File đính kèm

Lần chỉnh sửa cuối:
Công nhận chủ đề này nóng thật, bài viết nhanh chóng mặt luôn, bài viết của thầy Ndu hay quá, đáng học hỏi.
 
Upvote 0
Cảm ơn Ba Tê;

Code trên của bạn trong trường hợp duyệt lần lượt từ trên xuống.
Đúng ý tôi rồi, bạn có thể thay giúp tôi câu lệnh:
Mã:
 MsgBox Cll.Address, , "GPE"
bằng 1 câu lệnh điền tất cả các ô trống được tìm thấy là 1 giá trị "OK" được không?

Nếu có thể nhờ bạn giúp tôi thêm trường hợp lựa chọn đồng loạt tất cả cùng 1 lúc ạ.

Bạn lấy Code của ndu... bên trên sửa thành như vầy:
Tại có hot girl nên nó vậy ###@#!

PHP:
Range("E1:E23").SpecialCells(xlCellTypeConstants).Offset(, -3).SpecialCells(xlCellTypeBlanks).Value = "OK"
 
Upvote 0
Công nhận chủ đề này nóng thật, bài viết nhanh chóng mặt luôn, bài viết của thầy Ndu hay quá, đáng học hỏi.

Vâng, công nhận là rất nhanh ạ .
Ở đây bạn nào cũng giỏi và nhiệt tình.

hk9856com17922914.gif

Kết quả đến giờ phút này với tôi đã mĩ mãn.
Xin cảm ơn tất cả các bạn rất nhiều.
 
Upvote 0
Đúng rồi ạ, code bị lỗi nếu dữ liệu của 2 cột bằng nhau và không có khoảng trông ạ,.......... :-=

Vậy thì tạm xài cái GPE2()
PHP:
Public Sub GPE2()
Dim Cll As Range
For Each Cll In Range("B1", Range("B6000").End(xlUp))
    If Cll = Empty And Cll.Offset(, 3) <> Empty Then Cll.Value = "OK"
Next Cll
End Sub
 
Upvote 0
Đúng rồi ạ, code bị lỗi nếu dữ liệu của 2 cột bằng nhau và không có khoảng trông ạ,.......... :-=

Thuật toán là vậy còn chuyện áp dụng thực tế thì bạn phải biết tùy biến, nhất là với SpecialCells ta phải biết nó bị lỗi khi không tìm thấy. Vậy phải sửa thế này:
Mã:
Sub Test()
  Dim rng As Range
  On Error Resume Next
  Set rng = Range("E1:E23").SpecialCells(xlCellTypeConstants).Offset(, -3).SpecialCells(xlCellTypeBlanks)
  On Error GoTo 0
  If Not rng Is Nothing Then rng.Value = "ok"
End Sub
 
Upvote 0
Tác giả bài đăng thích thật!

Vừa được cho cần câu vừa được cho đủ loại thủy hải sản để chế món!
 
Upvote 0
Cảm ơn ndu96081631; cảm ơn Ba Tê;
Tôi đã thử code cuối của 2 bạn kết quả đã mĩ mãn.:-=

Tác giả bài đăng thích thật!
Vừa được cho cần câu vừa được cho đủ loại thủy hải sản để chế món!
Hi,cảm ơn bạn đã hỗ trợ.
Bởi vì tôi rất kém cỏi,mới bắt đầu tìm hiểu đến code.Nên có thể đối với các bạn bài viết của tôi chỉ ở mức độ sơ cấp vì thế mới được nhiều bạn tham gia góp ý như vậy.


Ai có "cần câu" thì cho "cần câu"
Như trong "khu này" thì thấy có "cần câu" của anh Ba là tốt nhất. Ẹc... Ẹc...
Vâng đúng thế ạ, "cần câu" của anh ấy thật là lợi hại anh ấy đã "câu hộ" giúp tôi và câu đúng nhà có --=0


Một lần nữa cảm ơn tất cả các bạn rất nhiều.


A phiền ndu96081631 giải thích thêm ạ:
Mã:
Sub Test()
  Dim rng As Range
  On Error Resume Next
  Set rng = Range("E1:E23").SpecialCells(xlCellTypeConstants).Offset(, -3).SpecialCells(xlCellTypeBlanks)
  On Error GoTo 0
  If Not rng Is Nothing Then rng.Value = "ok"
End Sub

Code trên tại sao phải cần đến 2 dòng On Error... ạ.
Tôi bỏ dòng dưới: On Error GoTo 0 code vẫn chạy không có lỗi gì cả. Phải chẳng nó còn lỗi trong trường hợp nào đó nữa.
 
Upvote 0
Cảm ơn ndu96081631; cảm ơn Ba Tê;
Tôi đã thử code cuối của 2 bạn kết quả đã mĩ mãn.:-=


Hi,cảm ơn bạn đã hỗ trợ.
Bởi vì tôi rất kém cỏi,mới bắt đầu tìm hiểu đến code.Nên có thể đối với các bạn bài viết của tôi chỉ ở mức độ sơ cấp vì thế mới được nhiều bạn tham gia góp ý như vậy.



Vâng đúng thế ạ, "cần câu" của anh ấy thật là lợi hại anh ấy đã "câu hộ" giúp tôi và câu đúng nhà có --=0


Một lần nữa cảm ơn tất cả các bạn rất nhiều.


A phiền ndu96081631 giải thích thêm ạ:
Mã:
Sub Test()
  Dim rng As Range
  On Error Resume Next
  Set rng = Range("E1:E23").SpecialCells(xlCellTypeConstants).Offset(, -3).SpecialCells(xlCellTypeBlanks)
  On Error GoTo 0
  If Not rng Is Nothing Then rng.Value = "ok"
End Sub

Code trên tại sao phải cần đến 2 dòng On Error... ạ.
Tôi bỏ dòng dưới: On Error GoTo 0 code vẫn chạy không có lỗi gì cả. Phải chẳng nó còn lỗi trong trường hợp nào đó nữa.
Mình nghĩ là nên thêm dòng on error goto 0 là nên có để phục hồi hệ thống tìm lỗi của excel. Nếu không thì sau câu resume next thì excel không thèm quan tâm đến lỗi nào nữa cả. Mình đoán vậy nhưng không biết đúng không
 
Lần chỉnh sửa cuối:
Upvote 0
A phiền ndu96081631 giải thích thêm ạ:
Mã:
Sub Test()
  Dim rng As Range
  On Error Resume Next
  Set rng = Range("E1:E23").SpecialCells(xlCellTypeConstants).Offset(, -3).SpecialCells(xlCellTypeBlanks)
  On Error GoTo 0
  If Not rng Is Nothing Then rng.Value = "ok"
End Sub

Code trên tại sao phải cần đến 2 dòng On Error... ạ.
Tôi bỏ dòng dưới: On Error GoTo 0 code vẫn chạy không có lỗi gì cả. Phải chẳng nó còn lỗi trong trường hợp nào đó nữa.
Người ta thường dùng On Error Resume Next để bẫy lỗi nhưng có 2 suy nghĩ khác nhau:
- Một là: Cứ đặt On Error Resume Next cho chắc, thây kệ bên dưới có lỗi gì thì anh Bill cũng cho qua
- Hai là: Ta nắm chắc được tiến trình, biết trước lỗi sẽ xuất hiện chỗ nào nên cũng biết chỗ nào cần gỡ bẫy và chỗ nào cần đặt lại bẫy
Ở đây, tôi biết chắc SpecialCells có thể xảy ra lỗi nên tôi đặt On Error Resume Next phía trên nó nhằm mục đích có lỗi thì "cho em xin đi qua". Khi qua được rồi phải hoàn trả lại nhiệm vụ bẫy lỗi cho anh Bill, để từ đây nếu có lỗi gì khác nữa anh Bill lại báo cho ta biết, và đó chính là câu lệnh On Error Goto 0. Từ chỗ này trở đi, anh Bill lại tiếp tục theo dõi code và thông báo nếu có lỗi xuất hiện. Với code trên, On Error Goto 0 tỏ ra không mấy tác dụng nhưng tôi vẫn cố tình giới thiệu, bởi nếu phía dưới nó bạn còn nhiều đoạn code nữa thì câu lệnh này sẽ phát huy tác dụng ngay
Nói tóm lại:
- On Error Resume Next: Mở cổng gác, cho qua mọi thứ mà không xét hỏi gì
- On Error Goto 0: Đặt lại cổng gác, tiếp tục xét hỏi
-------------------------
Theo quan điểm cá nhân tôi: Bẫy lỗi cho code là một công việc khó khăn, đòi hỏi đầu tư nhiều chất xám hơn cả việc viết code thực thi nhiệm vụ nào đó, bởi rất khó đoán được lỗi nào có khả năng xuất hiện và ta chỉ có thể "biết" thông qua kinh nghiệm (làm nhiều, biết nhiều)
 
Lần chỉnh sửa cuối:
Upvote 0
Ahihi , Cảm ơn quanghai1969, cảm ơn ndu96081631 nhiều nhé, cái này hay đấy ạ =))
Tôi lại được biết thêm một cái nữa rồi. :-=

Nhân tiện nói đến vấn đề bắt lỗi, tôi còn một thắc mắc:
nếu không có On Error Resume Next ,thì code sẽ lỗi khi không có điều kiện nào thỏa mãn:
Untitled.jpg

Vậy trong trường hợp này ta có thể thay việc dùng On Error Resume Next bằng một thông báo lỗi mặc định của hệ thống cho người dùng biết được không?
Nói cách khác là làm sao để không hiện cái thông báo trong ảnh đính kèm này nữa, mà thay bằng cái thông báo dạng msgbox gì đó chẳng hạn.
hic... không biết câu hỏi này có ngu ngơ hay không mà em có cảm giác bất an quá ah. **~**
 
Upvote 0
Ahihi , Cảm ơn quanghai1969, cảm ơn ndu96081631 nhiều nhé, cái này hay đấy ạ =))
Tôi lại được biết thêm một cái nữa rồi. :-=

Nhân tiện nói đến vấn đề bắt lỗi, tôi còn một thắc mắc:
nếu không có On Error Resume Next ,thì code sẽ lỗi khi không có điều kiện nào thỏa mãn:
View attachment 174339

Vậy trong trường hợp này ta có thể thay việc dùng On Error Resume Next bằng một thông báo lỗi mặc định của hệ thống cho người dùng biết được không?
Nói cách khác là làm sao để không hiện cái thông báo trong ảnh đính kèm này nữa, mà thay bằng cái thông báo dạng msgbox gì đó chẳng hạn.
hic... không biết câu hỏi này có ngu ngơ hay không mà em có cảm giác bất an quá ah. **~**
Sub Test()
Dim rng As Range
On Error GoTo ErrorDescription
Set rng = Range("E1:E23").SpecialCells(xlCellTypeConstants).Offset(, -3).SpecialCells(xlCellTypeBlanks)
ErrorDescription:
MsgBox Err.Description
End Sub

PS: Mình cảm giác bạn suy nghĩ hơi sai sai gì gì đó rồi nha
 
Upvote 0
Sub Test()
Dim rng As Range
On Error GoTo ErrorDescription
Set rng = Range("E1:E23").SpecialCells(xlCellTypeConstants).Offset(, -3).SpecialCells(xlCellTypeBlanks)
ErrorDescription:
MsgBox Err.Description
End Sub

PS: Mình cảm giác bạn suy nghĩ hơi sai sai gì gì đó rồi nha

Chính là cái này ạ.
Cảm ơn quanghai1969 rất nhiều.
Tôi chỉ muốn tìm hiểu thêm về vấn đề bắt lỗi thôi ạ, vì có lần tôi chạy thử 1 mã code nhìn trên msgbox không có nội dung thông báo nhưng khi chạy xuất hiện nội dung vì thế tôi mới suy nghĩ đến điều này. :-=
Còn vấn đề liên quan đến select đã được các bạn tận tình giúp đỡ và kết quả mĩ mãn rồi ạ.
 
Upvote 0
Để nhận được đó là lỗi gì, ta có trong VBA hàm Error$(); & (hình như là phương thức thì phải) : Err

Ta nên vầy
PHP:
Sub ThuLoi()
On Error Goto GPE


Err_:    Exit sub
GPE:
       If Err<> 1004 then
   MsgBox Error$
   Resume Err_
Else
   Resume Next
End If
End Sub
 
Upvote 0
Để nhận được đó là lỗi gì, ta có trong VBA hàm Error$(); & (hình như là phương thức thì phải) : Err

Ta nên vầy
PHP:
Sub ThuLoi()
On Error Goto GPE


Err_:    Exit sub
GPE:
       If Err<> 1004 then
   MsgBox Error$
   Resume Err_
Else
   Resume Next
End If
End Sub



Xin chào Hoang2013,
Bạn có thể chỉ dẫn thêm cho tôi cách sử dụng code trên của bạn được không?
Tôi chạy không thấy có thông báo gì hết bạn ah.
 
Upvote 0
Những hàng còn trống trong Code là những dòng lệnh của bạn
Ví dụ:
PHP:
Sub ThuLoi()
On Error Goto GPE
 Dim NHAT As Integer

 NHAT=100/0


Err_:    Exit sub
GPE:
       If Err<> 1004 then
   MsgBox Error$
   Resume Err_
Else
   Resume Next
End If
End Sub
 
Upvote 0
Cảm ơn bạn, mới đầu tôi cũng nghĩ như vậy nên đã đưa 2 dòng code sau vào khoảng trống:
Dim rng As Range
Set rng = Range("E1:E23").SpecialCells(xlCellTypeConstants).Offset(, -3).SpecialCells(xlCellTypeBlanks)
nhưng tôi thấy không có thông báo gì, còn code của bạn quanghai1969 thì có.


Giờ tôi thêm 1 dòng :
Dim rng As Range
Set rng = Range("E1:E23").SpecialCells(xlCellTypeConstants).Offset(, -3).SpecialCells(xlCellTypeBlanks)
rng.Select


thì đã thấy thông báo xuất hiện thông báo lỗi, đã bắt đầu hiểu được chút ít.
Cảm ơn các bạn rất nhiều.
 
Upvote 0
Web KT

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

Back
Top Bottom