【问题标题】:VB.NET Addin How do I select current worksheetVB.NET Addin 如何选择当前工作表
【发布时间】:2017-08-09 22:33:34
【问题描述】:

我正在尝试使用 VS2015 为我拥有的少数 VBA 宏创建一个 Excel VSTO 插件。我可以使用 VBA 做到这一点,但我想在 VB.NET 中弄湿我的脚。我面临的问题是如何获取活动工作表并将其分配给变量。然后,我需要传入一个之前转换为文本的范围。

该宏实质上使用户能够通过选择范围然后突出显示两个列表中出现的项目来比较两个数据列表。

这是用户尝试选择范围时执行的代码(工作正常)

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    Try
        Me.Hide()
        Dim R As Microsoft.Office.Interop.Excel.Range
        Dim A As String
        'note how the Application.InputBox brings up different settings to just InputBox
        R = Globals.ThisAddIn.Application.InputBox(Prompt:="Please select the reference range", Type:=8)
        A = R.Address
        Me.TextBox1.Text = A
        Me.Show()
        Me.TopMost = True
        Exit Sub

    Catch
        MsgBox("Please select a valid range!")
        Me.Show()
    End Try
End Sub

这是“搜索和突出显示”按钮后面的代码,它应该比较两个范围并突出显示重复项。但是,当我运行它时,它会突出显示不同工作簿中的单元格,可能是我打开的第一个工作簿。如何确保它正在打开我正在操作的当前工作簿?

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

    Dim xlApp As New Excel.Application
    Dim ws As Excel.Worksheet
    Dim sheetName As String
    Dim cell_1 As Excel.Range
    Dim cell_2 As Excel.Range
    Dim rng_1 As Excel.Range
    Dim rng_2 As Excel.Range

    xlApp = GetObject(, "Excel.Application")
    ws = xlApp.ActiveSheet
    sheetName = ws.Name

    rng_1 = ws.Range(Me.TextBox2.Text)
    rng_2 = ws.Range(Me.TextBox1.Text)

    For Each cell_1 In rng_1
        For Each cell_2 In rng_2
            If cell_2.Text = cell_1.Text Then
                cell_2.Interior.ColorIndex = 6

            End If
        Next cell_2
    Next cell_1

    Me.Close()

End Sub

【问题讨论】:

    标签: vb.net excel vba


    【解决方案1】:

    我找到了答案,所以下次我必须搜索此内容时将其发布。在下面的代码中,只需确保将 ThisAddIn 更改为您的实际加载项的名称。

        Dim wb As Excel.Workbook = Globals.ThisAddIn.Application.ActiveWorkbook
        Dim ws As Excel.Worksheet = Globals.ThisAddIn.Application.ActiveSheet
    

    【讨论】:

      【解决方案2】:

      您必须指定要与之交互的工作簿文件名。

      Dim ExcPro as New Excel.Application
      Dim Excwrkbook as Excel.Workbook=ExcPro.Workbooks.Open("YoufileName")
      

      Dim ws As Excel.Worksheet = Excwrkbook.ActiveSheet

      如果您知道有关工作簿的一些详细信息(例如其名称),也可以遍历工作簿集合(如果它已经打开)。

      Dim Exc_Books As Excel.Workbooks = Excpro.Workbooks
      Dim Exc_book As Excel.Workbook = Exc_Books.Item(1)
      

      【讨论】:

      • 如果您对工作簿名称一无所知怎么办?我希望能够在任何工作簿中使用这些功能,而不是特定的工作簿。有没有办法获取当前正在与之交互(或从中启动)的工作簿的文件名?
      猜你喜欢
      • 1970-01-01
      • 2016-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多