Xây dựng Tool VBA tự động tạo code tool Tikz cho phần mềm Texstudio

tuhocvba

Administrator
Thành viên BQT
Anh em lập trình VBA có thể coi topic này là topic mẫu cho việc tạo Tool tự động tạo ra file output theo yêu cầu.

1. Đặt vấn đề:
Việc sử dụng mã code (TikZ) để vẽ hình có khó khăn là phải nhớ mã lệnh. Do đó, nếu có một Tool, khi click vào ra gợi ý lệnh thì sẽ bớt khó khăn hơn.
2. Tìm hiểu cấu trúc macro cho phần mềm Texstudio:
Mình gặp khó khăn trong việc này, chính thức tại thời điểm làm tool, thì không có tham khảo được đoạn code nào của người Việt. Nhưng may mắn là thông qua mấy trang web nước ngoài, mình dẫn link sau, thì đã hiểu được cấu trúc code.
Giả sử tôi có input như sau:
Bạn cần đăng nhập để thấy đính kèm

Bây giờ tôi muốn output như thế này
JavaScript:
var arraygt = [ "" ]; // Clear variable
arraygt =[
    "Vẽ đường thẳng",
    "   Đường thẳng với [độ dày]"
]
choisedialog = new UniversalInputDialog();
choisedialog.setWindowTitle( "Đường thẳng" );
choisedialog.add(arraygt,"Lựa chọn loại đường","choiseGT");
choisedialog.add( true, "Chèn chú thích ", "checkbox" );
    thvba: if (choisedialog.exec() != null) {
            if (choisedialog.get("choiseGT") == "Vẽ đường thẳng") {
                cursor.insertLine();
                editor.insertText("\draw (x1,y1) -- (x2,y2);");


break thvba;}

            if (choisedialog.get("choiseGT") == "   Đường thẳng với [độ dày]") {
                cursor.insertLine();
                editor.insertText("\draw[line width=1pt] (x1,y1)--(x2,y2);");
                cursor.insertLine();
                editor.insertText("");


break thvba;}

}
Phần code đầu là phần quan trọng, coi như cố định. Phần thay đổi là bắt đầu từ việc xét điều kiện (if). Nếu như input có càng nhiều hạng mục thì code trên càng dài, càng lắm lệnh if, đây chính là phần mà macro cần giản lược.

3. Hướng suy nghĩ:
Output tôi mong muôn là tạo ra một file txt có nội dung như trên từ INPUT như đã nêu. Tất nhiên nội dung input có thể thay đổi, tức là có thể có nhiều dòng dữ liệu đầu vào nhưng cấu trúc thì không thay đổi.

Vậy, nội dung sẽ ghi vào một biến string. Cụ thể ở trong chương trình, tôi nạp nội dung này vào biến op. Sau khi nội dung này được soạn xong, thì tôi ghi nội dung này ra file txt và lưu lại.
Mã:
'INPUT: link file txt
'INPUT: Noi dung nhap vao file txt

'OUTPUT: txt

Sub CreateAfile(ByVal lk As String, ByVal outem As String)
    Dim fso As Object, MyFile  As Object
    Dim lk2 As String
    
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    If Right(lk, 1) = Application.PathSeparator Then
        lk2 = lk & "Code_" & Format(Now, "yymmddhhmmss") & ".txt"
    Else
        lk2 = lk & Application.PathSeparator & "Code_" & Format(Now, "yymmddhhmmss") & ".txt"
    End If
    Set MyFile = fso.CreateTextFile(lk2, True, True)
    MyFile.Write outem
    MyFile.Close
    Set fso = Nothing
End Sub
Đoạn code này chính là đoạn code để ghi nội dung ra một file txt và lưu lại.
Đây là phần mà các bạn có thể áp dụng cho các chương trình khác nhau của các bạn.

Link file VBA mà các bạn có thể tham khảo code:
Ấn Alt +F11, mật khẩu mở pass vẫn như mọi khi:
Mã:
tuhocvba.net

Trong quá trình tìm hiểu cấu trúc code macro của phần mềm Texstudio, tôi tham khảo ở đây:

Keyword để tôi có thể tìm hiểu đó chính là "UniversalInputDialog". Nhờ có keyword này mà tôi đã tìm được nguồn tham khảo rất chính xác. Tại sao tôi lại có keyword này thì cần phải cảm ơn video của thầy Bùi Quỹ, trong phần giới thiệu Tool, tuy tool thì không công khai, nhưng qua màn hình, trong một chốc lát tôi nhìn thấy dòng code có chữ UniversalInputDialog xuất hiện.
Bạn cần đăng nhập để thấy đa phương tiện
 

giaiphapvba

Administrator
Thành viên BQT
Nhìn vào sơ đồ này mọi người sẽ dễ hình dung công việc phải làm, không có gì phức tạp lắm (theo quan điểm VBA)
Bạn cần đăng nhập để thấy đính kèm
 
Top