Nhờ giải thích nghĩa của câu lệnh sau. (1 người xem)

Liên hệ QC

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

chuot0106

Thành viên gắn bó
Tham gia
20/1/13
Bài viết
2,567
Được thích
1,670
Nhờ anh chị giải thích hộ em câu lệnh này với ạ:

Arr = .Range("a2:a" & .[a65500].End(xlUp).Row)

Ý nghĩa thì em hiểu nôm na là gán giá trị cho mảng động arr nhưng em chưa hiểu chỗ "a2:a" & .[a65500].End(xlUp).Row
 
Lần chỉnh sửa cuối:
Nhờ anh chị giải thích hộ em câu lệnh này với ạ. Ý nghĩa thì em hiểu nôm na là gán giá trị cho mảng động arr nhưng em chưa hiểu chỗ ""a2:a" & .[a65500].End(xlUp).Row"
Arr = .Range("a2:a" & .[a65500].End(xlUp).Row)

1-.[a65500]: cái này là cell cuối cùng trong ẽxcel 2003
2-.End(xlUp): lệnh này là nó dò ngược lên...........tương tự như vậy bạn tìm hiểu các lệnh end(xldown),end(xltoleft),end(xltoright)...giống như mình nhấn Ctrl mũi tên lên xuống,phải, trái vậy đó
3-.row: để nó lấy số dòng

vậy lệnh trên là dò từ dòng cuối cùng trong cột A cho đến khí nó gặp dòng có data
bi giờ mình ko thích dò từ dòng cuối cùng, mình cũng có thể dò từ dòng 100 chẳng hạn (trường hợp mình biết data của mình ko quá 100 dòng)
.[a100].end(3).row------>end(3) là viết tắt end(xlup)

========
vậy sau khi nó lấy được số dòng cuối cùng, mảng của bạn thành Arr = .Range("a2:a" & số dòng cuối cùng có data)
 
Lần chỉnh sửa cuối:
Upvote 0
1-.[a65500]: cái này là cell cuối cùng trong ẽxcel 2003
2-.End(xlUp): lệnh này là nó dò ngược lên...........tương tự như vậy bạn tìm hiểu các lệnh end(xldown),end(xltoleft),end(xltoright)
3-.row: để nó lấy số dòng

vậy lệnh trên là dò từ dòng cuối cùng trong cột A cho đến khí nó gặp dòng có data
bi giờ mình ko thích dò từ dòng cuối cùng, mình cũng có thể dò từ dòng 100 chẳng hạn (trường hợp mình biết data của mình ko quá 100 dòng)
.[a100].end(3).row------>end(3) là viết tắt end(xlup)
Em cảm ơn anh! Anh cho em hỏi thêm chỗ "a2:a" &
 
Upvote 0
Em cảm ơn anh! Anh cho em hỏi thêm chỗ "a2:a" &

Trước tiên ta tìm hiểu câu lệnh này [a100].end(3).row

end(...) gồm:end(1) con trỏ chạy sang bên trái; end(2) con trỏ chạy sang bên phải; end(3) con trỏ chạy lên trên; end(4) con trỏ chạy xuống dưới.

[a100].end(3) tương tự như hành động đặt con trỏ ở ô A100 rồi nhấn phím Ctrl và phím mũi tên lên. Con trỏ sẽ dừng lại ở ô cuối cùng có dữ liệu tại cột A (đây là cách để tìm dòng cuối cùng có dữ liệu)

.row là chỉ số dòng con trỏ đang đứng (dừng lại).

Ví dụ A15 là dòng cuối cùng có dữ liệu thì [a100].end(3). row = 15

Vậy"a2:a" & [a1000].End(3).Row = "a2:a" & 15 = "a2:a15"

Mã:
Sub Macro1()
MsgBox [a1000].End(3).Row
MsgBox Range("a2:a" & [a1000].End(3).Row).Address
End Sub
 
Upvote 0
Dạ em hiểu dấu & là nối chuỗi nhưng còn "a2:a" nghĩa là gì vậy thầy?
Ta thường ghi: Range("A2:A100") đúng không?

Bây giờ ta muốn tìm giá trị 100 giả sử đó là một ẩn số x nào đó, với x = 100 thì ta ghi:

Range("A2:A" & x)

Chỉ vậy thôi.
 
Upvote 0
Vậy câu lệnh: Arr = .Range("a2:a" & .[a65500].End(xlUp).Row) có nghĩa là dò từ dòng cuối cùng (a65500) lên trên gặp dòng đầu tiên của mảng có chứa dữ liệu chẳng hạn dòng 100. Lúc này mảng arr được gán: arr=.range("a2:a100")
Em hiểu vậy có đúng không các anh chị?
 
Upvote 0
Dạ em hiểu dấu & là nối chuỗi nhưng còn "a2:a" nghĩa là gì vậy thầy?

"Chời" ơi! Tự nhiên ngắt ra 1 khúc để hỏi thì sao giải thích được.
Sao không hỏi Range("A1:A" ...) là cái gì?
Bạn có biết Range("A1:A200") không ?
Hiện giờ do ta chưa biết cái số 200 đó là bi nhiêu, nên dùng 1 biến để tìm, trong trường hợp này biến đó là [A65500].End(xlUp).Row
Và ta không thể viết Range("A1:A[A65500].End(xlUp).Row") (Chuyện này hỏi anh Bill)
Mà phải để thằng [A65500].End(xlUp).Row nằm ngoài các dấu ngoặc kép và nối lại bằng ký tự &
thành như vầy Range("A1:A" & [A65500].End(xlUp).Row)
 
Lần chỉnh sửa cuối:
Upvote 0
Nhân tiện các thầy và các anh chị giải thích giúp em câu lệnh này ạ:
ActiveWindow.SelectedSheets.PrintOut _
From:=1, _
To:=1, _
Copies:=1
Theo em hiểu thì nó có nghĩa là: tại sheet của cửa sổ hiện hành ta thực hiện lệnh in từ trang 1 đến 1 và số bản copy là 1 có đúng ko ạ?
Em chưa hiểu chỗ SelectedSheets.PrintOut đây là cách viết bắt buộc hay tùy theo cách sử dụng của mỗi người ạ???
 
Upvote 0
Với mình thì: Viết câu lệnh từ trái qua fải; Nhưng khi diễn dịch thì nên theo thứ tự ngược lại.
 
Upvote 0
Em chưa hiểu chỗ SelectedSheets.PrintOut đây là cách viết bắt buộc hay tùy theo cách sử dụng của mỗi người ạ???
Đúng ra bạn chỉ cần dịch từ tiếng Anh sang tiếng Việt là hiểu rồi còn gì
SelectedSheets đương nhiên là những sheet đang được chọn
SelectedSheets.PrintOut là in tất cả các sheet đang được chọn (Group sheet ấy). Bạn group bao nhiêu sheet, in bấy nhiêu, không group thì in sheet hiện hành
Đương nhiên bạn cũng có thể ghi Sheet1.PrintOut.... thì sẽ in mỗi sheet1 thôi
Còn mấy cái From, To, Copies gì gì đó bạn hiểu đúng rồi đấy (mà thật ra mấy chữ ấy cũng đã nằm trong hộp thoại Print và cứ dịch sang tiếng Việt cũng tự hiểu)
 
Lần chỉnh sửa cuối:
Upvote 0
Đúng ra bạn chỉ cần dịch từ tiếng Anh sang tiếng Việt là hiểu rồi còn gì
SelectedSheets đương nhiên là những sheet đang được chọn
SelectedSheets.PrintOut là in tất cả các sheet đang được chọn (Group sheet ấy). Bạn group bao nhiêu sheet, in bấy nhiêu, không group thì in sheet hiện hành
Đương nhiên bạn cũng có thể ghi Sheet1.PrintOut.... thì sẽ in mỗi sheet1 thôi
Còn mấy cái From, To, Copies gì gì đó bạn hiểu đúng rồi đấy (mà thật ra mấy chữ ấy cũng đã nằm trong hộp thoại Print và cứ dịch sang tiếng Việt cũng tự hiểu)
Liệu em có thể bỏ ActiveWindow trong câu lệnh ActiveWindow.SelectedSheets.PrintOut được không ạ???
 
Upvote 0
Không bỏ được. Đó là cú pháp
Đương nhiên, nếu chỉ in 1 sheet thì không cần đến ActiveWindow (làm như tôi nói ở bài 15)
Chính xác là em chỉ cần in 1 sheet thôi ạ. Cụ thể là em cần in ở sheet3 thôi. Vậy khi đó câu lệnh sẽ là:
sheet3.printout đúng không thầy?
 
Upvote 0
Chính xác là em chỉ cần in 1 sheet thôi ạ. Cụ thể là em cần in ở sheet3 thôi. Vậy khi đó câu lệnh sẽ là:
sheet3.printout đúng không thầy?
Có những thứ bạn cần phải hỏi để biết, có những thứ bạn tự thực hành để biết, cho nên câu này bạn chỉ cần làm một việc gì đó thực tế khi bạn đã hiểu vấn đề.
 
Upvote 0
Chính xác là em chỉ cần in 1 sheet thôi ạ. Cụ thể là em cần in ở sheet3 thôi. Vậy khi đó câu lệnh sẽ là:
sheet3.printout đúng không thầy?
THÍ NGHIỆM luôn hơn mọi câu hỏi. Nếu nó ra kết quả nghĩa là ta đoán đúng. Nếu sai, lại.. hỏi tiếp
 
Upvote 0
Nhờ anh chị giải thích hộ ý nghĩa của câu lệnh này với ạ:(chữ màu xanh)
Dim sRng as range

"If Not sRng Is Nothing Then..."
 
Upvote 0
Nhờ anh chị giải thích hộ ý nghĩa của câu lệnh này với ạ:(chữ màu xanh)
Dim sRng as range

"If Not sRng Is Nothing Then..."

"Is Nothing" là một toán tử xét xem đối tượng có trống (có thể tạm coi Nothing là NULL) hay không?
Is Nothing = TRUE : đối tượng không xác định

Not là một toán tử trả về nghịch đảo của điều kiện. Not True trả về False, và ngược lại.

Theo luật ưu tiên toán tử thì "Is Nothing" thuộc về nhóm "so sánh" và có bậc ưu tiên cao hơn "Not" thuộc về nhóm "lô gíc". Cho nên lệnh "If Not sRng Is Nothing" sẽ tính "Is Nothing" trước, sau đó mới đảo nghịch (Not) kết quả này.

Tóm lại, "If Not sRng Is Nothing" cho ra kết quả True nếu sRng có chỉ vào một đối tượng nào đó, và False nếu sRng chả chỉ vào đâu cả

Dịch ra lô gíc tiếng Việt: "Nếu sRng không phải là trống (Null) thì ..."
 
Upvote 0
Nhân tiện, các bạn cho mình xin link bài viết nào có nói về với các toán tử trong VBA với ạ!
 
Upvote 0
Web KT

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

Back
Top Bottom