Excel Forum - Porady, Pomoc,  Excel Help, Excel FAQ Strona Główna
 FAQ  RegulaminRegulamin  Szukaj   Użytkownicy   Grupy   Rejestracja   Profil   Twoje wiadomości   Zaloguj 


Poprzedni temat «» Następny temat
ID tematu: 64062 Skopiuj do schowka Excel + Outlook - pobieranie informacji z maila
Autor Wiadomość
szczasiek
forumowicz


Posty: 21
Wysłany: 07-02-2019, 11:29   Excel + Outlook - pobieranie informacji z maila

Witam,

Mam poniższy kod, który wyrzuca mi dane z emaila do Excela, przy odpowiednim rule ustawionym w Outlooku. Dane wstawiane są w kolejny nie pusty wiersz.

Kod:
Const xlUp As Long = -4162

Sub ExportToExcel(MyMail As MailItem)
    Dim strID As String, olNS As Outlook.NameSpace
    Dim olMail As Outlook.MailItem
    Dim strFileName As String

Dim oXLApp As Object, oXLwb As Object, oXLws As Object
Dim lRow As Long

strID = MyMail.EntryID
Set olNS = Application.GetNamespace("MAPI")
Set olMail = olNS.GetItemFromID(strID)

On Error Resume Next
Set oXLApp = GetObject(, "Excel.Application")

If Err.Number <> 0 Then
    Set oXLApp = CreateObject("Excel.Application")
End If
Err.Clear
On Error GoTo 0

oXLApp.Visible = True

Set oXLwb = oXLApp.Workbooks.Open("C:\Users\karolmn\Documents\Attrition\Segmentation\SME 360 NOTES TRACKER.xlsx")

Set oXLws = oXLwb.Sheets("Sheet1")

With oXLws
lRow = oXLwb.Sheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row + 1
.Range("b" & lRow).Value = olMail.Body
.Range("c" & lRow).Value = olMail.Subject
.Range("d" & lRow).Value = olMail.Sender
   
End With

oXLwb.Close (True)
oXLApp.Quit
Set oXLws = Nothing
Set oXLwb = Nothing
Set oXLApp = Nothing

Set olMail = Nothing
Set olNS = Nothing
End Sub


Problemem jest znalezienie ostatniego wiersza. Błąd wyskakuje przy linicje:
Kod:
lRow = oXLwb.Sheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row + 1


Próbowałem z 10 kombinacji, ale ciągle ten sam błąd: Object required
ID posta: 362122 Skopiuj do schowka
 
 
apollo
ExcelSpec


Pomógł: 1230 razy
Posty: 4264
Wysłany: 07-02-2019, 12:01   

W Excel możesz pisać tak
Kod:

Cells(Rows.Count, 1)

To jest dozwolone i zrozumiane jak
Kod:

Cells(ActiveSheet.Rows.Count, 1)


To Excel VBA tak pozwala, ale Outlook już nie, nie rozumie, co to jest Rows. Musisz napisać
Kod:

lRow = oXLwb.Sheets("Sheet1").Cells(oXLwb.Sheets("Sheet1").Rows.Count, 1).End(xlUp).Row + 1

lub

lRow = oXLwb.Sheets("Sheet1").Cells(oXLApp.ActiveSheet.Rows.Count, 1).End(xlUp).Row + 1


lub
Kod:

lRow = oXLws.Cells(oXLws.Rows.Count, 1).End(xlUp).Row + 1

lub

lRow = oXLws.Cells(oXLApp.ActiveSheet.Rows.Count, 1).End(xlUp).Row + 1


Wtedy rozumie, że Rows jest właściwością arkusza oXLws, który już ma (Set oXLws = oXLwb.Sheets("Sheet1")) lub arkusza ActiveSheet, który jest właściwością obiektu oXLApp, który on już ma (Set oXLApp = GetObject(, "Excel.Application") lub Set oXLApp = CreateObject("Excel.Application"))
ID posta: 362124 Skopiuj do schowka
 
 
szczasiek
forumowicz


Posty: 21
Wysłany: 07-02-2019, 13:56   

Próbowałem 4 opcje, ale wyrzuca mi błąd Application defined or object defined error
ID posta: 362128 Skopiuj do schowka
 
 
apollo
ExcelSpec


Pomógł: 1230 razy
Posty: 4264
Wysłany: 07-02-2019, 14:21   

No to masz pecha
ID posta: 362133 Skopiuj do schowka
 
 
Artik 



Wersja: Win Office 365
Pomógł: 2624 razy
Posty: 8659
Wysłany: 07-02-2019, 15:18   

Czy problem nie rozbija się głównie o brak kropki przed Rows w problematycznej linii? Wszak jesteśmy wewnątrz konstrukcji With...End With, odnoszącej się do wskazanego arkusza Sheet1.
apollo o tym mówił. Może nieco innymi słowami. :-)

Artik
_________________
Persistence is a virtue in the world of programming.
ID posta: 362138 Skopiuj do schowka
 
 
apollo
ExcelSpec


Pomógł: 1230 razy
Posty: 4264
Wysłany: 07-02-2019, 20:59   

Problem z Rows.Count to na pewno, bez dyskusji. Ale nie zauważyłem, że "tam" jest WITH. Patrzyłem na kod i nie widziałem, jakbym był niewidomy. ;-)

Gdybym widział WITH to bym proponował tylko kropkę a nie oXLws. (oXLws i kropka)

Nie ma raczej innych błędów.
ID posta: 362166 Skopiuj do schowka
 
 
Artik 



Wersja: Win Office 365
Pomógł: 2624 razy
Posty: 8659
Wysłany: 07-02-2019, 22:53   

apollo napisał/a:
Patrzyłem na kod i nie widziałem, jakbym był niewidomy.
Wcale mnie to nie dziwi. Gdyby były wcięcia, to z pewnością byś zauważył. :-)

Artik
_________________
Persistence is a virtue in the world of programming.
ID posta: 362178 Skopiuj do schowka
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group
Theme xandgreen created by spleen& Programosy modified v0.3 by warna
Opieka techniczna www.marketingNET.pl

Archiwum

Strona używa plików cookies.

Kliknij tutaj, żeby dowiedzieć się jaki jest cel używania cookies oraz jak zmienić ustawienia cookie w przeglądarce.
Korzystając ze strony użytkownik wyraża zgodę na używanie plików cookies, zgodnie z bieżącymi ustawieniami przeglądarki.
Sprawdź, w jaki sposób przetwarzamy dane osobowe