Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Outlook/Excel
#1
Hallo liebe VBA-Gemeinde,

ich möchte aus Outlook eine Excel-Datei öffnen und aus dieser den Wert der letzten befüllten Zelle
ermitteln. Das Öffnen und Schließen der Excel-Datei funktioniert einwandfrei.
Die Ermittlung des Wertes der letzten Zeile leider nicht. Ich gehe davon aus, dass ich in der Interaktion zwischen Outlook und Excel etwas übersehen habe.
Weiß wer Rat?

Der Code lautet:

Sub Excel_open_LaufendeNummer()

 Dim dateiname As String
 Dim oexcel As Object
 Dim ws As Object
 Dim wb As Object


 dateiname = "C:\Eigene Dateien\........."
 Set oexcel = CreateObject("excel.application")
 Set wb = oexcel.workbooks.Open(dateiname)
 oexcel.Visible = True
 wb.Activate
 Set ws = wb.sheets(1)
 ws.Activate


 letztezeile = ws.cells(Rows.Count, 1).End(xlUp).Row
 'Fehlermeldung: Objekt erforderlich

 oexcel.activeworkbook.Close SaveChanges:=True
 oexcel.Quit

End Sub



Danke für Eure Antworten.

Gruß

tmessers
Antworten Top
#2
Moin!
Ich nehme an, dass Rows unbekannt ist, weil nicht korrekt referenziert wurde.
Teste mal:
letztezeile = ws.cells(ws.Rows.Count, 1).End(xlUp).Row

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
[-] Folgende(r) 1 Nutzer sagt Danke an RPP63 für diesen Beitrag:
  • tmessers
Antworten Top
#3
@RPP63

Die Lösung hatte ich auch schon probiert.

Beim Durchlauf erzeugt dieser Eintrag einen

Laufzeitfehler 1004
Anwendungs- oder objektdefinierter Fehler
Antworten Top
#4
Hallo
Hast Du schon versucht letztezeile zu deklarieren?
Gruss

Ein Lob ist der Lohn
Ein Tadel der Ansporn
[-] Folgende(r) 1 Nutzer sagt Danke an Helvetier für diesen Beitrag:
  • tmessers
Antworten Top
#5
Hallo, :19:

Du arbeitest ohne "Option Explicit" und ohne einen Verweis auf die Excelbibliothek. :21:

Der erste Fehler (Objekt erforderlich) kam, weil Du - wie Ralf richtig angemerkt hat - nicht ausreichend referenziert hast. Der  zweite Fehler "Laufzeitfehler 1004" kommt, weil Outlook kein (xlUp) kennt.

Entweder Du setzt einen Verweis auf die entsprechende Bibliothek, oder Du schreibst die Codezeile so:


Code:
letztezeile = ws.cells(ws.Rows.Count, 1).End(-4162).Row

Damit gibst Du die Konstante an. Herauszufinden in der jeweiligen Anwendung im VBA-Editor mit F2. :21:
________
Servus
Case
[-] Folgende(r) 1 Nutzer sagt Danke an Case für diesen Beitrag:
  • tmessers
Antworten Top
#6
Ja, ich war zu oberflächlich …
Zu Deinem letzten Satz, Case:
Sowas mache ich einfacher und vor allem schneller mittels ?xlUp + Enter im Direktfenster des VBA-Editors von Excel. ;)
Code:
?xlup
-4162

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
[-] Folgende(r) 1 Nutzer sagt Danke an RPP63 für diesen Beitrag:
  • tmessers
Antworten Top
#7
Danke für Eure Antworten.
Ich habe was gebastelt, dass mich in die richtige Richtung 
bringt. Ich werde mich morgen mal mit dem Code hier melden.
Bis dahin, kennt jemand gute Litaratur um meine Variablendeklarationsschwäche
zu beheben?


Gruß

tmessers
Antworten Top
#8
Hallo, :19:

hier mal ein paar Links: :21:

VBA in Excel/ Variablen und Arrays

VBA – Programmierung mit Excel - Grundlagen

Einführung in die Excel-Makroprogrammierung

Online Excel - Häufige Fragen...

Online Excel - Tutorials...

Und natürlich die Hilfe in Excel und der Objektkatalog (F2 im VBA-Editor). Das Direktfenster (STRG+G) zum schnellen ausführen von Befehlen bzw. zum Abfragen. Bei der Officeübergreifenden Programmierung ist der Objektkatalog allerdings etwas bequemer, da Du nicht jeden Befehl eintippen musst, sondern alles schön übersichtlich siehst. Das Lokalfenster zum überprüfen der Variablen und das Überwachungsfenster zum überwachen des Zustandes bzw. der Befüllung der Variablen. Das alles in Verbindung mit F9 (Haltepunkte) und F8 (schrittweises Vorgehen im Code) und Du bist gut gerüstet. Angel
________
Servus
Case
[-] Folgende(r) 1 Nutzer sagt Danke an Case für diesen Beitrag:
  • tmessers
Antworten Top
#9
@Ralf

ich habe nie Probleme meine Unwissenheit zu akzeptieren.

Der Ansatz


Code:
? xlup


war mir neu (? activecell.formula hatte ich von Die geernt)

Wäre es möglich hier im Forum eine Liste mit derartigen "Tricks" anzulegen? (so ähnlich wie Excelformeln.de)

Danke und Grüße
[-] Folgende(r) 1 Nutzer sagt Danke an Fennek für diesen Beitrag:
  • tmessers
Antworten Top
#10
Hallo liebe Gemeinde, wie angekündigt,
sende ich Euch den Code.

Zunächst möchte ich aber beschreiben was ich vorhabe. Diese Info fehlte bisher.

Ich möchte einen Postnachweis in Outlook erstellen.
Dazu soll der User
1) Eine Mail markieren (fuktioniert)
2) ein Modul starten (funktioniert)
3) Das Modul öffnet eine festgelegte Exceldatei (funktioniert in Outlook)
4) Das Modul liest aus der Exceldatei in der Spalte 1 die Ziffer in der letzten benutzten Zeile aus und erhöht um eins (Variable "lfn") (funktioniert in Excel, in Outlook nicht)
5) Die Variable "lfn" wird an Outlook übergeben. (Hier hakt es bei mir)
6) Eine UserForm wird in Outlook erzeugt (kann ich)
7) Die Textboxen 1 -5 werden wie folgt befüllt (kann ich, wenn Problem in Schritt 5 gelöst)
  TextBox1 = lfn
  Textbox2 = ReceivedTime Datum (funktioniert)
  TextBox3 = receivedTime Uhrzeit (funktioniert)
  TextBox4 = SenderEmailAddress (funktioniert)
  TextBox5 = Subject (funktioniert)
 
8) Die markierte Mail wird zur Weiterleitung vorbereitet (klappt)
    Der Body der Email wird dabei um Text ergänzt (kann ich)
9) Nach dem Senden der weiterzuleitenden Mail werden die Informationen
    Empfänger, Sendedatum, Sendezeit und Bearbeiter in die Userform übergeben (habe ich nicht nicht bearbeitet)
10) Nach einer Prüfung der Userform bestätigt der Bearbeiter die Korrektheit der Daten und die Inhalte der Textboxen
    1-9 werden in die Zeile die der Variablen "lfn" entspricht eingetragen.
11) Exceldatei wird geschlossen

Beim Schritt 4 gehe ich davon aus, dass ich immer noch Fehler bei Dim und Set mache.
Beim Schritt 9 bin ich noch unschlüssig in Bezug auf den Ablauf des Makros, da der Versand der weiter zu leitenden E-Mail
über den "Senden"-Button im Outlook erfolgt. Wie ich da wieder ins Makro komme ich mir nch nicht klar.
Eine Überlegung wäre nach dem Senden in den Ordner "Gesendete Objekte" zu gehen, die Mail nach Betreff zu suchen und die
Daten auszulesen.

Es geht mir nicht darum hier eine fertige Lösung zu bekommen. Ich möchte viel lieber Tipps haben, die ich umsetzten kann.
Weiß wer Rat zu meinen Fragen.

Hier jetzt der Code zu den Schritten 3 bis 7.

Code:
Sub Postnachweis_OUTLOOK()
   Dim oexcel As Object
   Dim ws As Object
   Dim WB As Object
   Dim objMail As MailItem
   For Each objMail In Outlook.ActiveExplorer.Selection
      Dim Auswahl As Selection
      Dim dateiname As String
      
      'Prüfung ob mehr als eine Mail markierte wurde
      'Programmabbruch wenn mehr als eine Mail markiert wurde
      Set Auswahl = Outlook.ActiveExplorer.Selection
      If Auswahl.Count > 1 Then
         MsgBox ("Sie haben zu viele E-Mails ausgewählt." & vbLf & vbLf & _
             "Bitte markieren Sie nur eine E-Mail."), vbCritical
         Exit Sub
      End If
      
      dateiname = "Meine Excel-Datei"
      
      On Error Resume Next
      Set oexcel = GetObject("excel.application")
      On Error GoTo 0
      If oexcel Is Nothing Then Set oexcel = CreateObject("Excel.Application")
      Set WB = oexcel.Workbooks.Open(dateiname)
      Set ws = WB.Sheets(1)
      oexcel.Visible = True
      
      oexcel.Activate
      
      letztezeile = oexcel.WB.ws.Cells(Rows.Count, 1).End(xlUp).Row
      lfn = letztezeile + 1
      
      With objMail
         UserForm1.TextBox1 = Format(lfn, "0000")
         UserForm1.TextBox2 = Format(objMail.ReceivedTime, "dd-mm-yy")
         UserForm1.TextBox3 = Format(objMail.ReceivedTime, "hh:mm")
         UserForm1.TextBox4 = objMail.SenderEmailAddress
         UserForm1.TextBox5 = objMail.Subject
         'UserForm1.TextBox6 = objMail.ReceivedTime
         'UserForm1.TextBox7 = objMail.ReceivedTime
         'UserForm1.TextBox8 = objMail.ReceivedTime
         'UserForm1.TextBox9 = objMail.ReceivedTime
      End With
   Next objMail
   UserForm1.Show
  
End Sub

Danke für Eure Unterstützung.
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste