Hướng dẫn cách Open, Close và Save file Excel trong Macro VBA

Nếu công việc của bạn đòi hỏi phải thường xuyên sử dụng Excel với các thao tác lặp đi lặp lại thì Macro VBA sẽ là một trợ thủ đắc lực giúp bạn có thể đưa ra các báo cáo một cách nhanh chóng và chính xác. Bài viết sau đây sẽ giúp các bạn làm quen với những thao tác đơn giản nhất trong Excel như open workbook, close workbook và save workbook bằng Macro VBA.

  1. Open a workbook:

Trên tab Developer, các bạn click chọn Macro, đặt tên cho Macro là Open_file và nhấn Create để hiện ra cửa sổ Microsoft Visual Basic for Application (VBA).

hình 1

Trên cửa sổ tương tác của VBA, các bạn có thể sử dụng 1 trong những code sau để mở 1 workbook có sẵn. (Ở đây mình đang sử dụng code để mở file có tên là “macro” nằm trên desktop theo đường dẫn: “C:\Users\Hanh Nguyen\Desktop\macro.xlsx”.)

  • Cách 1:

Sub Open_file()

Workbooks.Open “C:\Users\Hanh Nguyen\Desktop\test macro.xlsx”

End Sub

  • Cách 2:

Sub Open_file()

Workbooks.Open Filename:=”C:\Users\Hanh Nguyen\Desktop\test macro.xlsx”

End Sub

  • Cách 3:  đặt đường dẫn file cần mở tại 1 ô bất kỳ (trong bài mình đặt đường dẫn vào ô C4, sheet1)

hình 4

Gõ code sau trên cửa sổ VBA:

Sub Open_file()

Dim Filepath As String

Filepath = Sheets(“Sheet1”).Range(“C4”).Value

Workbooks.Open Filename:=Filepath

End Sub

       2. Close a workbook:

Tương tự như đối với open workbook, để close 1 workbook các bạn có thể sử dụng code dưới đây trên cửa sổ tương tác của VBA:

Sub Close_file()

‘ Close_file Macro


Windows(“macro.xlsx”).Activate
ActiveWorkbook.Save
ActiveWindow.Close
End Sub

       3. Save a workbook:

Excel đã cung cấp một biện pháp hữu hiệu để chúng ta có thể sử dụng Macro VBA ngay cả khi chưa biết về các lệnh của VBA, đó chính là công cụ Record Macro. Chúng ta chỉ cần thực hiện quá trình xử lý trên Excel và Excel sẽ tự động sinh ra những dòng code trên cửa sổ tương tác của VBA.

Để record công việc lưu một file mới, chúng ta cần thực hiện các bước sau :

  • Bước 1 : Trên tab Developer chọn Record Macro, sau đó đặt tên cho Macro và nhấn OK để tạo macro mới.
  • Bước 2 : Thực hiện công việc tạo ra file mới, đặt tên cho file và lưu file như thông thường.
  • Bước 3 : Sau khi đã save file mới, nhấn Stop Recording trên tab Developer để dừng việc ghi code macro. Kiểm tra trên cửa sổ của Macro VBA chúng ta thấy code đã được sinh ra ngay lập tức như sau :

Sub Save_file()

‘ Save_file Macro


Workbooks.Add
ActiveWorkbook.SaveAs Filename:= _
“C:\Users\Hanh Nguyen\Desktop\save_file_macro.xlsx”

, FileFormat:= _xlOpenXMLWorkbook, CreateBackup:=False
ActiveWindow.Close
End Sub

Như vậy chỉ với một vài bước đơn giản, chúng ta đã có được đoạn code VBA để save một workbook. Tuy nhiên để có thể ứng dụng code save file này để tạo ra các báo cáo định kỳ, chúng ta có thể truyền giá trị của filename, filepath vào code như sau:

Sub Save_file()

‘ Save_file Macro


Dim File_new As Workbook
Dim File_path As String

File_path = Sheets(“Sheet1”).Range(“C4”).Value
Set File_new = Workbooks.Add

File_new.SaveAs Filename:=File_path, _
FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
ActiveWindow.Close
End Sub

Như vậy, các bạn đã thành công trong việc tạo ra Macro VBA ứng dụng để open, close hay save một file Excel.

Comments ( 7 )

  1. / ReplyVũ Lê Cảnh
    Cho mình hỏi chuyên sâu một chút. Khi viết code VBA để save 1 file excel theo đường dẫn: “C:\Users\Hanh Nguyen\Desktop\save_file_macro.xlsx” thì nó chỉ thực hiện trên máy có user name là "Hanh Nguyen". Ở đây mình có 1 file excel chia sẻ trên mạng Lan và có nhiều máy khác truy cập dẫn đến những máy có tên khác "Hanh Nguyen" sẽ bị lỗi và không lưu được. Vậy có cách gì để VBA tự biết tên máy tính khác để tự động lưu mà không bị lỗi do sai tên computer không.
    • / ReplyLộc
      Bạn tạo “C:\Users\Hanh Nguyen\Desktop" bằng tên động: Duong_dan = thiswookbook.path . Khi đó lệnh Workbooks.Open “C:\Users\Hanh Nguyen\Desktop\test macro.xlsx” thay bằng Workbooks.Open Duong_dan & “\” & "test macro.xlsx"
      • / Replyduy
        mình chưa hiểu rõ ý bạn lắm bạn có thể nói rõ hơn giúp mình k?
      • / Replyduy nguyen
        bạn cho mình hỏi thêm. ví dụ mình có 1 file exel ten vidu_abc. khi chạy macro có mở file đó nhiều lần khi ghi đường dẫn đầy đủ thì ok. nhưng bây giờ cũng code đó để mở file exel khác có tên hơi khác file cũ vidu_xyz chẳng hạn. thì có cách nào không phải thay đổi code mà nó vẫn hiểu là vidu_xyz không. mình thử gán dim str as string str = range("a1").value sau đó dùng lệnh mở workbooks.open("duongdan\vidu_&str.xlsm) nhưng máy báo lỗi. xin bạn chỉ mình cách khắc phục cảm ơn bạn rất nhiều. mình cũng mới tập tành học vba nên có gì không đúng mong bạn bỏ qua cho.
  2. / ReplyTrường
    Đây đúng thứ mình đang cần
  3. / ReplyNuyen
    Nói thật bài viết này chẳng có tác dụng gì, làm thế này thì người ta mở tay cũng đc.
  4. / ReplyThang
    Cảm ơn các bạn rất nhiều, bài viết bổ ích và phù hợp với những gì tôi tìm kiếm. Đối với những người mới học VBA cái khó nhất là khi đọc những tài liệu họ không biết phải áp dụng liền như thế nào. Vì nếu đọc chay thì rất khó nhớ nếu không thực hành. Mong các bạn viết bài nên biên tập những bài viết nho nhỏ ứng dụng cơ bản dễ làm, người ta thấy có thể làm được và tìm hiểu thêm.

Gửi nhận xét