Em muốn tìm hiểu về Macros. (6 người xem)

Liên hệ QC

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

Anh Trung Chinh nói đúng. Sau đây là đoạn code record được khi sort 1 vùng chọn trước:

PHP:
Sub Macro2010()

    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("B1:B10") _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Sheet1").Sort
        .SetRange Range("A1:C10")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub
PHP:
Sub macro2003()
    Selection.Sort Key1:=Range("B1"), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal

End Sub

Đoạn code ghi bằng 2003 chạy được trong 2007 và 2010, nhưng đoạn code ghi bằng 2010 không chạy được trong 2003, báo lỗi ngay dòng đầu tiên.

Mà rõ ràng là đoạn code 2003 dễ nhớ và có thể tự viết tay được, chỉ dùng vài tham số cần thiết:

PHP:
Sub SortData()
    Range("A1:C15").Sort Key1:=Range("B1"), Order1:=xlAscending, Header:=xlNo
End Sub

hoa còi:
Đoạn code Macro2003() và đoạn code SortData() chạy ngon lành trong 2010, mà không cần khai báo ActiveSheet.Range(...)
 
Lần chỉnh sửa cuối:
Sư phụ đã thử trên máy tính chỉ cài OFFICE 2010 thôi, không cài chung với 2007 và 2003 chưa?
Thực tế là trò đã gặp cái lỗi này vài lần rồi, có test trên máy của 1 người bạn chỉ cài 2010 và bị lỗi code, mặc dù trên 2003 và 2007 chạy vẫn tốt. Máy trò hiện giờ không có 2010 nhưng trò sẽ phải tìm hiểu vấn đề này, chắc chắn là có lỗi chứ không phải tư nhiên trò nghĩ ra nó đâu, hihi!
 
Ví dụ ghi và sửa Macro Excel 2003: Tìm địa chỉ của ô chứa chữ Stt

Máy ghi
Mã:
Sub Macro1()
    MsgBox Cells.Find(What:="Stt", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
        xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=True _
        , SearchFormat:=False).Address
End Sub

Sửa lại:
Mã:
Sub Macro2()
    MsgBox Cells.Find("Stt", LookAt:=xlWhole).Address
End Sub
hoặc:
Mã:
Sub Macro2()
   MsgBox Cells.Find("Stt", , , 1).Address
End Sub
 
Lần chỉnh sửa cuối:
Code mình viết vào Macro thì đúng như Ndu nói nhưng Macro máy tự ghi thì có khác nhau (ý tôi muốn nói cái này). Mấy ngày trước tôi có dùng Excel 2010 và thấy như thế nên mới nói còn bây giờ gỡ mất Excel 2010 rồi nên không có cái làm ví dụ. Mà tôi nhớ là trên diễn đàn ndu cũng đã có bài nói về nội dung trong code của Macro 2007 hay 2010 gì đó nhưng tìm không thấy.

Ah... thì đúng rồi!
Nhưng anh vẫn có 1 cái lợi là anh dùng Excel 2003 nhiều rồi, cú pháp chắc cũng nhớ nhiều rồi, vậy cũng đâu đến nỗi cần đến record macro chứ nhỉ?
Nói thiệt như Sort chẳng hạn, viết riết quen tay nên em cứ viết theo kiểu của Excel 2003 và cho vào Excel 2010 vẫn chạy tốt
Mà cho dù là dùng record macro đi nữa, chúng ta cũng phải biết xóa bớt những chổ không cần thiết ---> Cứ xóa bớt và thí nghiệm
Ẹc... Ẹc...
-----------------
Sư phụ đã thử trên máy tính chỉ cài OFFICE 2010 thôi, không cài chung với 2007 và 2003 chưa?
Thực tế là trò đã gặp cái lỗi này vài lần rồi, có test trên máy của 1 người bạn chỉ cài 2010 và bị lỗi code, mặc dù trên 2003 và 2007 chạy vẫn tốt. Máy trò hiện giờ không có 2010 nhưng trò sẽ phải tìm hiểu vấn đề này, chắc chắn là có lỗi chứ không phải tư nhiên trò nghĩ ra nó đâu, hihi!
Hiện tại tôi xài duy nhất OFfice 2010 bạn à.. hoàn toàn hổng có bất cứ vấn đề gì cả
 
Lần chỉnh sửa cuối:
Hiện tại tôi xài duy nhất OFfice 2010 bạn à.. hoàn toàn hổng có bất cứ vấn đề gì cả

Với Ndu thì đương nhiên là vậy nhưng với nhiều người (như tôi và Hoamattroicoi) thì lại không như vậy vì khi viết code lười khai báo biến nên khi chạy hay bị lỗi

Với những người đã biết về Macro thì việc dùng Macro để ghi rồi thêm bớt theo ý của mình là chuyện bình thường nhưng với những người mới học thì lại không đơn giản chút nào, sửa (thêm, bớt) câu nào thì phải hiểu hoặc mang máng thì mới sửa được, nếu xóa bừa thì...tèo luôn. Khi mới học tôi cũng phải mất vài tháng mới thành thục, từ kinh nghiệm của bản thân nên mới khuyên mọi người tìm cái đơn giản hơn (Excel 2003) để học dù biết rằng Excel 2003 đang đi vào dĩ vãng.
 
Lần chỉnh sửa cuối:
Với Ndu thì đương nhiên là vậy nhưng với nhiều người (như tôi và Hoamattroicoi) thì lại không như vậy vì khi viết code lười khai báo biến nên khi chạy hay bị lỗi

Với những người đã biết về Macro thì việc dùng Macro để ghi rồi thêm bớt theo ý của mình là chuyện bình thường nhưng với những người mới học thì lại không đơn giản chút nào, sửa (thêm, bớt) câu nào thì phải hiểu hoặc mang máng thì mới sửa được, nếu xóa bừa thì...tèo luôn. Khi mới học tôi cũng phải mất vài tháng mới thành thục, từ kinh nghiệm của bản thân nên mới khuyên mọi người tìm cái đơn giản hơn (Excel 2003) để học dù biết rằng Excel 2003 đang đi vào dĩ vãng.

Ăn thua ở chổ "chịu cày" thôi anh à!
Em cũng từng ở trong thời kỳ CHẲNG BIẾT GÌ nhưng được cái em chịu "vọc" ---> Record macro ra code rồi thì.. "phá banh ta long" luôn. Một lần không được thì làm lại nhiều lần, đến lúc "phá" thanh công cũng là lúc ngộ ra được vấn đề
Ẹc... Ẹc...
--------------
Còn về vấn đề Office 2003, 2007 hay 2010 em nghĩ không hề quan trọng gì. Cuối cùng vẫn là đầu ta suy nghĩ, "nó" làm giúp chứ có ngược lại đâu mà lo
 
Sư phụ đã thử trên máy tính chỉ cài OFFICE 2010 thôi, không cài chung với 2007 và 2003 chưa?
Thực tế là trò đã gặp cái lỗi này vài lần rồi, có test trên máy của 1 người bạn chỉ cài 2010 và bị lỗi code, mặc dù trên 2003 và 2007 chạy vẫn tốt. Máy trò hiện giờ không có 2010 nhưng trò sẽ phải tìm hiểu vấn đề này, chắc chắn là có lỗi chứ không phải tư nhiên trò nghĩ ra nó đâu, hihi!

1. Trên máy cài chung 2003, 2007, 2010:
VBA trên máy cài chung, cùng 1 file excel, mở bằng phiên bản nào, sẽ sử dụng library của phiên bản đó. Thí dụ thư viện Visual Basic for Application, 2003 lưu trong thư mục VB6, 2010 lưu trong thư mục VB7. Các library khác thì theo version như Microsoft Excel 11.0 Object Library và Microsoft Excel 14.0 Object Library

VBA2003.jpg


VBA2010.jpg



Nếu xài chung thì tại sao Excel 2003 không chạy được Sub Macro2010() trong thí dụ trên?

2. Máy nhà của thầy cài 3 thứ thì không nói, máy công ty chỉ có 1 thứ 2010, chạy mọi code, mọi file, của thầy, của GPE, có hay không có ActiveSheet.Range() hay ActiveSheet.selection. Những cái 2003 ngầm hiểu là kí rì thì 2010 hiểu ngầm là cái đó. Chỉ đứng từ sheet này điều khiển sheet kia, hay đứng trong module điều khiển 2, 3 sheet mới phải chỉ rõ sheet ra.

3. Lỗi trò mắc phải, có ai nói là tự nghĩ ra? Có điều nguyên nhân không phải ở đó. Đưa 1 file lỗi lên là biết liền.
 
Lần chỉnh sửa cuối:
To Bé Còi: Khả năng lớn nhất là bộ Office 2010 mà Bé Còi đề cập có thể đã bị lỗi. Bộ Office 2010 có nhiều phiên bản, và nghe nói có 1 vài phiên bản chạy bị sao sao ấy. Rất may là phiên bản mình đang sử dụng không có vấn đề gì.
 
To Bé Còi: Khả năng lớn nhất là bộ Office 2010 mà Bé Còi đề cập có thể đã bị lỗi. Bộ Office 2010 có nhiều phiên bản, và nghe nói có 1 vài phiên bản chạy bị sao sao ấy. Rất may là phiên bản mình đang sử dụng không có vấn đề gì.

Download phiên bản Office 2010 từ chính MS cung cấp cho chắc ăn
Mấy thứ quan trọng tôi chẳng khi nào download qua 1 trang web trung gian cả
Ngoài ra cũng xin nói thêm: Có bản "zin" rồi thì cũng còn tùy người cài đặt nữa ---> Cài thiếu cái gì đó ai mà biết được
 
Web KT

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

Back
Top Bottom