Hỏi đáp về VBA (các vấn đề căn bản nhất)

Liên hệ QC

havietchuong

Thành viên tiêu biểu
Tham gia
16/6/09
Bài viết
490
Được thích
570
Giới tính
Nam
Nghề nghiệp
Giáo viên tiểu học.
Tôi không biết đặt đặt câu hỏi này nơi nào cho đúng, xin gởi vào đây. Nếu có sai xin thông cảm cho người mới học VBA.
Trong 1 cửa sổ Module có thể ghi nhiều nhiều Macro và mỗi macro có thể ứng với 1 tổ hợp phím nào đó được không?
Tôi thử nhiều lần thì khi được khi không. Không biết nó thế nào? Trong tập tin sau có lỗi gì không trong cách ghi Macro? Cám ơn.
 

File đính kèm

  • baitap1.xls
    28 KB · Đọc: 244
Lần chỉnh sửa cuối:
Sẽ báo lỗi dòng lệnh dưới liền kề vì VBA không hiểu con số 1 mà bạn thay vô chổ lẽ ra là chữ cái 'L'

Hay bạn kỵ húy nên cấm kỵ xài chữ cái này chăng?!
 
Upvote 0
Sẽ báo lỗi dòng lệnh dưới liền kề vì VBA không hiểu con số 1 mà bạn thay vô chổ lẽ ra là chữ cái 'L'

Hay bạn kỵ húy nên cấm kỵ xài chữ cái này chăng?!

Ha....... . Không có phạm quý hay cấm kị gì cả chỉ tại người tạo mẫu sao mà kí tự "l" lại giống số 1 quá sá quà sa. Cám ơn tất cả các bạn.
 
Upvote 0
Bạn lưu ý là khi ghi Macro nó thường ghi lôi thôi lắm. Ta phải sửa cho nó gọn gàng lại và bỏ bớt các tác vụ thừa. Code của bạn có thể sửa như sau

Mã:
Sub hoc1()
With Range("B2")
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
End With
Range("B2:F2").Merge
End Sub
 
Upvote 0
Bạn lưu ý là khi ghi Macro nó thường ghi lôi thôi lắm. Ta phải sửa cho nó gọn gàng lại và bỏ bớt các tác vụ thừa. Code của bạn có thể sửa như sau

Mã:
Sub hoc1()
With Range("B2")
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
End With
Range("B2:F2").Merge
End Sub

Đồng ý với bạn nhưng vốn từ mình quá ít không biết cái nào cần chừa, cái nào phải bỏ, thậm chí có một số từ mình chẳng biết mô tê gì cả. Phải mò từ từ cái đã.
 
Upvote 0
Đồng ý với bạn nhưng vốn từ mình quá ít không biết cái nào cần chừa, cái nào phải bỏ, thậm chí có một số từ mình chẳng biết mô tê gì cả. Phải mò từ từ cái đã.

Còn một cách nữa là bạn vô hiệu hóa cả dòng lệnh bằng dấu nháy đơn vô đầu dòng;

Sau đó nhớ biên dịch xem có báo lỗi không đã;

Chạy lại macro xem dòng lệnh bị vô hiệu đó nhằm làm gì: Chuyên này liên quan đến việc so sánh tác động của 2 lần chạy macro mà rút ra kết luận đó nha!
 
Upvote 0
Còn một cách nữa là bạn vô hiệu hóa cả dòng lệnh bằng dấu nháy đơn vô đầu dòng;

Sau đó nhớ biên dịch xem có báo lỗi không đã;

Chạy lại macro xem dòng lệnh bị vô hiệu đó nhằm làm gì: Chuyên này liên quan đến việc so sánh tác động của 2 lần chạy macro mà rút ra kết luận đó nha!


Với ý kiến các bạn đã giúp tôi từng bươc tìm hiểu rõ hơn.
Cám ơn.
 
Upvote 0
Còn một cách nữa là bạn vô hiệu hóa cả dòng lệnh bằng dấu nháy đơn vô đầu dòng;

Sau đó nhớ biên dịch xem có báo lỗi không đã;

Chạy lại macro xem dòng lệnh bị vô hiệu đó nhằm làm gì: Chuyên này liên quan đến việc so sánh tác động của 2 lần chạy macro mà rút ra kết luận đó nha!
Trước đến giờ em luôn học theo cách này!
Lấy code của người ta về, em chẳng khi nào bằng lòng với nó cả ---> Cứ bỏ bớt rồi chạy... rồi so sánh (nhất là chổ nào mà ta cảm thấy khó hiểu) ---> Cứ thế... cứ thế mà thí nghiệm, tự nhiên rút ra kết luận (ít nhất biết được chổ mình vừa bỏ bớt nó làm cái giống gì)
Trăm nghe không bằng 1 thấy
Trăm thấy không bằng 1 làm
 
Upvote 0
Các bạn thân mến.
Tôi đã làm được 5 bài tập, lưu lại đó làm tài liệu theo dõi nhưng bây giờ mở lên lại bị lỗi. Nhờ các bạn chỉ giúp cách khắc phục.
Sau đây là thông báo lỗi.
chuong4.JPG
 
Upvote 0
Upvote 0
Bạn udu mến.
Tôi đã xem lại và chuyển macro/ macro/ security/ medium hoặc row thì trong cửa sổ macro lại thay đổi thế này chuong4.xls!Module1.chuong4 trong khi tên macro cũ tôi chỉ ghi chuong4. Xin các bạn giúp ý kiến
 
Upvote 0
Upvote 0
Bạn udu mến.
Tôi đã xem lại và chuyển macro/ macro/ security/ medium hoặc row thì trong cửa sổ macro lại thay đổi thế này chuong4.xls!Module1.chuong4 trong khi tên macro cũ tôi chỉ ghi chuong4. Xin các bạn giúp ý kiến
Thế lúc mở file lên, bạn có bấm vàonút Enable Macros không? (hay lại bấm vào Disable Macros thì cũng bằng không)
-------------
Lưu ý thêm: Trong Security, bạn nhất định không được check vào "Low..." nhé ---> Chỉ nên check vào "Medium..." thôi... Lý do là:
- Nếu bạn để ở mức Low thì mọi code kể cả virus cũng hoạt động được
- Để ở mức Medium để còn lựa chọn, nếu gặp file lạ mà ta không chắc chắn thì ta vẫn còn có cơ hội bấm Disable Macros để ngăn ngừa virus lây vào máy
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn udu mến.
Tôi đã xem lại và chuyển macro/ macro/ security/ medium hoặc row thì trong cửa sổ macro lại thay đổi thế này chuong4.xls!Module1.chuong4 trong khi tên macro cũ tôi chỉ ghi chuong4. Xin các bạn giúp ý kiến

Trời đất ơi đến tên sư phụ mà còn viết nhầm Ndu chứ không phải Udu.

chuong4.xls!Module1.chuong4
. Bạn kiểm tra lại xem có phải trong file có 2 sub trùng tên chuong4 không ?
 
Upvote 0
Một thắc mắc rất quan trọng khi học lập trình VBA cho excel

Mình là người mới học lập trình VBA cho excel và có một số thắc mắc mà tự cảm thấy nó rất quan trọng và sẽ giúp ích rất nhiều cho việc lập trình (đặc biệt dùng để viết các hàm Function). Mình đã search trên google thông tin này nhưng vẫn chưa có được câu trả lời, rất hi vọng những bạn có sự hiểu biết nhiều về lĩnh vực này có thể giải đáp thắc mắc cho mình. Đó là:
1. Trong excel có rất nhiều hàm có sẵn vd: max, min, sum, vlookup, hlookup, index, offset ... rất nhiều hàm khác nữa. Vậy các hàm này có được xây dựng giống như cách chúng ta đang viết một hàm Function mới không. Và có cách nào để biết code lập trình cho các hàm này ko. Mình mới học lập trình nên nghĩ nếu có cách để học được cách viết code đó thì sẽ thu được rất nhiều kiến thức và học hỏi cách viết code chuyên nghiệp của nhà lập trình MS Office.
2. Trong VBA cho excel ngoài trừ các hàm excel có sẵn có thể gọi vào khi viết Function + các toán tử + hàm toán học + hàm sử lý chuỗi + hàm chuyển đổi dữ liệu còn các hàm nào khác không? Và có tài liệu nào tổng hợp hết và có giải thích cách dùng các hàm còn lại bằng tiếng Việt không?
Mình rất muốn được giải đáp những thắc mắc trên và tìm được những chia sẻ từ những người có kinh nghiệm cho người mới học lập trình như mình.
 
Upvote 0
Cám ơn bạn sealand đã giúp đỡ nhưng còn thắc mắc thứ nhất của mình:
Trong excel có rất nhiều hàm có sẵn vd: max, min, sum, vlookup, hlookup, index, offset ... rất nhiều hàm khác nữa. Vậy các hàm này có được xây dựng giống như cách chúng ta đang viết một hàm Function mới không. Và có cách nào để biết code lập trình cho các hàm này ko? mong các bạn giải đáp nốt thắc mắc này giúp mình
 
Upvote 0
Cám ơn bạn sealand đã giúp đỡ nhưng còn thắc mắc thứ nhất của mình:
Trong excel có rất nhiều hàm có sẵn vd: max, min, sum, vlookup, hlookup, index, offset ... rất nhiều hàm khác nữa. Vậy các hàm này có được xây dựng giống như cách chúng ta đang viết một hàm Function mới không. Và có cách nào để biết code lập trình cho các hàm này ko? mong các bạn giải đáp nốt thắc mắc này giúp mình

Việc này làm được chứ, nhưng quan trọng nhất là tạo hàm mới để làm gì nếu đã có sẵn.

Cần chú ý khi dùng ActiveCell phải chọn 1 ô nào đó trước. Vì lý do nào đó mà code ghi lại không thể xác định được địa chỉ ô hiện hành (ActiveCell) thì nó sẽ thực hiện trên ô bất kỳ nếu bạn vô tình chọn (khó mà undo mới mệt chứ).
Vì vậy trước khi thực hiện điều khiển phải có dòng lệnh chọn ô Range ("nào đó").Select
 
Lần chỉnh sửa cuối:
Upvote 0
Cám ơn bạn sealand đã giúp đỡ nhưng còn thắc mắc thứ nhất của mình:
Trong excel có rất nhiều hàm có sẵn vd: max, min, sum, vlookup, hlookup, index, offset ... rất nhiều hàm khác nữa. Vậy các hàm này có được xây dựng giống như cách chúng ta đang viết một hàm Function mới không. Và có cách nào để biết code lập trình cho các hàm này ko? mong các bạn giải đáp nốt thắc mắc này giúp mình
Minh chưa đọc tài liệu nào nói về nội dung các hàm ông Bill và đệ tử viết ra sao nhưng chắc chắn là rất khác. Nó được tích hợp và cấu thành nên Excel. Nó có khả năng sử lý dữ liệu cao hơn VBA nhiều. Người ta có thể ngăn cản hàm UDF hoạt động chứ không ai ngăn được các hàm Excel...
Nói chung, Excel hỗ trợ thêm VBA để cho nó mạnh hơn chứ VBA vốn không phải là yếu tố cấu thành nên nó.
 
Upvote 0
1. Trong excel có rất nhiều hàm có sẵn vd: max, min, sum, vlookup, hlookup, index, offset ... rất nhiều hàm khác nữa. Vậy các hàm này có được xây dựng giống như cách chúng ta đang viết một hàm Function mới không. Và (1) có cách nào để biết code lập trình cho các hàm này ko. (2)Mình mới học lập trình nên nghĩ nếu có cách để học được cách viết code đó thì sẽ thu được rất nhiều kiến thức và học hỏi cách viết code chuyên nghiệp của nhà lập trình MS Office.
(1) Bẻ khóa.

(2) Bạn thử bắt tay viết thử hàm tự tạo giống như VLOOPKUP() xem sao

Hàm này chưa thỏa mãn cho các yêu cầu sau:

(a) Khi có nhiều giá trị cần tìm trùng nhau, hàm chỉ trả về trị đầu tiên mà nó tìm thấy; Giờ bạn thử bắt tay viết hàm tự tạo để buộc nó trả về trị cuối khi nó tìm thấy;

(b) Bạn hãy thử viết để hàm trả về tất cả các trị mà nó tìm thấy đúng theo iêu cầu. (Bạn tự viết đó nha; vì cũng trên diễn đàn này có hàm đó rồi!)

Hãy từ đơn giản đến fức tạp khi đã fát hiện ra í tưởng, bạn à, & để giải ~ í tưởng xuất hiện đó.
 
Upvote 0
Web KT
Back
Top Bottom