请现在手上有个比较大的vba程序,我想修改里面的一个方法,但是没编过vba,虽然能看懂代码,想问下能不能用创建一个C#的sln,然后在里面重载vba方法,有没有什么可以实现的方法?vba的程序里面的类中的方法能在C#新建的sln中直接掉用么(怎么添加引用)?

解决方案 »

  1.   

    完全没问题!请搜索VSTO方面的资料!
      

  2.   

    帮你找到了几个
    VSTO运行VBA代码
      

  3.   

    不可以的 你可以把 VBA 转换成 VB.NET 倒是可以用 sln
      

  4.   

    我说了完全是可以的!怎么还说不可以??
    ---------------------------
    c#生成VBA代码! Excel.Workbook book=.....
        Excel.Worksheet sheet=...    //得到第一个Sheet的编程模型
        VBIDE.VBComponent componentsheet1=book.VBProject.VBComponents.Item(sheet.CodeName);    //测试,添加一行
        componentsheet1.CodeModule.AddFromString("'Hello'");
        //测试,删除所有行
        componentsheet1.CodeModule.DeleteLines(1,componentsheet1.CodeModule.CountOfLines);    //添加代码
        componentsheet1.CodeModule.AddFromString(@"
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        Target.Interior.Color = RGB(222,222,222)
    End Sub
    "
         );
    ---------------------------------------
    C# 调用VBA中写在SHEET中的SUB方法!
    Excel.Worksheet sht = Globals.Sheet1.InnerObject;  
    sht.Test(); 
    -----------------
    C# 调用VBA中写在模块中的方法!
    private void button1_Click(object sender, EventArgs e)  {  
    Application.Run("test");  

    VBA代码:
    Sub test()  
        MsgBox "Hello world" 
    End Sub 
      

  5.   

    在VSTO里读取VBA代码并获得某个常数的值
    VBA的sheet1里写了如下代码:
    Option Explicit  
    Private Const rate As Double = 6.85 
    现在想在VSTO里读取VBA代码并获取rate常数的值,可以用以下的代码来实现:
    private void button1_Click(object sender, EventArgs e)  
    {  
      string code = Globals.ThisWorkbook.VBProject.VBComponents.Item(1).CodeModule.get_Lines(3, 1).ToString();  
    MessageBox.Show(code.Split('=').GetValue(1).ToString().Replace(" ",""));  
      

  6.   


    多谢,不过不是用在写Excel中。抱歉没说清楚,我这有一个vba.net的程序,是用visual studio做好的,我需要做另一个C#的程序,需要调用那个vba程序中的类。多谢提示,我在msdn中找到了C#调用vba的方法。