【发布时间】: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
【问题讨论】: