【问题标题】:vsto - VB - find last cell from column in outlook addinvsto - VB - 从 Outlook 插件的列中查找最后一个单元格
【发布时间】:2018-03-24 11:30:38
【问题描述】:

如何从 vsto Outlook 插件中搜索 Excel 工作表中的最后一个空单元格?

我有以下代码(未编译)

Imports Excel = Microsoft.Office.Interop.Excel
Dim ExcelApp As New Excel.Application
Dim ExcelWorkbook As Excel.Workbook
Dim ExcelWorkSheet As Excel.Worksheet= ExcelWorkbook.Worksheets(1)
Dim ExcelRange As Excel.Range = ExcelWorkSheet.Range("A1","A600")

Dim currentFind As Excel.Range = Nothing
Dim firstFind As Excel.Range = Nothing

currentFind = ExcelRange.Find("*", , Excel.XlFindLookIn.xlValues, Excel.XlLookAt.xlPart, Excel.XlSearchOrder.xlByRows, Excel.XlSearchDirection.xlNext, False)

            While Not currentFind Is Nothing

                ' Keep track of the first range you find.
                If firstFind Is Nothing Then
                    firstFind = currentFind

                    ' If you didn't move to a new range, you are done.
                ElseIf currentFind.Address = firstFind.Address Then
                    Exit While
                End If

                currentFind = ExcelRange.FindNext(currentFind)
            End While

ExcelWorkbook.ActiveSheet.range(currentFind).Select()

我已根据 Scott Holtzman 的 cmets 对其进行了更新,但现在我收到一条错误消息:HRESULT: 0x800A03EC

【问题讨论】:

  • 请将解决方案作为答案发布,而不是作为问题的更新。这是为了避免对未来的访问者造成混淆。更改并没有完全丢失,您可以在revisions 中获取它们。

标签: visual-studio excel vsto outlook-addin vba


【解决方案1】:

根据对象模型,代码没有正确的层次结构。

如果不先定义Worksheet 对象,则无法定义Range 对象,该对象需要Workbook 对象才能定义。

试试这个:

Set ExcelApp = New Excel.Application

Dim ExcelWorkbook as Excel.Workbook
Set ExcelWorkbook = ExcelApp.Workbooks.Open("myPath") 'actually opens a workbook to work with 

Dim ExcelWorksheet as Excel.Worksheet
Set ExcelWorksheet = ExcelWorkbook.Worksheets("mySheet")

Dim currentFind As Excel.Range = Nothing
Dim firstFind As Excel.Range = Nothing

Dim Fruits As Excel.Range = ExcelWorksheet.Range("A1", "A200")
Set currentFind = Fruits.Find("apples", , Excel.XlFindLookIn.xlValues, Excel.XlLookAt.xlPart, Excel.XlSearchOrder.xlByRows, Excel.XlSearchDirection.xlNext, False)


... 


Set currentFind = Fruits.FindNext(currentFind)

【讨论】:

  • @Escounda - 查看我的编辑。首先,您需要声明和设置应用程序对象。然后是工作簿对象。然后是工作表对象。然后是范围对象
  • 感谢 Scott Holtzman。我通过将 .find() 的属性更正为:XlSearchOrder.xlByColumns, Excel.XlSearchDirection.xlPrevious 解决了这个问题
【解决方案2】:

已解决:我有以下代码(正在编译!)

Imports Excel = Microsoft.Office.Interop.Excel
Dim ExcelApp As New Excel.Application
Dim ExcelWorkbook As Excel.Workbook
Dim ExcelWorkSheet As Excel.Worksheet= ExcelWorkbook.Worksheets(1)

Dim LastRow As Integer

LastRow = ExcelWorkSheet.Columns(1).Find("*", , , , Excel.XlSearchOrder.xlByColumns, Excel.XlSearchDirection.xlPrevious).Row

ExcelWorkSheet.Range("A" & LastRow).Select()

我的错误在于实际的属性库选择。谨慎选择: XlSearchOrder.xlByColumns,Excel。XlSearchDirection.xlPrevious

【讨论】:

    猜你喜欢
    • 2017-05-12
    • 1970-01-01
    • 2022-07-22
    • 2020-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-09
    • 1970-01-01
    相关资源
    最近更新 更多