none
用vb2010编写excel加载项 RRS feed

  • 问题

  • 下面描述我的目的和遇到的问题,望解决。

    用vb2010编写excel加载项,点击加载项中的按钮,弹出选择form,在这个窗口中,点击按钮,实现把某些内容输入到当前激活的单元格内。

    在实际使用中,每当点击按钮就会弹出错误,说没有实例化。而把输入单元格的语句改成msg语句显示内容又可以,不会报错。

    在vba里面用activecell.value=""实现了这个功能的。迁移到vb2010就报错了。

    2013年9月24日 0:42

答案

  • Hi,

    很抱歉这么晚才回复。

    我试了下,你可以使用下面这行代码。

    Globals.ThisAddIn.Application.ActiveCell.Value = "你要设定的值"

    希望这个可以帮到你。

    Regards.


    <THE CONTENT IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, WHETHER EXPRESS OR IMPLIED>
    Thanks
    MSDN Community Support

    Please remember to "Mark as Answer" the responses that resolved your issue. It is a common way to recognize those who have helped you, and makes it easier for other visitors to find the resolution later.

    • 已标记为答案 fananhua 2013年9月26日 0:27
    2013年9月25日 10:34
    版主

全部回复

  • Hi,

    VBA 迁移到VB.Net 需要注意将对应的对象实例化, 你可以参考下下面的代码。

    Imports Excel = Microsoft.Office.Interop.Excel
    
    Public Class Form1
        Dim oExcel As Object
        Dim oBook As Object
        Dim oSheet As Object
        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            oExcel = CreateObject("Excel.Application")
            oBook = oExcel.Workbooks.Add()
            oSheet = oBook.Worksheets(1)
            oSheet.Range("A3").Select()
            oExcel.ActiveCell.Value = "Put text here"
    
            oBook.SaveAs("C:\Path\testinterop.xlsx")
            oExcel.Quit()
    
        End Sub
    End Class

    “oExcel ” 就是我们创建的一个excel对象实例,可以通过这个实例来执行对应的操作。

    希望这个有帮助。

    Regards.


    <THE CONTENT IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, WHETHER EXPRESS OR IMPLIED>
    Thanks
    MSDN Community Support

    Please remember to "Mark as Answer" the responses that resolved your issue. It is a common way to recognize those who have helped you, and makes it easier for other visitors to find the resolution later.

    2013年9月25日 2:35
    版主
  • oSheet = oBook.Worksheets(1) oSheet.Range("A3").Select()

    这两句指定了工作表和单元格,实际使用的时候是不知道具体的工作表名称和单元格位置的(所以无法在程序里面直接写)。

    请问下,如果,不要这两句,可以直接使用不?

    2013年9月25日 2:48
  • Hi,

    如果可以的话,可以让我们简单看一下你的代码吗?

    我们可以针对你的情况来找到适合的解决办法。

    Regards.


    <THE CONTENT IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, WHETHER EXPRESS OR IMPLIED>
    Thanks
    MSDN Community Support

    Please remember to "Mark as Answer" the responses that resolved your issue. It is a common way to recognize those who have helped you, and makes it easier for other visitors to find the resolution later.

    2013年9月25日 3:04
    版主
  • 可以参考下这个链接, 而且弹出form的时候 是不是就已经可以传递对应的sheet和cell以及row的信息了呢。

    有了这样的信息就可以获取对应的cell了。oExcel.ActiveCell.Row,oExcel.ActiveCell.Column 这些都是可以获取到的吧。

    oExcel.cells(oExcel.ActiveCell.Row, oExcel.ActiveCell.Column).Value

    Nice day. : )

    remember make the reply as answer and vote the reply as helpful if it helps.

    2013年9月25日 3:46
  • Imports Microsoft.Office.Interop.Excel
    
    Public Class Form1
    Private Sub Button1_Click(ByVal sender AsSystem.Object, ByVal e AsSystem.EventArgs) Handles Button1.Click
    Dim arr() As String
    Dim i As Integer = 0
    Dim jieguo As String = ""
    
    If None.Checked = True Then
    ReDim Preserve arr(i)
    arr(i) = None.Text
    i += 1
    End If
    
    If RBC.Checked = True Then
    ReDim Preserve arr(i)
    arr(i) = RBC.Text&"("&RBCtxt.Text&RBClab.Text&")"
    i += 1
    End If
    
    If WBC.Checked = True Then
    ReDim Preserve arr(i)
    arr(i) = WBC.Text & "(" &WBCtxt.Text & WBClab.Text & ")"
    i += 1
    End If
    
    jieguo = ""
    ‘连接字符串
    For j = 0 Toi - 1
    Ifi - 1 >= 1 Then
    If j <i - 1 Then
    jieguo = jieguo & arr(j) & ","
    Else :jieguo = jieguo & arr(j)
    End If
    Else :jieguo = jieguo & arr(j)
    End If
    Next j
    ‘输出结果
    MsgBox(jieguo)
    
    End Sub
    

    这个是我用来测试的代码,在vs2010里面可以正常的运行msgbox,弹出我需要的内容(复选框勾选了的内容),就是无法把弹出的结果输入到表格里面。

    你看下msgbox这句需要怎样修改,还要另外加些什么东西。

    2013年9月25日 6:16
  • Hi,

    问题重点在于是如何打开这个form的,

    跟form中点击按钮来取得数据并没多大关系,你分享的代码只是显示如何获取这个将要输入到excel的值。

    1. 打开这个form的同时,可以将选中的cell的sheet,row,cell信息传递给对应的form。

    2. 在winform里创建的对象和你打开的excel虽然说是对同一个文件操作,但不是同一个对象,所以你打开的excel有选中的cell,但是winform里创建的对象如果没有自己设置选中的cell的话,是没有选中的cell这一项的。

    因此会报出没有实例化的错误。

    这时候就可以根据第一步获取到的这些信息来选中cell并赋值。

    Regards.


    <THE CONTENT IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, WHETHER EXPRESS OR IMPLIED>
    Thanks
    MSDN Community Support

    Please remember to "Mark as Answer" the responses that resolved your issue. It is a common way to recognize those who have helped you, and makes it easier for other visitors to find the resolution later.

    2013年9月25日 7:06
    版主
  • 我是在ribbon中加了按钮的,点这个按钮的时候触发下面的事件。

    dim form as new form1

    form.show()

    如果我没记错的话,是这个。然后就出现form了。然后就是点击form上面的按钮了。


    • 已编辑 fananhua 2013年9月25日 7:51
    2013年9月25日 7:51
  • Hi,

    很高兴收到你的回复。

    根据你的回复,你可以考虑下以下建议:

    1. 给form1 设置几个变量来负责保存选中行的信息,比如 sheet,row, cell。

    2. 在创建这个form实体的时候 获取对应选中行的信息,并保存到第一步中设置的几个变量中

    3. 之后就可以根据这些变量的值来保存对应的内容到指定的cell了。

    希望这个能有所帮助。

    Regards.


    <THE CONTENT IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, WHETHER EXPRESS OR IMPLIED>
    Thanks
    MSDN Community Support

    Please remember to "Mark as Answer" the responses that resolved your issue. It is a common way to recognize those who have helped you, and makes it easier for other visitors to find the resolution later.

    2013年9月25日 7:56
    版主
  • 可不可以麻烦给下代码。

    谢谢。

    2013年9月25日 8:00
  • Hi,

    当然可以, 不过我需要你的帮助.

    可以把在ribbon添加的按钮触发的事件那段代码分享给我们吗?

    Regards.


    <THE CONTENT IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, WHETHER EXPRESS OR IMPLIED>
    Thanks
    MSDN Community Support

    Please remember to "Mark as Answer" the responses that resolved your issue. It is a common way to recognize those who have helped you, and makes it easier for other visitors to find the resolution later.

    2013年9月25日 8:03
    版主
  • ribbon的click事件里面就只加入了实例化form的事件。就是之前发的两句语句。其他的都在form1的click事件里面的。
    2013年9月25日 8:08
  • Hi,

    就是在这个click事件里添加获取选中行信息的代码。

    我在尝试可不可以传递当前

    Excel的Workbooks对象给这个form。

    这可能需要花费一点时间,请耐心等待下。

    谢谢你的理解和支持。

    Regards.


    <THE CONTENT IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, WHETHER EXPRESS OR IMPLIED>
    Thanks
    MSDN Community Support

    Please remember to "Mark as Answer" the responses that resolved your issue. It is a common way to recognize those who have helped you, and makes it easier for other visitors to find the resolution later.

    2013年9月25日 8:44
    版主
  • 这个form里面的click事件是要重复使用的,就是打开form后,选择要输入的内容,点击确定,输入内容到当前活动单元格,另外选择其他单元格,选择要输入的内容,点击确定,输入内容到当前活动单元格;重复以上步骤。
    2013年9月25日 8:56
  • Hi,

    很抱歉这么晚才回复。

    我试了下,你可以使用下面这行代码。

    Globals.ThisAddIn.Application.ActiveCell.Value = "你要设定的值"

    希望这个可以帮到你。

    Regards.


    <THE CONTENT IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, WHETHER EXPRESS OR IMPLIED>
    Thanks
    MSDN Community Support

    Please remember to "Mark as Answer" the responses that resolved your issue. It is a common way to recognize those who have helped you, and makes it easier for other visitors to find the resolution later.

    • 已标记为答案 fananhua 2013年9月26日 0:27
    2013年9月25日 10:34
    版主
  • 非常感谢,这个困扰我进一个月的问题总算解决了。辛苦啦。
    2013年9月26日 0:28