2017-05-17 3 views
2

Ich habe ein funktionierendes Outlook-Makro, das die Aufgabenliste des aktuellen Benutzers in eine Excel-Tabelle exportiert, aber ich möchte es für die späte Bindung für die einfache Verteilung verwenden (dh ich muss anderen Benutzern nicht das Einstellen einer Bibliotheksreferenz usw. erklären.)Konvertierung in späte Bindung verursacht Runtime 1004 Fehler - Outlook

Ich folgte dem Beispiel Convert Early Binding VBA to Late Binding VBA : Excel to Outlook Contacts, um meine Excel-Variablen als Objekte festzulegen.

Unten finden Sie einen Vergleich, wie ich die Variablen deklariert Pre/Post-Bindung Änderung:

'Late binding variables and their early binding equivilants 
    Dim objExcel As Object 'Dim objExcel As New Excel.Application 
    Dim exWB As Object 'Dim exWb As Excel.Workbook 
    Dim sht As Object 'Dim sht As Excel.Worksheet 
    Dim Range As Object 'Dim Range As Excel.Range 
    Dim r As Object 'Dim r As Range 
    Dim cell As Object 'Dim cell As Range 

    'set application 
    Set objExcel = CreateObject("Excel.Application") 

ich jetzt eine Laufzeit 1004 Fehler im folgenden Abschnitt meines Codes bekommen:

With objExcel.ActiveSheet 
    Set r = .Range(.Cells(2, col), .Cells(.Rows.Count, col).End(xlUp)) 'runtime 1004 error here after late binding modification 
End With 
For Each cell In r 
s = cell.Text 
If Len(Trim(s)) > 0 Then 
    iloc = InStr(1, s, sChar, vbTextCompare) 
    If iloc > 1 Then 
    s1 = Left(s, iloc - 1) 
    cell.Value = s1 
    Else 
    If iloc <> 0 Then 
     cell.ClearContents 
    End If 
    End If 
End If 
Next cell 
     y = y + 1 
     stat_string = "" 
     End If 

    Next x 


'Autofit all column widths 

For Each sht In objExcel.ActiveWorkbook.Worksheets 
    sht.Columns("A").EntireColumn.AutoFit 
    sht.Columns("B").EntireColumn.AutoFit 
    sht.Columns("C").EntireColumn.AutoFit 
    sht.Columns("D").EntireColumn.AutoFit 
    sht.Columns("E").EntireColumn.AutoFit 
    sht.Columns("F").EntireColumn.AutoFit 
Next sht 

exWB.Save 

exWB.Close 

Set exWB = Nothing 
'this kills the excel program from the task manager so the code will not double up on opening the application 
'sKillExcel = "TASKKILL /F /IM Excel.exe" 
'Shell sKillExcel, vbHide 
objExcel.Application.Quit 

Ich habe den Rest des Codes nach der Fehlerzeile eingefügt. Wenn es weitere Laufzeitprobleme gibt, werden sie möglicherweise von den unglaublichen Leuten auf SO übernommen.

Ich gehe davon aus, dass die Methode zur Deklarierung meiner "Range" falsch ist, aber ich bin nicht wirklich sicher warum und daher unsicher, wie ich es beheben kann.

Jeder Körper da draußen mit einem Vorschlag?

Danke!

Antwort

4

xlUp ist eine Excel-Konstante, die in der Excel-Bibliothek definiert ist. Wenn Sie die Referenz entfernt haben, ist xlUp eine nicht deklarierte Variable.

Wenn Sie Option Explicit festgelegt haben, sollten Sie das beim Kompilieren finden.

+0

ahh vergaß diese kleine Kastanie ..... Also sollte ich gerade 'xlUp' als Objekt deklarieren? – scb998

+3

'Const xlUp = -4162', oder definieren Sie eine Enum Ihrer eigenen' Enum XlDirection' ... – ThunderFrame

+0

Legende - Vielen Dank !!! – scb998

Verwandte Themen