我一直在使用VBA上的宏一段時間,並且還有一些我想隱藏的信息。由於excel是一種非常不安全的語言,因此我提出了創建編譯腳本的.exe文件以避免人們訪問我的代碼的想法。 我一直在尋找使用Visual Studio做到這一點的方法,但無法得到答案。 有人可以告訴我如何做到這一點? 非常感謝提前:)在Visual Studio中運行並編譯vba腳本
回答
我不認爲你可以通過使用vba創建EXEs/DLLs。 EXEs/DLL是編譯程序集,因此您需要一個可編譯的編程語言/環境。編譯意味着「預譯成機器語言」。 VBA只是一種解釋型語言,這意味着它將在VBA環境中實時翻譯。我認爲你必須使用C#,C++等來做到這一點。如需進一步infromation請參閱:
http://www.geeksengine.com/article/create-dll.html
https://msdn.microsoft.com/en-us/library/dt232c9t(VS.80).aspx
您可以鎖定和隱藏你的VBA代碼,而無需創建一個DLL:
http://www.excel-easy.com/vba/examples/protect-macro.html
http://www.ozgrid.com/VBA/protect-vba-code.htm
Best way to protect Excel VBA code?
但我不知道是否能解決你的問題:你說過,Excel的VBA似乎是一個不安全的語言。我不確定我是否明白你的意思。如果您只想隱藏腳本的內容,請參閱上文。到目前爲止,這將比在其他版本的Excel中更好地保護您的代碼。但我認爲還有一種方法可以解決這個問題, G。蠻力攻擊等通常是增強的方法,但如果你想確保你(或更好的經驗豐富的程序員必須爲此創建一個程序(exe),如果安全意味着不同的東西(爲什麼你想隱藏你的代碼? )比讓我知道,也許是有其他的方式來實現你想要做的事。
非常感謝您的回答,非常感謝。我將進一步瞭解您發送給我的鏈接,我現在沒有太多時間... 我的意思是不安全的是,正如您可能已經注意到的,這些使用密碼保護vba代碼的方法是非常容易闖入。 我目前正在從數據庫導入數據,所以數據庫IP:端口和ID和PASS在腳本上,這是完全不可接受的。這是內部使用的業務,但你知道......比對不起更安全...... –
我理解編譯和解釋語言之間的差異......但是,直到現在我所做的所有工作都是在VBA中完成的,所以.. 。改變編程代碼的方式將是一件非常乏味的事情......這就是爲什麼我正在考慮在與數據庫的連接部分中創建一個.DLL的可能性,這樣,所有的功能都可以,而UserID和PASSWORD在編譯部分是安全的。我希望我能夠解釋我的問題,以便你能理解我。正如我所說,我會看看你寄給我的鏈接,希望我能得到一個好的結果。如果是的話,我會告訴你! –
是的,當然,我知道你的意思。到目前爲止,我沒有在vba中開發自己的dll。但據我瞭解的鏈接,它應該有可能只是移動你的一部分功能。有可能是你創建了一個類似於代理的dll。我發現下面的帖子可以幫助你[http://stackoverflow.com/questions/3217014/how-to-securely-store-connection-string-details-in-vba](http://stackoverflow.com/questions/3217014/how-to-secure-store-connection-string-details-in-vba) – Stefan
using ADODB;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
namespace HiddenConnectionString
{
[InterfaceType(ComInterfaceType.InterfaceIsDual),
Guid("2FCEF713-CD2E-4ACB-A9CE-E57E7F51E72E")]
public interface IMyServer
{
Connection GetConnection();
void Shutdown();
}
[ClassInterface(ClassInterfaceType.None)]
[Guid("57BBEC44-C6E6-4E14-989A-B6DB7CF6FBEB")]
public class MyServer : IMyServer
{
private Connection cn;
private string cnStr = "Provider=MSDAORA.1;Password=YourPass;User ID=YourID;Data Source=YourServer";
public MyServer()
{
}
public Connection GetConnection()
{
cn = new Connection();
cn.ConnectionString = cnStr;
cn.Open();
return cn;
}
public void Shutdown()
{
cn.Close();
}
}
}
你可能會得到這個錯誤...這是因爲InterfaceType的Guid
訪問是(來自HRESULT的異常:0x80070005(E_ACCESSDENIED)) 查看此鏈接的解決方案:
這是代碼,但我會訪問Stefan建議的鏈接。
- 1. 在Visual Studio中運行SQL腳本
- 2. visual studio 2010 c#winform運行時編譯
- 3. 在Visual Studio上並行執行Python腳本和C#腳本
- 4. 編寫Visual Studio IDE腳本
- 5. Visual Studio在編譯/運行時將ASP.NET放在哪裏
- 6. h2數據庫:運行腳本編譯
- 7. 嘗試在清除的範圍上運行編譯並運行腳本
- 8. 我可以在Visual Studio 2008中運行VBScript腳本嗎?
- 9. 如何在Windows中運行Visual Studio C#交互式腳本?
- 10. 無法在Visual Studio中使用IronPython運行python腳本
- 11. Visual Studio試圖在編輯器中運行程序並崩潰
- 12. 在編譯時運行Visual Studio定製工具
- 13. visual studio 2013中的錯誤(編譯和運行代碼)
- 14. 從VBA運行R腳本
- 15. Moblin可以運行(並編譯)Python腳本嗎?
- 16. 在Android Studio中運行Python腳本
- 17. 並行版本的Visual Studio
- 18. 如何在webpack在npm中編譯後運行bash腳本
- 19. 編譯C++在Visual Studio在彙編
- 20. 更改Visual Studio編譯器版本
- 21. 如何在Visual Studio中編譯Labview CIN?
- 22. 在Visual Studio中預編譯App_LocalResources
- 23. 我無法在Visual Studio 2010中編譯
- 24. 在Visual Studio 2008中編譯Linux項目
- 25. 在Visual Studio中將.cu編譯爲.obj
- 26. 如何在編譯和運行時獲得visual studio中的命令行步驟?
- 27. 如何在visual studio中編寫腳本而無需在visual studio中註釋腳本標記
- 28. Visual Studio 2010的C#單行編譯
- 29. 編譯並運行Yaws appmods
- 30. 在腳註文本上運行VBA
我不知道這是否解決了你的問題,但也許你可以使用插件?請參閱[創建Excel 2007 vsto添加](http://www.clear-lines.com/blog/post/create-excel-2007-vsto-add-in-getting-started.aspx) – Stefan
@Stefan感謝您的支持你的答案。我從你的鏈接開始做了一些研究,我想我會發現它很有用。我沒有考慮到它,但這是我尋找的起點。 = D –
好的,很高興聽到這個消息。如果你發現你在找什麼,分享你的知識。 ;) – Stefan