2016-04-12 21 views
0

Ich habe gesucht, wie dieses Problem für einige Zeit behoben werden kann. Es ist schwierig, spezifische Antworten zu finden, ohne tief in VBA eintauchen zu müssen, was ich tun würde, wenn ich müsste.Excel-Automatisierungsfehler Laufzeitfehler 440 - Autokorrektur von Outlook-Termin .Start

Ich habe ein Kalender-Update-Makro, das Termine zu unserem Outlook-Kalender hinzufügen sollte. Ich habe den Code geerbt und ihn einfach kopiert und eingefügt, indem ich kleinere Änderungen an den Zellen vorgenommen habe. Die Codes sind unten:

Sub CreateNewItems() 

Dim dimnum As Integer 
Dim num As Integer 
Dim objOL 'As Outlook.Application 
Dim objApt 'As Outlook.AppointmentItem 
Dim objNamespace 
Dim strFolderName 
Dim objCalendar 
Dim objInbox 
Dim pctCompl As Single 
Const olMeeting = 1 
Const olFolderInbox = 6 
Const olAppointmentItem = 1 '1 = Appointment 
'do not display alerts 
Application.DisplayAlerts = False 
'do not update screen 
Application.ScreenUpdating = False 

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
'Create new Undergrad info session events on Outlook Calendar 
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 

Windows("WebScraper.xlsm").Activate 
Sheets("Calendar Info Sess. Bridge").Activate 
Set ws = ActiveSheet 
ws.Range("B2").Select 
ws.Range(Selection, Selection.End(xlDown)).Select 
dimnum = Selection.count 

ws.Range("B2").Select 
num = 0 
Do Until num = dimnum 
    Set objOL = CreateObject("Outlook.Application") 
    Set objNamespace = objOL.GetNamespace("MAPI") 
    'Finds your Inbox 
    Set objInbox = objNamespace.GetDefaultFolder(olFolderInbox) 

    'Gets the parent of your Inbox which gives the Users email 
    strFolderName = objInbox.Parent 
    Set objCalendar =  objNamespace.Folders(strFolderName).Folders("Calendar").Folders("Undergrad TNRB") 

    Set objApt = objCalendar.Items.Add(olAppointmentItem) 
    With objApt 
     .Subject = ActiveCell.Offset(0, 9).Value 
     .Location = ActiveCell.Offset(0, 4).Value 
     .start = ActiveCell.Offset(0, 1).Value & ActiveCell.Value 
     .End = ActiveCell.Offset(0, 3).Text & ActiveCell.Offset(0, 2).Value 
     .Save 
    End With 
    ActiveCell.Offset(1, 0).Select 
    num = num + 1 
Loop 
End Sub 

Von dem, was ich sagen kann, das Problem ist, dass in dem With Block, sollte es .Start statt .start sein. Leider, jedes Mal, wenn ich versuche, groß zu schreiben, Autokorrekturen VBA wieder auf .start. Ich habe einige andere Subs, die vor diesem Code laufen, aber ich habe jede Instanz entfernt, in der ich das Wort "start" verwendet habe, egal ob Groß- oder Kleinschreibung, kommentierter Code oder ausführbarer Code, also erstelle ich keine Variablen, die das nicht wissen Linie würde versuchen zu verweisen (soweit ich das beurteilen kann). Ich dachte, es könnte sein, dass .Start eine VBA-definierte Funktion ist, aber ich weiß nicht genug, um zu wissen, ob das stimmt, oder was die erforderliche Konvention wäre, um dies zu erhalten, um den Termin in Outlook zu speichern.

Sie können sehen, dass ich die Anzahl der Zeilen im Blatt in den ersten paar Zeilen bekomme, und dann wiederhole ich die Do Schleife für jede Zeile des Blattes. So wie intuitiv im Block With, 9 Spalten rechts ist eine Betreffzeile für den Termin, 4 Spalten auf der rechten Seite ist der Ort des Termins, die aktive Spalte ist das Datum des Beginns des Termins, die nächste Spalte ist das Datum, an dem der Termin endet (alle Ereignisse beginnen und enden am selben Datum), die Spalte 2 rechts ist die Startzeit, und die Spalte 3 rechts ist die Endzeit.

+0

Haben Sie ein Modul/Funktion/Prozedur namens 'Start'. Wenn nicht, dann geben Sie am Anfang des Vorgangs einfach "Dim Start" ein und drücken die Eingabetaste. Dann lösche diese Zeile. Überprüfen Sie jetzt –

+0

Es scheint, dass das eine gute Idee war - alle '.start' Linien änderten sich in' .Start'. Wenn ich diese Codezeile durchführe, erhalte ich einen "Laufzeitfehler 440 ': Automatisierungsfehler". –

+0

Jetzt bin ich verwirrt ... Erhalten Sie einen Syntaxfehler oder einen Automatisierungsfehler? –

Antwort

0

Als ich den Code durchging, waren die Zeitspalten (Spalten 1 rechts und 3 rechts) schmal, und visuell zeigten diese Spalten #s (genau wie Excel, wenn die Spalte nicht vollständig expandiert ist). Aus irgendeinem Grund zog der Code die #s, anstatt den tatsächlichen Wert. Es könnte etwas mit dem Text zu tun haben, aber als ich .Value verwendete, funktionierte es immer noch nicht. Falls jemand anderes dieses Problem hat, versuchen Sie Columns.EntireColumn.Autofit für die Spalten, die zu schmal sind, von denen Sie Werte abrufen möchten.