PDA

View Full Version : Macro là gì?



quataoheo_1988
08-10-11, 06:40 PM
Các bác ơi, em ko biết marco là cái gì? nó có tính năng gì? em nghe mọi người nhắc nhiều về nó, chắc phải có nhiều tính năng tốt. bác nào có thể giải thich giùm em ứng dụng của nó trong excel là gì và ví dụ cụ thể giúp em cái. Em là dân kế toán nên muốn biết càng nhiều càng tốt. Thanks các bác&&&%$R}}}}}

Hoàng Trọng Nghĩa
08-10-11, 06:52 PM
Bạn xem bài dưới đây:


Mình xin nói thêm về Macro và VBA như thế này:

Macro là gì?
Macro là lệnh thực thi một kịch bản công việc nào đó. Tạo macro chính là việc ghi lại một tập các thao tác xử lý của người dùng (Record Macro) sau đó lưu lại thành một bộ lệnh và đặt trong một "MacroName". Ngôn ngữ ghi lại (thể hiện công việc trong macro) trong MS Office là VB (không phải VB.NET). Khi cần thực thi công việc giống như việc đã làm thì chỉ cần chạy MacroName (bấm phím ALT+F8) đó để thực hiện lại một kịch bản.

VBA là gì ?
VBA - Visual Basic for Application là một ngôn ngữ lập trình, ngôn ngữ của nó là Visual Basic nhưng nó được tích hợp vào trong ứng dụng (Application) và sử dụng các đối tượng trong ứng dụng đó, những ứng dụng này phải được thiết kế kiểu Automation Server, như tôi biết hiện nay thì có các chương trình trong bộ MS Office, OpenOffice, AutoCAD. Sự kế hợp giữa Visual Basic với Application (ứng dụng) cho ra một cái tên VBA.
VBA làm gì ? VBA cho phép người ta viết các mã lệnh có tác động tới nhiều đối tượng để làm tăng tính tự động hoá trong ứng dụng của mình, làm những việc mà các công cụ sẵn có trong ứng dụng chưa có, như tôi có thể viết thêm một hàm tính thuế TN, viết một chương trình tính lãi ngân hàng, kế toán, trong MS Office và OpenOffice thì dùng để tạo Macro,...
Trong lập trình, các đối tượng được viết trong ứng dụng kiểu Automation Server người ta gọi là COM - Component Object Model, như vậy từ bất kỳ một ứng dụng hay môi trương lập trình nào người ta có thể can thiệp vào các đối tượng này, dù nó đâng chạy. Ví dụ tôi có thể viết lệnh kiểm soát toàn bộ quá trình Excel đang làm việc. Để làm việc với các đối tượng COM người ta phải dùng kỹ thuật tạo và kết nối COM objects, trong VB6 trở về trước được hỗ trợ tốt điều này nên rất dễ dùng (đơn giản là việc viết Class), trong Delphi,.NET: VB.NET, C#.NET thì người ta phải tạo các lớp Interface,....

quataoheo_1988
08-10-11, 07:23 PM
Thanks bạn. Nhưng mình vẫn thấy mơ hồ quá.

Hoàng Trọng Nghĩa
08-10-11, 07:26 PM
Thanks bạn. Nhưng mình vẫn thấy mơ hồ quá.

Vậy bạn tham khảo đường dẫn dưới đây:

http://www.giaiphapexcel.com/forum/showthread.php?19183-H%E1%BB%8Fi-C%C3%A1ch-t%E1%BA%A1o-Macro-trong-excel/page2

ngodany135
08-10-11, 07:49 PM
Thanks bạn. Nhưng mình vẫn thấy mơ hồ quá.
Vậy mời bạn xem cái này thử nha. (http://www.giaiphapexcel.com/forum/showthread.php?47075-D%C3%A0nh-cho-c%C3%A1c-b%E1%BA%A1n-m%E1%BB%9Bi-bi%E1%BA%BFt-v%E1%BB%81-VBA.-Thi%E1%BA%BFt-l%E1%BA%ADp-UserForm-v%C3%A0-vi%E1%BA%BFt-code-%C4%91%C6%A1n-gi%E1%BA%A3n)

huynhhuynh87
08-10-11, 08:52 PM
Theo mình bạn cần những vấn đề như sau phải ko?

trước tiên bạn mở file excel: và chọn để viết 1 macro như sau: (theo trình tự)
71520 hoặc mở ra và bấn alt + F11

sau đó sẽ hiện lên bản:
71521

chọn module và viết 1 macro.


VD: bạn thử điền code sau (code xóa file)
Sub Killed()
Application.DisplayAlerts = False
ThisWorkbook.ChangeFileAccess xlReadOnly
Kill ThisWorkbook.FullName
ThisWorkbook.Close False
End Sub



hình:
71523

sau đó bạn nhấn f5 và chọn run là thấy thế nào
ghi chú: mở file mới thử nha.

meo_excell
19-04-12, 06:14 PM
Theo mình bạn cần những vấn đề như sau phải ko?

trước tiên bạn mở file excel: và chọn để viết 1 macro như sau: (theo trình tự)
71520 hoặc mở ra và bấn alt + F11

sau đó sẽ hiện lên bản:
71521

chọn module và viết 1 macro.


VD: bạn thử điền code sau (code xóa file)
Sub Killed()
Application.DisplayAlerts = False
ThisWorkbook.ChangeFileAccess xlReadOnly
Kill ThisWorkbook.FullName
ThisWorkbook.Close False
End Sub



hình:
71523

sau đó bạn nhấn f5 và chọn run là thấy thế nào
ghi chú: mở file mới thử nha.



Úi, mình ngu quá, mù tịt luôn, giờ làm sao mà biết đánh mấy cái dòng tiếng anh này hả. khó quá sao mà làm đây.
Sub Killed()
Application.DisplayAlerts = False
ThisWorkbook.ChangeFileAccess xlReadOnly
Kill ThisWorkbook.FullName
ThisWorkbook.Close False
End Sub

Giúp mình làm quen với nó với!

xuan.nguyen82
20-04-12, 10:29 AM
Vậy bạn tham khảo đường dẫn dưới đây:

http://www.giaiphapexcel.com/forum/showthread.php?19183-H%E1%BB%8Fi-C%C3%A1ch-t%E1%BA%A1o-Macro-trong-excel/page2


Việc ghi 1 macro phải hiểu từ bản chất của nó thì mới có thể làm được, hiểu được cấu trúc của 1 bản ghi macro bao gồm những câu lệnh gì? tên và ý nghĩa các câu lệnh đó. Vậy có bài viết nào hướng dẫn cụ thể như thế không ạ?
Ví dụ như:
Private Sub là gì? để làm gì?
Dim là gì? để làm gì?
Set là gì? để làm gì?
Else là gì? để làm gì?
....
Hay, bắt đầu câu lệnh phải như thế nào, kết thúc phải như thế nào?
(End sub)....v.v...
Rồi cho 1 ví dụ đơn giản, thì các bạn mới tìm hiểu mới hiểu được ạ.

Crystal Rose
22-04-12, 10:00 AM
Việc ghi 1 macro phải hiểu từ bản chất của nó thì mới có thể làm được, hiểu được cấu trúc của 1 bản ghi macro bao gồm những câu lệnh gì? tên và ý nghĩa các câu lệnh đó. Vậy có bài viết nào hướng dẫn cụ thể như thế không ạ?
Ví dụ như:
Private Sub là gì? để làm gì?
Dim là gì? để làm gì?
Set là gì? để làm gì?
Else là gì? để làm gì?
....
Hay, bắt đầu câu lệnh phải như thế nào, kết thúc phải như thế nào?
(End sub)....v.v...
Rồi cho 1 ví dụ đơn giản, thì các bạn mới tìm hiểu mới hiểu được ạ.
Nếu có được bài viết hướng dẫn chi tiết như của bạn thì thật giống như được đi học ở trường. Mình cũng rất muốn có được bài viết như thế.

HYen17
23-04-12, 08:04 AM
Nếu có được bài viết hướng dẫn chi tiết như của bạn thì thật giống như được đi học ở trường. Mình cũng rất muốn có được bài viết như thế.

Ở Phổ thông các bạn hơn những lứa trước là đã trãi qua PASCAL (?)
Giờ thì với cái vốn nhỏ nhoi đó, các bạn fải tự học thêm thôi, nếu không có điều kiện theo những lớp của thầy TuanVNU giảng.

Rất nhiều thành viên trên diễn đàn đều chọn hướng này!

(húc bạn sớm thành công!

Hoàng Trọng Nghĩa
23-04-12, 09:49 AM
Việc ghi 1 macro phải hiểu từ bản chất của nó thì mới có thể làm được, hiểu được cấu trúc của 1 bản ghi macro bao gồm những câu lệnh gì? tên và ý nghĩa các câu lệnh đó. Vậy có bài viết nào hướng dẫn cụ thể như thế không ạ?
Ví dụ như:
Private Sub là gì? để làm gì?
Dim là gì? để làm gì?
Set là gì? để làm gì?
Else là gì? để làm gì?
....
Hay, bắt đầu câu lệnh phải như thế nào, kết thúc phải như thế nào?
(End sub)....v.v...
Rồi cho 1 ví dụ đơn giản, thì các bạn mới tìm hiểu mới hiểu được ạ.

Giờ mình không nhớ đường dẫn nó nằm ở đâu trong diễn đàn GPE này, thôi thì mình gửi lại Sách GIÁO TRÌNH VBA này đã được mình download trước đây, các bạn tải hết về rồi đặt 3 phần này trong 1 thư mục mới sau đó Ctrl+A để chọn hết cả 3 phần rồi click chuột phải để giải nén (vì sách nặng quá phải cắt ra làm 3 phần). Sách rất hay, trình bày đẹp, dễ hiểu. Tôi nghĩ đây là sách được diễn đàn GPE của chúng ta phát hành (NXB Thống Kê), tác giả là Phan Tự Hướng đấy.

Chúc các bạn có thêm kiến thức về VBA.

ThaoChristian
01-11-12, 10:54 AM
mình chạy rồi sao không thấy gì hết lúc đầu là code thế này:
Sub Killed()
Application.DisplayAlerts = False
ThisWorkbook.ChangeFileAccess xlReadOnly
Kill ThisWorkbook.FullName
ThisWorkbook.Close False
End Sub
lúc sau lại:
Sub xoa()
....
khác với lúc đầu và không hiểu nó làm việc thế nào? bạn có thể giúp mình viết 1 nút hủy cụ thể k?

quanghai1969
01-11-12, 12:00 PM
mình chạy rồi sao không thấy gì hết lúc đầu là code thế này:
Sub Killed()
Application.DisplayAlerts = False
ThisWorkbook.ChangeFileAccess xlReadOnly
Kill ThisWorkbook.FullName
ThisWorkbook.Close False
End Sub
lúc sau lại:
Sub xoa()
....
khác với lúc đầu và không hiểu nó làm việc thế nào? bạn có thể giúp mình viết 1 nút hủy cụ thể k?


Mới bắt đầu làm quen VBA mà đã quan tâm đến code này rồi, tương lai bạn sẽ trở thành cao thủ nghen.
Sub Kill() chỉ chạy khi có 1 điều kiện nào đó kèm theo nên Sub này lệ thuộc vào Sub khác nữa. 1 mình Sub Kill() thì đâu có tác dụng gì đâu.

doithuc212121
22-11-12, 03:14 PM
Giờ mình không nhớ đường dẫn nó nằm ở đâu trong diễn đàn GPE này, thôi thì mình gửi lại Sách GIÁO TRÌNH VBA này đã được mình download trước đây, các bạn tải hết về rồi đặt 3 phần này trong 1 thư mục mới sau đó Ctrl+A để chọn hết cả 3 phần rồi click chuột phải để giải nén (vì sách nặng quá phải cắt ra làm 3 phần). Sách rất hay, trình bày đẹp, dễ hiểu. Tôi nghĩ đây là sách được diễn đàn GPE của chúng ta phát hành (NXB Thống Kê), tác giả là Phan Tự Hướng đấy.

Chúc các bạn có thêm kiến thức về VBA.

CẢM ƠN ANH "HOÀNG TRỌNG NGHĨA" nhiều nha!

l01012011
22-05-13, 04:39 PM
Hôm rồi đi phỏng vấn, được hỏi "Em biết viết Macro không". Trả lời - Dạ không, nhưng nếu công việc yêu cầu, em sẽ cố gắng tìm hiểu. VẬy là rớt.
Giờ lên GPE tìm, làm dấu, từ từ nghiên cứu rồi đi fv tiếp. @$@!^%

he0mt00
19-09-13, 03:07 PM
thank a,lại có thêm một chủ đề mới học hỏi -=.,,

giang.pham
21-09-13, 04:43 PM
bạn ơi cho mình hỏi khi tạo 1 macro. tạo sang sheet thứ 2 bị lỗi font chữ thì sửa như nào hả bạn. Ví dụ mình tạo bảng có cột Số lượng, Đơn giá, Thành tiền nhưng khi chạy macro sang sheet khác thì nó thành Số l?ong, th?nh ti?n,... Mình không nhớ chính xác, đại loại thế. Làm sao để khi chạy macro mà vẫn đúng font chữ cho mình đỡ phải sửa nhiều lần. Cảm ơn nhiều ^^!

Hoàng Trọng Nghĩa
21-09-13, 06:30 PM
bạn ơi cho mình hỏi khi tạo 1 macro. tạo sang sheet thứ 2 bị lỗi font chữ thì sửa như nào hả bạn. Ví dụ mình tạo bảng có cột Số lượng, Đơn giá, Thành tiền nhưng khi chạy macro sang sheet khác thì nó thành Số l?ong, th?nh ti?n,... Mình không nhớ chính xác, đại loại thế. Làm sao để khi chạy macro mà vẫn đúng font chữ cho mình đỡ phải sửa nhiều lần. Cảm ơn nhiều ^^!

Do môi trường VBE không hỗ trợ Unicode nên các chữ có dấu tiếng Việt bị mã hóa thành dấu chấm hỏi (?). Để khắc phục các trường hợp này ta phải dùng hàm hỗ trợ cho nó hiểu.

VD:

Số lượng = "S" & ChrW(7889) & " l" & ChrW(432) & ChrW(7907) & "ng"

Thành tiền = "Thành ti" & ChrW(7873) & "n"

Đơn giá = ChrW(272) & ChrW(417) & "n giá"

Thay vì quay macro nó được ghi lại như sau:


Sub Macro2()
Range("A1").Select
ActiveCell.FormulaR1C1 = "S? lu?ng"
Range("B1").Select
ActiveCell.FormulaR1C1 = "Ðon giá"
Range("C1").Select
ActiveCell.FormulaR1C1 = "Thành ti?n"
Range("A2").Select
End Sub


Thì ta chỉnh sửa lại một chút, ta sẽ có code như sau:


Sub Macro2()
Range("A1") = "S" & ChrW(7889) & " l" & ChrW(432) & ChrW(7907) & "ng"
Range("B1") = ChrW(272) & ChrW(417) & "n giá"
Range("C1") = "Thành ti" & ChrW(7873) & "n"
End Sub