我一直在使用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. .exe不會編譯,但在Visual Studio中運行時會出現
- 6. 編譯+在Visual Studio中運行單個文件?
- 7. 在Visual Studio,CodeBlocks和Eclipse中編譯/運行C++的問題?
- 8. Visual Studio在編譯/運行時將ASP.NET放在哪裏
- 9. h2數據庫:運行腳本編譯
- 10. 編譯FFMPEG在Visual Studio 2013
- 11. pyinstall編譯腳本無法運行
- 12. bash腳本來編譯和運行C++
- 13. 運行特定版本的Visual Studio(並行安裝兩個版本的Visual Studio)
- 14. 在visual studio中啓動時運行powershell腳本
- 15. 無法在Visual Studio中運行Python腳本
- 16. 如何在Windows中運行Visual Studio C#交互式腳本?
- 17. 如何在Visual Studio中運行R腳本
- 18. 我可以在Visual Studio 2008中運行VBScript腳本嗎?
- 19. 無法在Visual Studio中使用IronPython運行python腳本
- 20. 在Excel中運行vba腳本的C#
- 21. 嘗試在清除的範圍上運行編譯並運行腳本
- 22. Visual Studio試圖在編輯器中運行程序並崩潰
- 23. 在Visual Studio中編寫Excel VBA代碼
- 24. 並行編譯咖啡腳本
- 25. visual studio 2013中的錯誤(編譯和運行代碼)
- 26. 在編譯時運行Visual Studio定製工具
- 27. 我可以編譯並運行Visual Studio代碼中的.NET MVC 5項目嗎?
- 28. 從VBA運行R腳本
- 29. 並行版本的Visual Studio
- 30. 編譯C++在Visual Studio在彙編
我不知道這是否解決了你的問題,但也許你可以使用插件?請參閱[創建Excel 2007 vsto添加](http://www.clear-lines.com/blog/post/create-excel-2007-vsto-add-in-getting-started.aspx) – Stefan
@Stefan感謝您的支持你的答案。我從你的鏈接開始做了一些研究,我想我會發現它很有用。我沒有考慮到它,但這是我尋找的起點。 = D –
好的,很高興聽到這個消息。如果你發現你在找什麼,分享你的知識。 ;) – Stefan