Cần hỗ trợ khi dùng HST Office? Tham gia nhóm Facebook

Hướng dẫn cho HST Office phiên bản 1.0.0-beta.5

Các trang hướng dẫn

Công cụ HST

Macro VBA

Viết và sửa macro VBA trong HST Sheets và HST Writer như trong Excel và Word: Range, Cells, ActiveSheet, ActiveDocument, MsgBox… Phần lớn mã VBA thông dụng của Excel và Word chạy được ngay; một số lệnh còn thiếu (xem bảng tương thích).

Mở trình soạn macro

  • Thẻ Công cụ trên dải lệnh → nút Macro VBA (nút đầu tiên của nhóm Vĩ lệnh).
  • Hoặc menu HST → Macro VBA.
  • Hoặc phím tắt Alt+F11, giống Excel và Word. Trên máy Mac: Option+F11; nếu phím F11 đang điều khiển âm lượng hay màn hình, giữ thêm fn: fn+Option+F11.

Với tài liệu mới, HST Office tạo sẵn mô-đun Module1 trong dự án VBAProject (Sheets) hoặc Project (Writer). Mô-đun bắt đầu bằng dòng Option VBASupport 1, tiếp theo là vài dòng hướng dẫn và macro mẫu XinChao. Hãy giữ dòng Option VBASupport 1 ở đầu mọi mô-đun: dòng này bật chế độ VBA. Nếu tệp Excel hoặc Word đã có macro, trình soạn mở mô-đun có sẵn của tệp.

Trình soạn macro của HST Sheets: bên trái là danh mục VBAProject, bên phải là Module1 với dòng Option VBASupport 1, phần hướng dẫn và macro XinChao.
Trình soạn macro mở Module1 vừa được tạo.

Macro đầu tiên trong HST Sheets

Xóa macro mẫu hoặc viết thêm bên dưới:

Sub TongCong()
    Dim i As Long, tong As Double
    For i = 2 To 10
        tong = tong + Cells(i, 2).Value      ' cột B, dòng 2 đến 10
    Next i
    Range("B11").Value = tong
    Range("B11").Font.Bold = True
    MsgBox "Tổng: " & Format(tong, "#,##0"), vbInformation
End Sub

WorksheetFunction.Sum(Range("B2:B10")) cho cùng kết quả. Hàm tự viết (Function) dùng được ngay trong ô, ví dụ =NHANDOI(A1).

Macro đầu tiên trong HST Writer

Sub ThayChu()
    ' Thay mọi chữ "Cty" bằng "Công ty" trong cả văn bản
    ActiveDocument.Content.Find.Execute FindText:="Cty", _
        ReplaceWith:="Công ty", Replace:=wdReplaceAll
    ActiveDocument.Content.InsertAfter "Đã rà soát."
    MsgBox "Văn bản có " & ActiveDocument.Paragraphs.Count & " đoạn"
End Sub

Chạy macro

  • Trong trình soạn: đặt con trỏ trong một Sub rồi nhấn F5.
  • Từ bảng tính hoặc văn bản: Alt+F8 (trên Mac: Option+F8) mở hộp thoại macro, giống hộp thoại Macros của Excel và Word: ở cột Vĩ lệnh từ, mở tên tài liệu, chọn mô-đun, chọn macro rồi bấm Chạy. Nút Chỉnh sửa mở mã của macro, nút Gán… gán macro cho phím tắt hoặc nút.
  • Trong HST Writer, chế độ chọn mở rộng (trước đây ở Alt+F8) vẫn bật được ở ô chế độ chọn trên thanh trạng thái.

Tạo biểu mẫu (UserForm)

  1. Mở trình soạn bằng Macro VBA.
  2. Chọn Chèn → Hộp thoại BASIC: HST Office tạo UserForm1 cùng mô-đun mã của nó, như trong Excel/Word.
  3. Kéo nút, ô nhập từ hộp công cụ vào biểu mẫu. Viết mã sự kiện trong mô-đun UserForm1, ví dụ Private Sub CommandButton1_Click().
  4. Hiện biểu mẫu từ một macro: UserForm1.Show.
Lưu ý: UserForm được giữ khi lưu dạng .ods/.odt. Khi lưu .xlsm/.xls, biểu mẫu chưa được ghi vào tệp Excel; HST Office sẽ nhắc bạn lưu thêm một bản .ods.

Lưu tệp để giữ macro

Định dạng tệp và macro
Lưu dạngMacro
.xlsm (Excel có macro)Giữ macro, kể cả macro viết mới hoặc vừa sửa trong HST Sheets. Sự kiện Workbook_Open, Worksheet_Change vẫn chạy sau khi lưu.
.docm (Word có macro)Giữ macro viết mới hoặc vừa sửa trong HST Writer. Tệp Word có UserForm: giữ nguyên dự án gốc, phần sửa không được lưu (hãy lưu thêm một bản .odt).
.ods, .odtGiữ macro.
.xlsGiữ macro.
.docGiữ macro, kể cả macro viết mới hoặc vừa sửa (tệp Word có UserForm: giữ dự án gốc).
.xlsx, .docxKhông có macro (giống Excel và Word).
Chữ tiếng Việt trong mã: HST Office lưu mã VBA bằng bảng mã tiếng Việt (Windows-1258) khi cần, nên chú thích và chuỗi có dấu được giữ nguyên, kể cả trong tệp tạo bằng Excel/Word bản tiếng Anh. Excel/Word trên máy không dùng tiếng Việt có thể hiển thị các chữ này không đúng trong trình soạn của chúng.

Hỏi trước khi chạy macro trong tệp

Macro có thể chứa mã độc. Khi mở một tệp có macro (.xlsm, .docm…), HST Office luôn hỏi trước khi chạy:

Hộp thoại bảo mật: Tài liệu chứa macro tài liệu, với các nút Trợ giúp, Tắt macro và Bật macro.
Chỉ bấm Bật macro khi bạn tin người gửi tệp.
  • Tắt macro: mở tệp, không chạy macro nào. Bạn vẫn xem và sửa được mã trong trình soạn.
  • Bật macro: macro của tệp được chạy, kể cả Workbook_Open.
  • Muốn đổi mức bảo mật: Công cụ → Tùy chọn → HST Office → Bảo mật → Bảo mật Macro.... Mức mặc định của HST Office là Vừa: luôn hỏi trước khi chạy macro trong tệp từ nguồn chưa tin cậy, không bao giờ tự chạy ngầm. Không nên chọn Thấp. Macro bạn tự viết trong tài liệu mới chạy ngay, không cần hỏi.

Bảng tương thích

Kết quả kiểm tra tự động trên HST Office 1.0.0-beta.5: mỗi dòng là một đoạn mã VBA chạy trong tài liệu mới.

HST Sheets (mã Excel): 43/43 trường hợp chạy được

Mã VBA của Excel trong HST Sheets
Mã VBAKết quả
Range("A1").Value, Cells(hàng, cột), Offset, Resize, AddressChạy được
Worksheets(1), Worksheets("tên"), ActiveSheet, ThisWorkbook, Worksheets.AddChạy được
Range.Select, SelectionChạy được
Vòng lặp For…Next, For Each ô In Range; mảng từ Range.ValueChạy được
Formula, WorksheetFunction.Sum/Max/CountIf/VLookupChạy được
MsgBox, InputBoxChạy được
Font, Interior.Color, NumberFormat, Borders, Merge, độ rộng cột/chiều cao dòngChạy được
End(xlDown), UsedRange, Copy Destination:=, ClearContents, Sort, AutoFilterChạy được
Names.Add, Cells.Find, Replace, AddComment, Shapes.AddShape, ChartObjects.AddChạy được
On Error Resume Next, On Error GoTo, Err.Raise, Split, Format, CollectionChạy được
Hàm tự viết dùng trong ô (=NHANDOI(A1)), Call, Application.ScreenUpdatingChạy được
Sự kiện Workbook_Open, Worksheet_Change (cả sau khi lưu .xlsm)Chạy được
Scripting.Dictionary (CreateObject, New Dictionary): Add, d(khóa) = giá trị, Exists, Remove, Keys, Items, For Each, CompareMode = vbTextCompare (khóa tiếng Việt không phân biệt hoa thường), lỗi 457 khi thêm trùng khóaChạy được
Đối tượng COM khác của Windows (Excel.Application, ADODB…)Hạn chế
UserForm soạn mới trong trình soạn (UserForm1.Show, Unload, sự kiện nút bấm)Chạy được
Lưu UserForm vào .xlsm/.xls (giữ được trong .ods)Hạn chế

HST Writer (mã Word): 28/28 trường hợp chạy được

Mã VBA của Word trong HST Writer
Mã VBAKết quả
ActiveDocument.Content, ActiveDocument.Range(đầu, cuối), .TextChạy được
Range.InsertAfter, Range.InsertBeforeChạy được
Selection.TypeText, TypeParagraph, HomeKey, EndKey, InsertBreakChạy được
Paragraphs.Count, Paragraphs(n).Range, Paragraph.Alignment, Style, For Each p In ActiveDocument.ParagraphsChạy được
Find.Execute: tìm (chọn chữ tìm thấy) và thay thế Replace:=wdReplaceAllChạy được
Tables.Add, Rows.Count, Columns.Count, Table.Cell(h, c).Range.TextChạy được
Words, Sentences (của tài liệu, Range, Selection; dấu câu đi liền với từ, không tính thành từ riêng như Word), Range.Bold, Range.Italic, Selection.ClearFormatting, Bookmarks.Add, Bookmarks("tên").RangeChạy được
Sections(1).Headers(wdHeaderFooterPrimary), ListFormat.ApplyBulletDefaultChạy được
Font.Bold, Font.Size, BuiltInDocumentProperties, MsgBoxChạy được
Scripting.Dictionary trong macro của Writer (đếm từ, khóa tiếng Việt)Chạy được
Sự kiện Document_Open khi mở tệp .docm hoặc .odt đã lưu bằng HSTChạy được
InlineShapes.AddPicture, Width/Height, LockAspectRatio; Comments.Add, Comments(n).Range, Scope, AuthorChạy được
Fields.Add (trang PAGE, tổng số trang NUMPAGES, ngày DATE, giờ TIME), Fields.Update (cập nhật cả mục lục)Chạy được
UserForm soạn mới trong trình soạn (UserForm1.Show, Unload, sự kiện nút bấm)Chạy được
Chưa hỗ trợ: các đối tượng COM của Windows ngoài Scripting.Dictionary; Với tệp quan trọng, hãy giữ một bản gốc trước khi lưu đè.