2017-10-12 8 views
0

Comment rechercher la dernière cellule vide dans une feuille Excel à partir d'un add-in vsto outlook?vsto - VB - recherche de la dernière cellule de la colonne dans Outlook addin

je le code suivant (non compilation)

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

Je l'ai mis à jour en fonction de commentaires de Scott Holtzman, mais maintenant je un message d'erreur: HRESULT: 0x800A03EC

+0

Veuillez publier des solutions en tant que réponses et non en tant que mises à jour de la question. Ceci afin d'éviter toute confusion pour les futurs visiteurs. Les modifications ne sont pas perdues exactement, et vous pouvez les récupérer dans vos [révisions] (https://stackoverflow.com/posts/46711104/revisions). – Bugs

Répondre

0

SOLVED: Je le code suivant (maintenant la compilation!)

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

Mon erreur était dans le choix bibliothèque d'une propriété. Attention à choisir: XlSearchOrder .xlByColumns, Excel. XlSearchDirection .xlPrevious

0

Le code n'a pas la hiérarchie correcte selon le modèle d'objet.

Vous ne pouvez pas définir un objet Range sans d'abord définir un objet Worksheet, qui nécessite un objet Workbook avant de pouvoir être défini.

Essayez ceci:

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 - voir mes modifications. Vous devez d'abord déclarer et définir l'objet Application. Ensuite, l'objet de classeur. Ensuite, l'objet de feuille de calcul. Ensuite, l'objet Range –

+0

Merci Scott Holtzman. Je l'ai résolu en corrigeant la propriété du .find() à: XlSearchOrder.xlByColumns, Excel.XlSearchDirection.xlPrevious – Escounda