在visual studio中运行并编译vba脚本

时间:2016-11-07 12:22:26

标签: visual-studio excel-vba compilation macros vba

我已经在VBA上使用了一段时间的宏,并且有一些我想要隐藏的信息。由于excel是一种非常不安全的语言,我已经想到了创建编译脚本的.exe文件以避免人们访问我的代码。 我一直在寻找使用Visual Studio执行此操作的方法,但无法得到答案。 有人能告诉我怎么做吗? 非常感谢提前:))

2 个答案:

答案 0 :(得分:0)

我不认为您可以使用vba创建EXE / DLL。 EXE / DLL是编译的程序集,因此您需要一个可编译的编程语言/环境。编译意味着“预翻译为机器语言”。 VBA只是一种解释语言,这意味着它将在VBA环境中即时翻译。我认为你必须使用C#,C ++等来做到这一点。如需进一步了解,请参阅:

here

Create a DLL using VBA editor

http://www.geeksengine.com/article/create-dll.html

您可以在不创建DLL的情况下锁定和隐藏您的VBA代码:

https://msdn.microsoft.com/en-us/library/dt232c9t(VS.80).aspx

http://www.excel-easy.com/vba/examples/protect-macro.html

http://www.ozgrid.com/VBA/protect-vba-code.htm

但我不确定这是否能解决你的问题:你说,优秀的VBA似乎是一种不安全的语言。我不确定我是否明白你的意思。如果您只想隐藏脚本的内容,请参阅上文。到目前为止,这将比在其他版本的excel中更好地保​​护您的代码。但我认为还有办法解决这个问题,例如: G。蛮力攻击等。通常这是增强的方法,但如果你想确定你(或更好的经验丰富的程序员必须为此创建一个程序(exe)。如果安全意味着不同的东西(为什么你想隐藏你的代码? )让我知道,也许还有另一种方法可以实现你想做的事情。

答案 1 :(得分:0)

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))   检查此链接是否有解决方案:

https://social.msdn.microsoft.com/Forums/en-US/26accc30-9cfb-4d86-9c27-780f51929ecb/access-is-denied-exception-from-hresult-0x80070005-eaccessdenied?forum=vsreportcontrols

这是代码,但我会访问Stefan建议的链接。