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

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:
Bạn dùng như thế này
Mã:
Range([B65536].End(3).Offset(1, 0), [E65536].End(3).Offset(0, -3)).Select
 
Upvote 0
PHP:
Sub SelectRange()
 
 Range([B1].End(xlDown).Offset(1), [e1000000].End(xlUp).Offset(, -3)).Select
 MsgBox Selection.Address

End Sub
Mã:
Sub RangeSelect()
 Dim Rw As Long

 Rw = [e1000000].End(xlUp).Row
 Range([B1000000].End(xlUp).Offset(1), Cells(Rw, "B")).Select
 MsgBox Selection.Address
End Sub
 
Upvote 0
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?

Tôi viết đúng như của bạn, chỉ thay Select bằng row
Mã:
Dim dongA&, dongB&

dongA = Range("B" & Range("B58576").End(xlUp).Row + 1).Row
dongB = Range("B" & Range("E58576").End(xlUp).Row).Row
Range("B" & dongA, "B" & dongB).Select
 
Upvote 0
Xin cảm ơn các bạn: dhn46 ,Hoang2013 ,haonlh rất nhiều
Tôi đã chạy thử các code trên tất cả đều chạy OK ạ.

Có một trường hợp sau, các bạn xem giúp ạ:
nếu B1:B23 và E1:E23 đều có dữ liệu thì các code trên đều di chuyển đến B23:B24
trong trường hợp này tôi muốn không di chuyển đến đâu cả, có được không ạ? :-=
 
Upvote 0
Xin cảm ơn các bạn: dhn46 ,Hoang2013 ,haonlh rất nhiều
Tôi đã chạy thử các code trên tất cả đều chạy OK ạ.

Có một trường hợp sau, các bạn xem giúp ạ:
nếu B1:B23 và E1:E23 đều có dữ liệu thì các code trên đều di chuyển đến B23:B24
trong trường hợp này tôi muốn không di chuyển đến đâu cả, có được không ạ? :-=
Thử thế này xem sao:
Mã:
If [B65536].End(3).Row <> [E65536].End(3).Row Then Range([B65536].End(3).Offset(1, 0), [E65536].End(3).Offset(0, -3)).Select
 
Upvote 0
Bạn đang tìm hiểu VBA?

Nếu bạn muốn tìm hiểu để áp dụng công việc thì bạn phải "thử".

Trong các code cung cấp cho bạn đều sử dụng Range và Offset. Range thì bạn biết rồi, Offset bạn đã biết chưa?

Vậy bạn hãy tìm hiểu cấu trúc của Offset đi đã, thử nghiệm sau đó rút ra kết luận, đó là cách tiếp cận VBA dễ dàng hơn.

Thân,
 
Upvote 0
Xin cảm ơn các bạn: dhn46 ,Hoang2013 ,haonlh rất nhiều
Tôi đã chạy thử các code trên tất cả đều chạy OK ạ.

Có một trường hợp sau, các bạn xem giúp ạ:
nếu B1:B23 và E1:E23 đều có dữ liệu thì các code trên đều di chuyển đến B23:B24
trong trường hợp này tôi muốn không di chuyển đến đâu cả, có được không ạ? :-=

Bạn muốn có "nếu" thì bạn cho thêm "nếu" vào thôi.
PHP:
Public Sub GPE()
Dim x As Long, y As Long
x = Range("B65536").End(xlUp).Row
y = Range("E65536").End(xlUp).Row
If y > x Then Range("B" & x + 1).Resize(y - x).Select
End Sub
 
Upvote 0
Bạn đang tìm hiểu VBA?

Nếu bạn muốn tìm hiểu để áp dụng công việc thì bạn phải "thử".

Trong các code cung cấp cho bạn đều sử dụng Range và Offset. Range thì bạn biết rồi, Offset bạn đã biết chưa?

Vậy bạn hãy tìm hiểu cấu trúc của Offset đi đã, thử nghiệm sau đó rút ra kết luận, đó là cách tiếp cận VBA dễ dàng hơn.

Thân,

Cảm ơn giaiphap & cảm dhn46 nhiều vì đã đã hỗ trợ cho tôi ạ.
với Range và Offset thì tôi mới tìm hiểu và chỉ biết chút chút về 2 cái này thôi ạ, nếu bạn có các ví dụ minh họa hoặc các tài liệu liên quan thì xin hãy chỉ dẫn thêm cho tôi với ạ.


Bạn muốn có "nếu" thì bạn cho thêm "nếu" vào thôi.
PHP:
Public Sub GPE()
Dim x As Long, y As Long
x = Range("B65536").End(xlUp).Row
y = Range("E65536").End(xlUp).Row
If y > x Then Range("B" & x + 1).Resize(y - x).Select
End Sub
Cảm ơn Ba Tê ,Code của bạn dễ hiểu và hình như là rất sáng tạo :-=
Giúp tôi biết thêm một cái nữa (cái Resize ).
 
Upvote 0
Các bạn cho hỏi thêm:
Trong trường hợp dữ liệu như ảnh kèm bên dưới thì dùng code gì để có thể di chuyển đến được các ô màu vàng ạ.

Untitled.jpg
 
Lần chỉnh sửa cuối:
Upvote 0
Upvote 0
Di chuyển đến các ô là sao, đến lần lượt từng ô hay select tất cả các ô trống (màu vàng)?

Xin chào Ba Tê; cảm ơn bạn đã đã giúp đỡ.
Di chuyển đến tất cả các ô màu vàng cùng một lúc được không bạn,
nghĩa là thế này ạ:
Mã:
Range("B4,B7,B12:B14,B16,B21").Select

Câu hỏi của bạn khiến cho tôi liên tưởng đến nhiều vấn đề liên quan đến các tập tin khác của tôi, nếu có thể mong bạn viết giúp thêm 1 code di chuyển lần lượt từng ô theo chiều từ trên xuống dưới được không ạ?
 
Lần chỉnh sửa cuối:
Upvote 0
Xin chào Ba Tê; cảm ơn bạn đã đã giúp đỡ.
Tất cả cùng một lúc được không bạn?

Câu hỏi của bạn khiến cho tôi liên tưởng đến nhiều vấn đề liên quan đến các tập tin khác của tôi, nếu có thể mong bạn viết giúp thêm 1 code di chuyển lần lượt từng ô theo chiều từ trên xuống dưới được không ạ?

Có 2 Sub cho 2 trường hợp, bạn thử xem:
PHP:
Sub GPE1()
    Range("B1", Range("B6000").End(xlUp)).SpecialCells(xlCellTypeBlanks).Select
End Sub
'------------------------------------------------------------'
Public Sub GPE2()
Dim Cll As Range
For Each Cll In Range("B1", Range("B6000").End(xlUp))
    If Cll = Empty Then MsgBox Cll.Address, , "GPE"
Next Cll
End Sub
 
Upvote 0
Có 2 Sub cho 2 trường hợp, bạn thử xem:
PHP:
Sub GPE1()
    Range("B1", Range("B6000").End(xlUp)).SpecialCells(xlCellTypeBlanks).Select
End Sub
'------------------------------------------------------------'
Public Sub GPE2()
Dim Cll As Range
For Each Cll In Range("B1", Range("B6000").End(xlUp))
    If Cll = Empty Then MsgBox Cll.Address, , "GPE"
Next Cll
End Sub

Xin chào Ba Tê; cảm ơn bạn đã giúp đỡ.


Bạn code còn nhanh hơn cả tôi viết câu hỏi nữa . :)
Xin lỗi bạn vì tôi chưa giải thích rõ ràng, điều kiện di chuyển đến cột B thì phụ thuộc vào cột E,
khi các dòng trong cột E có dữ liệu mà tương ứng với dòng đó tại cột B không có dữ liệu thì lựa chọn các ô không có dữ liệu này tại cột B mà cột E có.


Hic, các bạn hiểu không vậy. Hình như tôi giải thích mà tôi đọc còn thấy khó hiểu.**~**
 
Upvote 0
Xin chào Ba Tê; cảm ơn bạn đã giúp đỡ.


Bạn code còn nhanh hơn cả tôi viết câu hỏi nữa . :)
Xin lỗi bạn vì tôi chưa giải thích rõ ràng, điều kiện di chuyển đến cột B thì phụ thuộc vào cột E,
khi các dòng trong cột E có dữ liệu mà tương ứng với dòng đó tại cột B không có dữ liệu thì lựa chọn các ô không có dữ liệu này tại cột B mà cột E có.


Hic, các bạn hiểu không vậy. Hình như tôi giải thích mà tôi đọc còn thấy khó hiểu.**~**

Là do bạn không giải thích trong file cụ thể, nhìn hình sao biết được "nguyên tắc" của bạn là có "dính liếu" đến cột E?
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 MsgBox Cll.Address, , "GPE"
Next Cll
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Hình như không fải vậy thầy BT ơi!

Nếu bạn biết fương thức UNION() không?

Nếu chưa thì vầy

Khai báo 1 biến kiểu Range, như Dim rRng As Range

Sau đó ta Set rRng = [A65500] nào đó tít khơi xa
Sau đó tạo vòng lặp duyệt các dòng trong cột
Nếu gặp ô đang duyệt & bên cột [E] là rỗng thì ta xài lệnh

Set rRng=UNION(rRng,Cells(j,"B")) 'Cell(J,"B") là ô đang duyệt thuộc cột đang rỗng'

Cuối macro sẽ là câu lệnh

rRng.Select

Chúc thành công mĩ mãn!
 
Upvote 0
Hình như không fải vậy thầy BT ơi!

Nếu bạn biết fương thức UNION() không?

Nếu chưa thì vầy

Khai báo 1 biến kiểu Range, như Dim rRng As Range

Sau đó ta Set rRng = [A65500] nào đó tít khơi xa
Sau đó tạo vòng lặp duyệt các dòng trong cột
Nếu gặp ô đang duyệt & bên cột [E] là rỗng thì ta xài lệnh

Set rRng=UNION(rRng,Cells(j,"B")) 'Cell(J,"B") là ô đang duyệt thuộc cột đang rỗng'

Cuối macro sẽ là câu lệnh

rRng.Select

Chúc thành công mĩ mãn!


Xin chào SA_DQ; cảm ơn bạn đã chỉ dẫn.

Lần đâu tôi biết đến fương thức UNION()
Qua gợi ý của bạn với các từ ngữ bôi đỏ trên, với tôi tuy đã nghe nhưng vẫn còn cảm thấy rất xa lạ.
Tôi biết: khả năng hiện giờ của tôi là chưa thể viết được một đoạn code hoàn chỉnh theo gợi ý của bạn.

Nhờ bạn giúp đỡ thêm ạ.
 
Upvote 0
Xin chào Ba Tê; cảm ơn bạn đã giúp đỡ.


Bạn code còn nhanh hơn cả tôi viết câu hỏi nữa . :)
Xin lỗi bạn vì tôi chưa giải thích rõ ràng, điều kiện di chuyển đến cột B thì phụ thuộc vào cột E,
khi các dòng trong cột E có dữ liệu mà tương ứng với dòng đó tại cột B không có dữ liệu thì lựa chọn các ô không có dữ liệu này tại cột B mà cột E có.


Hic, các bạn hiểu không vậy. Hình như tôi giải thích mà tôi đọc còn thấy khó hiểu.**~**

Chắc là vầy:
Mã:
Range("E1:E23").SpecialCells(xlCellTypeConstants).Offset(,-3).SpecialCells(xlCellTypeBlanks).Select
 
Upvote 0
Hình như không fải vậy thầy BT ơi!

Nếu bạn biết fương thức UNION() không?

Nếu chưa thì vầy

Khai báo 1 biến kiểu Range, như Dim rRng As Range

Sau đó ta Set rRng = [A65500] nào đó tít khơi xa
Sau đó tạo vòng lặp duyệt các dòng trong cột
Nếu gặp ô đang duyệt & bên cột [E] là rỗng thì ta xài lệnh

Set rRng=UNION(rRng,Cells(j,"B")) 'Cell(J,"B") là ô đang duyệt thuộc cột đang rỗng'

Cuối macro sẽ là câu lệnh

rRng.Select

Chúc thành công mĩ mãn!


Anh nói cái GPE1()? Làm thí nó như vầy xem sao.
PHP:
Sub GPE1()
Dim Cll As Range, Tem As String
For Each Cll In Range("B1", Range("B6000").End(xlUp))
    If Cll = Empty And Cll.Offset(, 3) <> Empty Then Tem = Tem & Cll.Address & ","
Next Cll
Range(Left(Tem, Len(Tem) - 1)).Select
End Sub

-------------------------------
"Đụng hàng" ndu......................."gồi". Híc!
 
Upvote 0
Là do bạn không giải thích trong file cụ thể, nhìn hình sao biết được "nguyên tắc" của bạn là có "dính liếu" đến cột E?
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 MsgBox Cll.Address, , "GPE"
Next Cll
End Sub

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 ạ.
 
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.
 
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
Có thể có lỗi, nhưng là mã lỗi Err =1004, nên VBE "cho qua"

Ngoài ra bạn có rỗi nên hiểu thêm về mã lỗi & hàm báo mã lỗi; Bằng macro sau

For J =1 To 9999
Cells(j,"A").value= Err: Cells(J,"C").value=Error()
Next J
 
Upvote 0
Có thể có lỗi, nhưng là mã lỗi Err =1004, nên VBE "cho qua"

Ngoài ra bạn có rỗi nên hiểu thêm về mã lỗi & hàm báo mã lỗi; Bằng macro sau

For J =1 To 9999
Cells(j,"A").value= Err: Cells(J,"C").value=Error()
Next J

Xin chào ChanhTQ@
T
ôi chạy code:
Mã:
Sub zivay()
    For J = 1 To 9999
        Cells(J, "A").Value = Err: Cells(J, "C").Value = Error()
    Next J
End Sub

kết quả trả về từ ô A1:A9999 là duy nhất một số 0.
Bạn có thể chỉ dẫn thêm cho tôi code trên mục đích là gì được không ạ?
 
Upvote 0
À, mình sai rồi
Mã:
For J =1 To 9999
     Cells(j,"A").value= J:   Cells(J,"C").value=Error(J) 
Next J
 
Upvote 0

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

Back
Top Bottom