2017-10-12 1 views
0

Wie suchen Sie nach der letzten leeren Zelle in einem Excel-Blatt von einem vsto Outlook Addin?vsto - VB - letzte Zelle aus der Spalte in Outlook finden addin

Ich habe den folgenden Code (nicht kompilieren)

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() 

ich es nach Scott Holtzman Kommentare aktualisiert haben, aber jetzt bekomme ich eine Fehlermeldung: HRESULT: 0x800A03EC

+0

Bitte posten Sie Lösungen als Antworten nicht als Updates für die Frage. Dies dient dazu, Verwirrung für zukünftige Besucher zu vermeiden. Die Änderungen gehen nicht verloren und Sie können sie in Ihren [Revisionen] (https://stackoverflow.com/posts/46711104/revisions) abholen. – Bugs

Antwort

0

GELÖST: Ich habe den folgenden Code (jetzt kompilieren!)

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() 

Mein Fehler in der tatsächlichen Eigenschaft Bibliothek Wahl war. Vorsicht bei der Auswahl: XlSearchOrder .xlByColumns, Excel. XlSearchDirection .xlPrevious

0

Der Code muss nicht die korrekte Hierarchie nach dem Objektmodell.

Sie können ein Range Objekt nicht definieren, ohne zunächst ein Worksheet Objekt zu definieren, das ein Workbook Objekt muss, bevor sie definiert werden kann.

Versuchen Sie folgendes:

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) 
+0

@Escounda - sehe meine Änderungen. Zuerst müssen Sie das Anwendungsobjekt deklarieren und setzen. Dann das Arbeitsmappenobjekt. Dann das Worksheet-Objekt. Dann das Range Object –

+0

Danke Scott Holtzman. Ich habe es gelöst, indem ich die Eigenschaft von .find() korrigiert habe auf: XlSearchOrder.xlByColumns, Excel.XlSearchDirection.xlPrevious – Escounda

Verwandte Themen