Chuyển đổi excel thành file chương trình

Liên hệ QC

huy vu

Thành viên hoạt động
Tham gia
29/2/12
Bài viết
164
Được thích
1
Em đang làm một file excel có code vba để thực hiện một số thủ tục phát sinh hằng ngày, vì thế em muốn chuyển nó thành chương trình. Qua tìm hiểu GPE thì biến file đó thành đuôi chạy exe, em có một số câu hỏi sau:
- các anh/chi đã có kinh nghiệm thì nên sử dụng phần mềm nào để chuyển đổi thành file exe.
- file của e có một số cell phải nhập tay vào để thủ tục được thực hiện. Theo ý hiểu của e thì đã là file exe thì ko thể động chạm vào? cứ click là chạy thôi. Vậy khi chuyển đổi sang exe có tác động vào cell được không?
Em xin cảm ơn!
 
Bạn tìm kiếm xltoexe nhé, phần mềm miễn phí.
 
Em đang làm một file excel có code vba để thực hiện một số thủ tục phát sinh hằng ngày, vì thế em muốn chuyển nó thành chương trình.

Theo tôi nghĩ thì chỗ đỏ đỏ đâu phải là lý do để chuyển thành EXE???

Còn nếu bạn muốn chuyển thành EXE vì thích thế thì bỏ xanh xanh đi.
 
Theo tôi nghĩ thì chỗ đỏ đỏ đâu phải là lý do để chuyển thành EXE???

Còn nếu bạn muốn chuyển thành EXE vì thích thế thì bỏ xanh xanh đi.
Em chưa hiểu ý của Anh lắm. Có gì mong anh thông cảm và chỉ bảo thêm.
 
Em chưa hiểu ý của Anh lắm. Có gì mong anh thông cảm và chỉ bảo thêm.

Có lẽ tôi nói rõ mà. Có code VBA đâu phải là lý do để phải chuyển thành EXE?
Mà đã không là lý do thì sao lại dùng "vì thế"?

Có thể bạn không muốn người khác truy cập, xem, sửa code của bạn hay vì lý do nào đấy mà muốn chuyển thành EXE. Nhưng nếu thế thì cái lý do đó chưa được nêu trong bài viết. Chỗ đỏ đỏ không thể là lý do vì người khác vẫn dùng code VBA mà có phải chuyển thành EXE đâu?
-------
Nếu bạn không muốn giấu code thì hãy đính kèm tập tin và giải thích rõ bạn cần làm gì thì mọi người sẽ giúp. Không phải chuyển sang EXE gì cả.
 
Lần chỉnh sửa cuối:
Có lẽ tôi nói rõ mà. Có code VBA đâu phải là lý do để phải chuyển thành EXE?
Mà đã không là lý do thì sao lại dùng "vì thế"?

Có thể bạn không muốn người khác truy cập, xem, sửa code của bạn hay vì lý do nào đấy mà muốn chuyển thành EXE. Nhưng nếu thế thì cái lý do đó chưa được nêu trong bài viết. Chỗ đỏ đỏ không thể là lý do vì người khác vẫn dùng code VBA mà có phải chuyển thành EXE đâu?
-------
Nếu bạn không muốn giấu code thì hãy đính kèm tập tin và giải thích rõ bạn cần làm gì thì mọi người sẽ giúp. Không phải chuyển sang EXE gì cả.
Em cảm ơn anh đã góp ý.
Code của e cũng được nhặt nhạnh trên GPE, là việc mở file và lưu dữ liệu từ máy chủ về, file nguồn thì sinh ra hàng ngày nên này nào cũng phải chạy code, nên nghĩ cách để lưu thành file chạy thôi ạh
 
Em cảm ơn anh đã góp ý.
Code của e cũng được nhặt nhạnh trên GPE, là việc mở file và lưu dữ liệu từ máy chủ về, file nguồn thì sinh ra hàng ngày nên này nào cũng phải chạy code, nên nghĩ cách để lưu thành file chạy thôi ạh
Chuyển thành file chạy thì khi bạn có sự thay đổi vẫn phải lưu file mà.
 
Có nhiều cách để thực hiện. Lập Scheduled Task để chạy thẳng là 1 cách.

Nhưng cách hữu hiệu nhất là viết thẳng một code vbs (VBScript) để mở file và thực hiện mọi thứ. Đó là nhiệm vụ của VBScript (JScript cũng được).

Trong cái command để chạy, có phần nhập tham số: đó là 1 cách giải quyết câu hỏi 2.
 
Vậy em xin phép up file lên để anh/chị giúp đỡ!
Tại sheet13 nhập ngày cần lấy dữ liệu ở ô A12
File dữ liệu được lưu ở máy chủ. đường dẫn ở ô B2
File dữ liệu được lưu về để ở share của máy trạm, đường dẫn ở ô B3
Tên file lấy có tên ở ô C2
Tên File lưu về có tên ở ô E2
Đọan code lưu dữ liệu
Mã:
Sub LuuFile()
    Application.DisplayAlerts = False
    Dim Name1 As String, Name2 As String
        Name1 = Sheet13.[D2]
        Name2 = Sheet13.[F2]
' Kiem tra su ton tai cua file
    With CreateObject("Scripting.FileSystemObject")
        If .FileExists(Name1) = False Then
            MsgBox "Chua co file", vbInformation, "tho^ng bao'"
            Exit Sub
            Else
            Workbooks.Open Name1
            ActiveWorkbook.SaveAs Name2, FileFormat:=xlExcel12
        End If
    End With
' Close lai
    ActiveWorkbook.Close
    Application.DisplayAlerts = True
End Sub
 

File đính kèm

  • JScipt.zip
    16.7 KB · Đọc: 11
Vậy em xin phép up file lên để anh/chị giúp đỡ!
Tại sheet13 nhập ngày cần lấy dữ liệu ở ô A12
File dữ liệu được lưu ở máy chủ. đường dẫn ở ô B2
File dữ liệu được lưu về để ở share của máy trạm, đường dẫn ở ô B3
Tên file lấy có tên ở ô C2
Tên File lưu về có tên ở ô E2
Đọan code lưu dữ liệu
Mã:
Sub LuuFile()
    Application.DisplayAlerts = False
    Dim Name1 As String, Name2 As String
        Name1 = Sheet13.[D2]
        Name2 = Sheet13.[F2]
' Kiem tra su ton tai cua file
    With CreateObject("Scripting.FileSystemObject")
        If .FileExists(Name1) = False Then
            MsgBox "Chua co file", vbInformation, "tho^ng bao'"
            Exit Sub
            Else
            Workbooks.Open Name1
            ActiveWorkbook.SaveAs Name2, FileFormat:=xlExcel12
        End If
    End With
' Close lai
    ActiveWorkbook.Close
    Application.DisplayAlerts = True
End Sub

Chỗ đỏ đỏ là thế nào? Code tự nhập ngày tháng? Nếu thế thì code lấy ở đâu hay là lấy ngày hiện tại? Bạn tiết kiệm vài từ thì người khác phải đoán.

Tôi tự miêu tả rồi hướng dẫn. Nếu không đúng ý thì lỗi tại bạn.

Cần mở tập tin mỗi ngày. Khi mở tập tin thì cần nhập ngày tháng vào cell A12, và thực hiện code của Sub LuuFile. Khi thực hiện xong Sub LuuFile thì lưu lại tập tin (do có nhập ngày tháng vào A12) và thoát Excel.

Tôi không quan tâm về Sub LuuFile vì chắc bạn đã thao tác được bằng tay (nhấn nut Import)

Các thao tác
1. Mở tập tin --> Alt + F11 --> đúp chuột lên ThisWorkBook --> dán code sau vào module của ThisWorkbook
Mã:
Private Sub Workbook_Open()
    Sheet1.Range("A12").Value = Date
    LuuFile
    Save
    Application.Quit
End Sub

2. Mở notepad --> dán code sau vào notepad
Mã:
Set Shell = CreateObject("WScript.Shell")
Shell.Run "excel.exe ""[COLOR=#ff0000]C:\book1.xlsm[/COLOR]"""

Chỗ đỏ đỏ thay bằng đường dẫn đầy đủ tới tập tin của bạn

Chọn Save --> nhập tên vd. là chandai.vbs. Chỗ đỏ đỏ phải là vbs.

3. Tạo trong AutoStart shortcut tới tập tin chân dài.vbs để nó được khởi động mỗi lần khởi động Windows.

Do code tự thực hiện rồi thoát Excel nên bạn không thể mở "bằng tay" (để thêm thắt, chỉnh sửa?) được. Muốn mở "bằng tay" thì mở Excel --> disable macro --> mở tập tin.
 
@ a Siwtom: chỗ đo đỏ thực ra là nhập tay.. nhưng em để bằng =today() để cho nhanh vì ngày nào cũng phải lấy file. Trường hợp các hôm trước chưa lấy dữ liệu thì phải nhập lùi ngày ạ.
Trên dữ liệu của máy chủ lúc dữ liệu có sớm..lucs có muộn.. nên em có sử dụng ..fileexists để bẫy lỗi.
Giả sử file như vd của a là book1.xlsm có nhiều thủ tục thì nó sẽ chạy hết các thủ tục ạ. Muốn nó chỉ chạy sub luufile thôi có đc ko?
Em cảm ơn!
 
Giả sử file như vd của a là book1.xlsm có nhiều thủ tục thì nó sẽ chạy hết các thủ tục ạ. Muốn nó chỉ chạy sub luufile thôi có đc ko?
Em cảm ơn!

Nhiều người dùng từ "tự động". Không có gì là tự động cả. Muốn thực hiện những thủ tục nào thì phải "gọi", phải "liệt kê" ra trong code.

Trích
Mã:
Private Sub Workbook_Open()
    Sheet1.Range("A12").Value = Date
    [SIZE=5][COLOR=#ff0000]LuuFile[/COLOR][/SIZE]
    Save
    Application.Quit
End Sub

Rõ ràng tôi chỉ gọi 1 sub duy nhất là sub LuuFile (đỏ đỏ), hay bạn mắt kém?. Cho dù tập tin có 1000 sub nhưng tôi chỉ gọi 1 sub LuuFile thôi thì chỉ code của nó được thực hiện.

Muốn thực hiện những sub nào, theo thứ tự nào thì phải "gọi", phải "liệt kê" ra trong code. Không phải là cứ mở tập tin ra là tất cả mọi thủ tục có trong "ruột" lần lượt được thực hiện.
 
Cái này em nhận lỗi.. mắt kém.. nhìn bằng đt nên không nhìn hết.
Thêm 1 nội dung nữa: cái chỗ date e phải nhập bằng tay vậy chạy file chandai..vbs thì nó mặc định là ngày hệ thống ạ? E muốn lấy dữ liệu ngày nào thì nhập ngày đó.
 
Cái này em nhận lỗi.. mắt kém.. nhìn bằng đt nên không nhìn hết.
Thêm 1 nội dung nữa: cái chỗ date e phải nhập bằng tay vậy chạy file chandai..vbs thì nó mặc định là ngày hệ thống ạ? E muốn lấy dữ liệu ngày nào thì nhập ngày đó.

"Bằng tay"? Đã "bằng tay" thì phải là tay ai đó, ai đó phải ngồi vào máy. Thế thì bầy trò "tự động" làm gì?
Thì ai đó mà có cái tay kia ngồi vào máy, mở tập tin và nhập ngày, sau đó nhấn nút Import. Thế không được sao?
Chỗ đỏ đỏ: muốn hay không chỉ có con người. Máy, code nó không thể biết bạn muốn cái gì. Vậy thì chỉ còn nước con người ngồi vào máy và thao tác.
 
"Bằng tay"? Đã "bằng tay" thì phải là tay ai đó, ai đó phải ngồi vào máy. Thế thì bầy trò "tự động" làm gì?
Thì ai đó mà có cái tay kia ngồi vào máy, mở tập tin và nhập ngày, sau đó nhấn nút Import. Thế không được sao?
Chỗ đỏ đỏ: muốn hay không chỉ có con người. Máy, code nó không thể biết bạn muốn cái gì. Vậy thì chỉ còn nước con người ngồi vào máy và thao tác.
File thực hiện các thủ tục khá nặng nề.
Việc chuyển sang file chạy để nó chạy nhẹ nhàng hơn, làm 1 vài thủ tục nhất định mà ko cần mở file ra.
date là 1 tham số như ý của a Vetmini ở bài #11 thì tốt.
 
File thực hiện các thủ tục khá nặng nề.
Việc chuyển sang file chạy để nó chạy nhẹ nhàng hơn, làm 1 vài thủ tục nhất định mà ko cần mở file ra.
date là 1 tham số như ý của a Vetmini ở bài #11 thì tốt.

Lúc thì bạn nói chỉ chạy 1 thủ tục duy nhất LuuFile, lúc này thì lại "1 vài thủ tục"

Tôi không hiểu sao chỉ một vài thao tác mà bạn muốn "tự động". Vì muốn được "gõ ngày nhất định" thì phải "hiện lên cái gì đó để gõ" chứ không thể đang ở desktop cứ nhấn phím là được. Nếu bạn dùng script VBS thì bạn cũng phải mở cửa sổ dòng lệnh, gõ tên script + tham số. Sao không thể thay mở cửa sổ dòng lệnh bằng mở Excel? Bạn định tiết kiệm những thao tác nào?

Cho dù bạn có biến cái tập tin của bạn thành EXE (xlstoexe) hay tự viết chương trình trong vd. VB6 thì nếu code của exe vẫn là gọi và thực hiện code trong tập tin Excel thì có khác gì bạn mở Excel rồi thực hiện thủ tục?

Còn nếu bạn muốn viết EXE trong VB6, không gọi và thực hiện bất cứ thủ tục nào trong tập tin Excel mà code của riêng EXE sẽ tự làm hết các việc mà LuuFile từng làm thì bạn đợi ai đó. Tôi lười rồi.

Tôi sẽ chỉ bổ sung thêm khả năng truyền thông số khi kích hoạt chandai.vbs.

1. Trong tập tin Excel không thêm bất cứ code nào. Chỉ có code cũ của bạn.

2. Nội dung chandai.vbs
Mã:
Dim Arg
    Set Arg = WScript.Arguments
'   msgbox "Tham so la: " & Arg(0)
    Set ExcelApp = CreateObject("Excel.Application")
    Set wb = ExcelApp.Workbooks.Open("[COLOR=#ff0000]c:\book1.xlsm[/COLOR]")
    wb.Worksheets("Note").Range("A12").Value = Arg(0)
    ExcelApp.Run "LuuFile"
    wb.Save
'    [COLOR=#0000ff]ExcelApp.Visible = TRUE[/COLOR]
    [B]ExcelApp.Quit[/B]
    Set Arg = Nothing
    Set wb = Nothing
    Set ExcelApp = Nothing

Chỗ đỏ đỏ là đường dẫn đầy đủ tới tập tin Excel

Nếu muốn sau khi làm xong mọi việc không đóng Excel thì "bật" dòng xanh xanh và "tắt" (biến thành ghi chú hoặc xóa) dòng đậm.

3. Khi nào muốn chạy thì mở cửa sổ dòng lệnh và chọn 1 trong 3 khả năng:
a. Nếu thư mục hiện hành không phải là thư mục của chandai thì phải chuyển về thư mục đó --> gõ chandai <tham số>

b. bất luận thư mục hiện hành như thế nào gõ đường dẫn đầy đủ tới chandai. Ví du
c:\he he\hic hic\chandai <tham số>

c. Đặt chandai trong path của system, tức những đường dẫn hiển thị sau khi gõ path và ENTER trong cửa sổ dòng lệnh. Vd. thường thư mục C:\Windows, C:\Windows\System32 (trong XP) là có trong path.

Lúc này bất luận thư mục hiện hành như thế nào thì chỉ cần gõ chandai <tham số>

Như vậy cách c là ít thao tác nhất. Chú ý khi gõ là giữa chandai và <tham số> có dấu cách

<tham số> là ngày tháng mà bạn gõ vào. Phải gõ cho đúng cách nhập ngày tháng để sau đó A12 đúng là ngày tháng. Ví dụ trong system của tôi thì ngày tháng là Năm-Tháng-Ngày nên tôi gõ
chandai 2014-08-14 rồi Enter
 
Lần chỉnh sửa cuối:
Web KT

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

Back
Top Bottom