Discussion:
[Jak?]wstawianie terminów do Outlooka z Excela
(Wiadomość utworzona zbyt dawno temu. Odpowiedź niemożliwa.)
Ryszard Mikke
2010-04-23 14:39:10 UTC
Permalink
Witam,

w tej grupie chyba po raz pierwszy choć już trochę w VB grzebałem.

Potrzebuję porady, bądź skierowania do odpowiedniej dokumentacji, bo mam dość
blade pojecie, jak to ugryżć.

Mam dane w Excelu, dla kazdego dnia coś tam jest wpisane.
Chce zrobic skrypcik, który będzie te dane czytać i na tej podstawie
wstawiać "spotkania" do kalendarza w Outlooku.

Pętla czytająca te dane to nie problem, nie mam natomiast pojęcia,
jak z Excela wykonac jakiekolwiek operacje na kalendarzu Outlooka.
I nie idzie mi jakoś szukanie jakichś konkretnych informacji, jak to zrobić...

Acha, wersje:
Outlook 2003 SP3
Excel 003 SP3

rmikke
--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
Michal AKA Miki
2010-04-25 09:20:55 UTC
Permalink
Post by Ryszard Mikke
Witam,
w tej grupie chyba po raz pierwszy choć już trochę w VB grzebałem.
Potrzebuję porady, bądź skierowania do odpowiedniej dokumentacji, bo mam dość
blade pojecie, jak to ugryżć.
Mam dane w Excelu, dla kazdego dnia coś tam jest wpisane.
Chce zrobic skrypcik, który będzie te dane czytać i na tej podstawie
wstawiać "spotkania" do kalendarza w Outlooku.
Pętla czytająca te dane to nie problem, nie mam natomiast pojęcia,
jak z Excela wykonac jakiekolwiek operacje na kalendarzu Outlooka.
I nie idzie mi jakoś szukanie jakichś konkretnych informacji, jak to zrobić...
tutaj masz kod (co prawda wstawianie z Worda, ale w VBA to jest to samo)
http://www.gmayor.com/create_outlook_entries_from_word.htm

Generalnie obiekty w kalendarzu nazywaja sie "Appointment" :)
I takiego czegos powinienes szukac w googlach..

Pare skrotow:
http://support.microsoft.com/kb/220595
http://en.allexperts.com/q/Excel-1059/2008/6/VBA-Excel-Outlook-Appointment.htm
http://technet.microsoft.com/en-us/library/ee692864.aspx

Pozdrawiam
Michal
Ryszard Mikke
2010-04-30 15:11:07 UTC
Permalink
Post by Michal AKA Miki
Post by Ryszard Mikke
Witam,
w tej grupie chyba po raz pierwszy choć już trochę w VB grzebałem.
Potrzebuję porady, bądź skierowania do odpowiedniej dokumentacji, bo mam dość
blade pojecie, jak to ugryżć.
Mam dane w Excelu, dla kazdego dnia coś tam jest wpisane.
Chce zrobic skrypcik, który będzie te dane czytać i na tej podstawie
wstawiać "spotkania" do kalendarza w Outlooku.
Pętla czytająca te dane to nie problem, nie mam natomiast pojęcia,
jak z Excela wykonac jakiekolwiek operacje na kalendarzu Outlooka.
I nie idzie mi jakoś szukanie jakichś konkretnych informacji, jak to zrobić...
tutaj masz kod (co prawda wstawianie z Worda, ale w VBA to jest to samo)
http://www.gmayor.com/create_outlook_entries_from_word.htm
Generalnie obiekty w kalendarzu nazywaja sie "Appointment" :)
I takiego czegos powinienes szukac w googlach..
http://support.microsoft.com/kb/220595
http://en.allexperts.com/q/Excel-1059/2008/6/VBA-Excel-Outlook-Appointment.htm
http://technet.microsoft.com/en-us/library/ee692864.aspx
Jako że powyższe wydaje sie wyjaśniać wszystko, wziąłem się raźno do roboty.

Okazało się jednak, że jeden drobny problem na wcześniejszym etapie jest.
Sytuacja jest taka: w pliku z danymi pisać nie mogę.
Stworzyłem więc drugi plik z guzikiem i podpietym do niego skryptem VBA.
Wszystko fajnie działa pod warunkiem, że plik z danymi mam otwarty.
Natomiast jeśli jest zamknięty, metoda Workbooks.Open otwiera go...
i na tym się kończy działanie skryptu.

Internet zasugerował bug z otwieraniem pliku z wciśniętym shiftem - to nie to.
Próbowałem również zamiast prostego workbooks.open zrobić

Dim book as Workbook
Dim sheet as Worksheet
* * Application.EnableEvents = False
* * Set book = Workbooks.Open Filename:= "C:\Test\ExcelWB_Template.xls"
Set sheet = book.Sheets("Sheet 1")
sheet.Range("A1").FormulaR1C1 = "ABC Company"
sheet.Range("A2").FormulaR1C1 = "123"

(za http://www.pcreview.co.uk/forums/thread-3771789.php
oczywiście podstawiłem swoje pracowicie wyliczone zmienne
za nazwy pliku i arkusza)
- działa tak samo, jak workbooks.open.

Plik z danymi zawiera makro uruchamiane przy starcie i tego nie zmienię.
Jak to obejść?

rmikke
--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
Michal AKA Miki
2010-05-01 23:20:48 UTC
Permalink
Post by Ryszard Mikke
Próbowałem również zamiast prostego workbooks.open zrobić
Dim book as Workbook
Dim sheet as Worksheet
* * Application.EnableEvents = False
* * Set book = Workbooks.Open Filename:= "C:\Test\ExcelWB_Template.xls"
Set sheet = book.Sheets("Sheet 1")
sheet.Range("A1").FormulaR1C1 = "ABC Company"
sheet.Range("A2").FormulaR1C1 = "123"
(za http://www.pcreview.co.uk/forums/thread-3771789.php
oczywiście podstawiłem swoje pracowicie wyliczone zmienne
za nazwy pliku i arkusza)
- działa tak samo, jak workbooks.open.
Plik z danymi zawiera makro uruchamiane przy starcie i tego nie zmienię.
Jak to obejść?
Tak na szybko, to najprosciej zmodyfikowac excela z danymi - tam do
procedury Workbook_Open na samym poczatku wstawic kod, ktory sprawdza, czy
twoj program jest uruchomiony (z konkretna sciezka i nazwa). Jesli tak, to
excel z danymi konczy dzialanie i staje sie zwyklym excelem...

Napisz, czy twoj program wywolujacy plik z danymi to drugi arkusz excela,
czy jakis exec lub vbs.

Pozdrawiam
Michal
Ryszard Mikke
2010-05-02 13:50:01 UTC
Permalink
Post by Michal AKA Miki
Post by Ryszard Mikke
Próbowałem również zamiast prostego workbooks.open zrobić
Dim book as Workbook
Dim sheet as Worksheet
* * Application.EnableEvents = False
* * Set book = Workbooks.Open Filename:= "C:\Test\ExcelWB_Template.xls"
Set sheet = book.Sheets("Sheet 1")
sheet.Range("A1").FormulaR1C1 = "ABC Company"
sheet.Range("A2").FormulaR1C1 = "123"
(zahttp://www.pcreview.co.uk/forums/thread-3771789.php
oczywiście podstawiłem swoje pracowicie wyliczone zmienne
za nazwy pliku i arkusza)
- działa tak samo, jak workbooks.open.
Plik z danymi zawiera makro uruchamiane przy starcie i tego nie zmienię.
Jak to obejść?
Tak na szybko, to najprosciej zmodyfikowac excela z danymi - tam do
procedury Workbook_Open na samym poczatku wstawic kod, ktory sprawdza, czy
twoj program jest uruchomiony (z konkretna sciezka i nazwa). Jesli tak, to
excel z danymi konczy dzialanie i staje sie zwyklym excelem...
Napisz, czy twoj program wywolujacy plik z danymi to drugi arkusz excela,
czy jakis exec lub vbs.
Pozdrawiam
Michal
Problem w tym, że nie mogę grzebać w pliku z danymi, z przyczyn hmm...
pozatechnicznych.
Dlatego chcę uruchamiać makro z innego pliku excelowego.

rmikke
Michal AKA Miki
2010-05-02 20:56:01 UTC
Permalink
Post by Ryszard Mikke
Post by Michal AKA Miki
Tak na szybko, to najprosciej zmodyfikowac excela z danymi - tam do
procedury Workbook_Open na samym poczatku wstawic kod, ktory sprawdza, czy
twoj program jest uruchomiony (z konkretna sciezka i nazwa). Jesli tak, to
excel z danymi konczy dzialanie i staje sie zwyklym excelem...
Napisz, czy twoj program wywolujacy plik z danymi to drugi arkusz excela,
czy jakis exec lub vbs.
Problem w tym, że nie mogę grzebać w pliku z danymi, z przyczyn hmm...
pozatechnicznych.
Dlatego chcę uruchamiać makro z innego pliku excelowego.
W takim razie potrzeba wiecej szczegolow.. jesli mozesz, wrzuc makra ktore
masz oraz te z pliku z danymi..
I napisz, w czym dokladnie jest problem - czy zglasza jakis blad, czy nie
wykonuje jakichs czynnosci, chociaz powinien...

Pozdrawiam
Michal
Ryszard Mikke
2010-05-06 15:08:50 UTC
Permalink
Post by Michal AKA Miki
Post by Ryszard Mikke
Post by Michal AKA Miki
Tak na szybko, to najprosciej zmodyfikowac excela z danymi - tam do
procedury Workbook_Open na samym poczatku wstawic kod, ktory sprawdza, czy
twoj program jest uruchomiony (z konkretna sciezka i nazwa). Jesli tak, to
excel z danymi konczy dzialanie i staje sie zwyklym excelem...
Napisz, czy twoj program wywolujacy plik z danymi to drugi arkusz excela,
czy jakis exec lub vbs.
Problem w tym, że nie mogę grzebać w pliku z danymi, z przyczyn hmm...
pozatechnicznych.
Dlatego chcę uruchamiać makro z innego pliku excelowego.
W takim razie potrzeba wiecej szczegolow.. jesli mozesz, wrzuc makra ktore
masz oraz te z pliku z danymi..
I napisz, w czym dokladnie jest problem - czy zglasza jakis blad, czy nie
wykonuje jakichs czynnosci, chociaz powinien...
Skrypty z pliku z danymi nie sa dla mnie dostępne, ale skądinąd wiem,
że cudów nie robia - wybierają tylko wiersz dla bieżącego dnia, żeby
plik otwierał się w odpowiednim miejscu.

Natomiast mój skrypt wygląda tak:

Sub wstawSpotkania()
Dim adresNazwiska, adresDaty As Range
Dim komorkaNazwiska, komorkaDaty As Range
Dim Plik, Arkusz, refNazwiska, refDaty As String
Dim pomNazwiska, pomDaty As String
Dim Wiersz, Komorka As Double
Dim book As Workbook
Dim sheet As Worksheet

Set adresNazwiska = Range("B5")
Set adresDaty = Range("B6")

pomNazwiska = Mid(adresNazwiska.Formula, 2, 256)
refNazwiska = Mid(pomNazwiska, InStr(pomNazwiska, "!") + 1, 256)
pomDaty = Mid(adresDaty.Formula, 2, 256)
refDaty = Mid(pomDaty, InStr(pomDaty, "!") + 1, 256)
pomNazwiska = Mid(pomNazwiska, 1, InStr(pomNazwiska, "!") - 1)
If Left(pomNazwiska, 1) = "'" Then
pomNazwiska = Mid(pomNazwiska, 2, 256)
End If
If Right(pomNazwiska, 1) = "'" Then
pomNazwiska = Mid(pomNazwiska, 1, Len(pomNazwiska) - 1)
End If
Arkusz = Mid(pomNazwiska, InStr(pomNazwiska, "]") + 1, 256)
pomNazwiska = Mid(pomNazwiska, 1, InStr(pomNazwiska, "]") - 1)
Plik = Application.WorksheetFunction.Substitute(pomNazwiska, "[", "")
MsgBox "test 0"
Application.EnableEvents = False
Set book = Workbooks.Open(Plik, 0, False)
'========Ponizej tego wiersza nic sie nie wykonuje=============
Set sheet = book.Sheets(Arkusz)
Application.EnableEvents = True
'Workbooks.Open Plik, 0, True
MsgBox "test 1"
Workbooks(Plik).Sheets(Arkusz).Activate
ActiveSheet.Range(refNazwiska).Select
MsgBox "Wybrało się?"
''Workbooks(Plik).Close SaveChanges:=False

End Sub

I błąd polega na tym, co w komentarzu - po otwarciu pliku z danymi
nic więcej sie nie wykonuje z mojego skryptu. Skrypt starowy pliku z danymi
robi swoje i nie zwraca mi sterowania.

rmikke
--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
Michal AKA Miki
2010-05-06 21:44:20 UTC
Permalink
Post by Ryszard Mikke
Post by Michal AKA Miki
Post by Ryszard Mikke
Post by Michal AKA Miki
Tak na szybko, to najprosciej zmodyfikowac excela z danymi - tam do
procedury Workbook_Open na samym poczatku wstawic kod, ktory sprawdza, czy
twoj program jest uruchomiony (z konkretna sciezka i nazwa). Jesli
tak,
to
excel z danymi konczy dzialanie i staje sie zwyklym excelem...
Napisz, czy twoj program wywolujacy plik z danymi to drugi arkusz excela,
czy jakis exec lub vbs.
Problem w tym, że nie mogę grzebać w pliku z danymi, z przyczyn hmm...
pozatechnicznych.
Dlatego chcę uruchamiać makro z innego pliku excelowego.
W takim razie potrzeba wiecej szczegolow.. jesli mozesz, wrzuc makra ktore
masz oraz te z pliku z danymi..
I napisz, w czym dokladnie jest problem - czy zglasza jakis blad, czy nie
wykonuje jakichs czynnosci, chociaz powinien...
Skrypty z pliku z danymi nie sa dla mnie dostępne, ale skądinąd wiem,
że cudów nie robia - wybierają tylko wiersz dla bieżącego dnia, żeby
plik otwierał się w odpowiednim miejscu.
Sub wstawSpotkania()
Dim adresNazwiska, adresDaty As Range
Dim komorkaNazwiska, komorkaDaty As Range
Dim Plik, Arkusz, refNazwiska, refDaty As String
Dim pomNazwiska, pomDaty As String
Dim Wiersz, Komorka As Double
Dim book As Workbook
Dim sheet As Worksheet
Set adresNazwiska = Range("B5")
Set adresDaty = Range("B6")
pomNazwiska = Mid(adresNazwiska.Formula, 2, 256)
refNazwiska = Mid(pomNazwiska, InStr(pomNazwiska, "!") + 1, 256)
pomDaty = Mid(adresDaty.Formula, 2, 256)
refDaty = Mid(pomDaty, InStr(pomDaty, "!") + 1, 256)
pomNazwiska = Mid(pomNazwiska, 1, InStr(pomNazwiska, "!") - 1)
If Left(pomNazwiska, 1) = "'" Then
pomNazwiska = Mid(pomNazwiska, 2, 256)
End If
If Right(pomNazwiska, 1) = "'" Then
pomNazwiska = Mid(pomNazwiska, 1, Len(pomNazwiska) - 1)
End If
Arkusz = Mid(pomNazwiska, InStr(pomNazwiska, "]") + 1, 256)
pomNazwiska = Mid(pomNazwiska, 1, InStr(pomNazwiska, "]") - 1)
Plik = Application.WorksheetFunction.Substitute(pomNazwiska, "[", "")
MsgBox "test 0"
Application.EnableEvents = False
Set book = Workbooks.Open(Plik, 0, False)
'========Ponizej tego wiersza nic sie nie wykonuje=============
Set sheet = book.Sheets(Arkusz)
Application.EnableEvents = True
'Workbooks.Open Plik, 0, True
MsgBox "test 1"
Workbooks(Plik).Sheets(Arkusz).Activate
ActiveSheet.Range(refNazwiska).Select
MsgBox "Wybrało się?"
''Workbooks(Plik).Close SaveChanges:=False
End Sub
I błąd polega na tym, co w komentarzu - po otwarciu pliku z danymi
nic więcej sie nie wykonuje z mojego skryptu. Skrypt starowy pliku z danymi
robi swoje i nie zwraca mi sterowania.
A probowales przechodzic procedure klawiszem F8 (krok po kroku, kazde
nacisniecie F8 to 1 krok, wchodzac w kazda procedure zagniezdzona) - to jest
dobry debugger...

Na chwile obecna jedyne, co mi przychodzi na mysl, to zastapienie tego:

Application.EnableEvents=false

tym:

Application.AutomationSecurity = msoAutomationSecurityForceDisable

(tylko zeby potem z powrotem wrocic do poprzedniego modelu security trzeba
to troche rozbudowac)
Przyklad znajdziesz np tutaj:
http://www.excelforum.com/excel-programming/384353-using-vba-to-disable-macros-when-opening-files.html

Pozdrawiam
Michal

Loading...