Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Zeilen aus einem Excel-Sheet als Termin in den Kalender eintragen

1,012 views
Skip to first unread message

Ingrid Reske

unread,
Nov 3, 2004, 8:29:02 AM11/3/04
to
Hallo Ng-ler

gibt es eine Möglichkeit, per VBA eine Zeile aus einem Arbeitsblatt bei
Shortcut oder Anklicken als Termin in den Outlook-Kalender zu schieben?

Vielen Dank für Eure Antwort im voraus.

Gruß Ingrid


Bernd Held

unread,
Nov 3, 2004, 9:10:23 AM11/3/04
to
Hallo Ingrid,

wenn Du mir eine kleine Demomappe mailst, dann programmier ich dir das
gerne.
held-...@t-online.de

Viele Grüße
Bernd
MVP für Microsoft Excel
VBA-Bücher mit Leseproben(PDF) und Schulungen
unter http://held-office.de

"Ingrid Reske" <i...@msc.de> schrieb im Newsbeitrag
news:cmaq2l...@news.msc-ge.com...

Thomas Ramel

unread,
Nov 3, 2004, 9:25:14 AM11/3/04
to
Grüezi Bernd

Bernd Held schrieb am 03.11.2004

> wenn Du mir eine kleine Demomappe mailst, dann programmier ich dir das
> gerne.

Also ich denke, dass Fragen, die hier in der NG gestellt werden auch hier
in der NG beantwortet werden sollten....

...zumindest wäre es schön, nach erfolgter Impementierung hier den Code
(wenn vielleicht auch verallgemeinert) zu posten.

--
Mit freundlichen Grüssen

Thomas Ramel
- MVP für Microsoft-Excel -

[Win XP Pro SP-1 / xl2000 SP-3]

Bernd Held

unread,
Nov 3, 2004, 9:53:24 AM11/3/04
to
Hallo Thomas,

Ich benötige die Demodatei, damit ich in etwa weiß wie ich vorgehen soll.
Leider habe ich keine fertige Lösung parat, die ich hier präsentieren
könnte.
Eine Vorstellung der Lösung würde ich selbstverständlich ins Forum stellen,
keine Frage

Gruß
Bernd

"Thomas Ramel" <t.r...@MVPs.org> schrieb im Newsbeitrag
news:1xr0fw5x28ira.1aw77ttcgyb93$.dlg@40tude.net...

Ahmed Martens

unread,
Nov 3, 2004, 9:57:24 AM11/3/04
to
Hallo Thomas,

Thomas Ramel schrieb:

>
> ...zumindest wäre es schön, nach erfolgter Impementierung hier den
> Code (wenn vielleicht auch verallgemeinert) zu posten.

gebe ich dir uneingeschränkt Recht.

Also für Alle:
(Der Code stammt von Kieseler, zu finden unter www.kieseler.de)
Es handelt sich um eine Access-Datenbank.

1) Hier der Code für einen Termin:
(Die Feldbezeichungen sind einfach durch die Zellen zu ersetzen und das
alles in einem Modul untergebracht)

'Set objOutlook = CreateObject("Outlook.Application")
'Set itm = objOutlook.CreateItem(olAppointmentItem)
'itm.Start = "6/1/98 10:00 AM"
'itm.Duration = 2400
'itm.Subject = "Review monthly budget"
'itm.Display



Dim objOutlook As Outlook.Application
Dim apptOutlook As Outlook.AppointmentItem
Set objOutlook = CreateObject("Outlook.Application")
Set apptOutlook = objOutlook.CreateItem(olAppointmentItem)


Dim Betreff1 'Betreff
Dim Text1 'Notizen zum Termin
Dim Termin 'Fälligkeit des Termines
Dim ZeitT 'Zeit des Termines
Dim Anm 'Kommentar zu Feld Notizen hinzufügen
Dim AnmDate 'Datum der Versendung an Outlook
Dim Kat 'Kategorie des Termines
Dim RemDate 'Erinnerungsdatum
AnmDate = Now()

'Zuerst prüfen, ob der Notizentext leer ist
If Len(Trim(Nz([Notes]))) = 0 Then
' Feld ist leer
Beep
MsgBox "Bitte geben Sie einen Text in das Notizenfeld ein!" & vbCrLf
& vbCrLf _
& "Führen Sie dann die Aktion erneut aus!", vbCritical, "Keine
Notizen!"
Me.Notes.SetFocus 'Focus auf das Notizenfeld
Exit Sub 'Prozedur beenden
Else
' Feld enthält Daten


'Notizbereich (Body) des Termines zusammenstellen
Text1 = Me.Notes.Value & vbCrLf _
& "Der Besuch war am: " & Me.Datum.Value & " um: " &
Me.CustomerStart & " Uhr" _
& vbCrLf & "(Von Access empfangen! " & AnmDate & " Uhr)"

End If
'Jetzt geht's ab zu Outlook
With apptOutlook

'entweder mit Datum und Zeit des Termines
'Fälligkeit auslesen (Format: "TT/MM/JJ hh:mm" z.B.: "24/12/98
18:00")

Termin = Me.OL98Dat.Value
ZeitT = Me.CustomerStart.Value
.Start = Termin & " " & ZeitT
'Länge des Termines in Minuten, wenn nicht AllDayEvent
.Duration = 30
'Erinnerung vor dem Termin in Minuten
'.ReminderSet = True
.ReminderMinutesBeforeStart = 20


'oder Ganztägiges Ereignis
'.AllDayEvent = True




'Betreff, Notzibereich und Ort des Termines
Betreff1 = Me.Customer.Value
.Subject = Betreff1
.Body = Text1
.Location = "Test"

'Asisstenten, die dabei sein sollen
'.RequiredAttendees = "Ernst Test;Franz Beispiel"

'Kategorie setzen
.Categories = "Test"
'möglich wäre hier auch die Werteübernahme aus dem aktuellen
Form
'Kat = Me.Category.Value
'.Categories = Kat



'Hier können Sie wählen, ob Anzeigen oder Speichern oder beides

'.Save
.Display

End With
'+++Fertig mit Outlook

'Das Feld Notizen um den Eintrag "(*** Als Outlook-Termin versendet!
***)" erweitern

Anm = Me.Notes.Value & vbCrLf _
& "(=> OL 2000! " & AnmDate & " Uhr)"
Me.Notes.Value = Anm



Set apptOutlook = Nothing
Set objOutlook = Nothing
Fehler_3163_Msg:
'Fehler bei zu vielen Zeichen im Textfeld
If Err = 3163 Then
Beep
MsgBox "Das Feld Notizen hat schon zu viele Zeichen!" & vbCrLf _
& "Es konnte kein Outlook-Versendehinweis eingetragen werden" &
vbCrLf & vbCrLf _
& "Die Aufgabe wurde trotzdem ordnungsgemäß nach Outlook
versendet!", vbCritical, "Problem!"
End If


2) Hier der Code für eine Aufgabe:
(Felder einfach durch Excel-Zellen austauschen)

'Fehler entsteht, wenn Textfeld Notizen zu klein ist,
'um die zusätzliche Versendungs-Info aufzunehmen
On Error GoTo Fehler_3163_Msg


'++++++++Die Wiedervorlage als *Aufgabe* zu Outlook 98 hinzufügen

Dim Betreff1 'Betreff
Dim Text1 'Notizen zur Aufgabe
Dim Termin 'Fälligkeit der Aufgabe
Dim ZeitT 'Zeitpunkt Aufgabe
Dim RT 'Reminder Datum + Zeit
Dim Anm 'Kommentar zu Feld Notizen hinzufügen
Dim AnmDate 'Datum der Versendung an Outlook
AnmDate = Now()

'Prüfen, ob ein Kunde eingetragen ist
If Len(Trim(Nz([Customer]))) = 0 Then
Beep
MsgBox "Kein Kunde!", vbCritical, "Problem"
Me.Customer.SetFocus
Exit Sub
Else
DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
End If

'Dann prüfen, ob der Notizentext leer ist
If Len(Trim(Nz([Notes]))) = 0 Then
' Feld ist leer
Beep
MsgBox "Bitte geben Sie einen Text in das Notizenfeld ein!" & vbCrLf
& vbCrLf _
& "Führen Sie dann die Aktion erneut aus!", vbCritical, "Keine
Notizen!"
Me.Notes.SetFocus 'Focus auf das Notizenfeld
Exit Sub 'Prozedur beenden
Else
' Feld enthält Daten


'Variable für Betreff auslesen
Betreff1 = Me.Customer.Value

'Notizbereich (Body) der Aufgabe zusammenstellen
Text1 = Me.Notes.Value & vbCrLf _
& "Der Besuch war am: " & Me.Datum.Value & " um: " &
Me.CustomerStart & " Uhr" _
& vbCrLf & "(Von Access empfangen! " & AnmDate & " Uhr)"
'Erinnerungsdatum auslesen
'RemDate = Me.RetryDate
End If
'-----------------------------------------------------------------------
'Und ab geht's zu OL98

Dim appOutLook As Outlook.Application
Dim taskOutLook As Outlook.TaskItem
Set appOutLook = CreateObject("Outlook.Application")
Set taskOutLook = appOutLook.CreateItem(olTaskItem)
With taskOutLook
'Betreff und Body der Aufgabe
.Subject = Betreff1 'Betreff setzen
.Body = Text1 'Body setzen


'Die beiden Variablen festlegen
Termin = Me.OL98Dat.Value
ZeitT = Me.CustomerStart.Value

'Fälligkeitsdatum setzen, Wichtig: Halten Sie diese Reihenfolge ein
'Erst die Fälligkeit und den Beginn,
'erst dann Erinnerungszeit setzen


.DueDate = Termin 'Fällig am
.StartDate = Termin 'Beginnt am


'Erinnerungszeit setzen
'.ReminderOverrideDefault = True 'Nur, falls User in OL Unsinn
eingestellt hat
'(3 Vorschläge für Setzen der Erinnerung)
.ReminderTime = Termin & " 10:00" 'Datum aus Formular - Zeit
fest
'.ReminderTime = Termin & " " & ZeitT 'Datum und Zeit aus
Access-Formular
'.ReminderTime = DateAdd("h", 1, Now)
'.ReminderSet = True 'Reminder einschalten
.ReminderPlaySound = True
'Pfad zu einer .wav Datei
'.ReminderSoundFile = "C:\Windows\Media\Ding.WAV"

If Len(Trim(Nz([Category]))) = 0 Then
Beep
MsgBox "Keine Kategorie!", vbCritical, "Problem!"
Me.Category.SetFocus
Exit Sub
Else
.Categories = Me.Category.Value
End If


'Entweder Sichern oder Anzeigen
'.Save
.Display
End With

'Das Feld Notizen um den Eintrag "(*** Als Outlook-Aufgabe
versendet! ***)" erweitern

Anm = Me.Notes.Value & vbCrLf _
& "(=> OL 2000! " & AnmDate & " Uhr)"
Me.Notes.Value = Anm



Set taskOutLook = Nothing
Set appOutLook = Nothing

Fehler_3163_Msg:
'Fehler bei zu vielen Zeichen im Textfeld
If Err = 3163 Then
Beep
MsgBox "Das Feld Notizen hat schon zu viele Zeichen!" & vbCrLf _
& "Es konnte kein Outlook-Versendehinweis eingetragen werden" &
vbCrLf & vbCrLf _
& "Die Aufgabe wurde trotzdem ordnungsgemäß nach Outlook
versendet!", vbCritical, "Problem!"
End If


###########

Den Code funktioniert sogar mit OL 2003. Das umarbeiten müssen andere
machen.

Gruß Ahmed

--
Antworten bitte nur in der Newsgroup.

Bernd Held

unread,
Nov 3, 2004, 10:10:52 AM11/3/04
to
Hallo Ingrid, hallo Thomas,

anbei die folgende Lösung, ausgehend dass in Spalte A das Datum, in Spalte B
ein Text sowie in spalte C eine Uhrzeit steht.

Sub TerminUebertragen()
Dim intz As Integer


Dim objOutlook As Outlook.Application
Dim apptOutlook As Outlook.AppointmentItem

Set objOutlook = CreateObject("Outlook.Application")

For intz = 2 To ActiveSheet.UsedRange.Rows.Count
Set apptOutlook = objOutlook.CreateItem(olAppointmentItem)
With apptOutlook
.Subject = "[Eintrag aus Excel: " & _
Cells(intz, 2).Value & "]"
.Body = Cells(intz, 2).Value
.Start = Cells(intz, 3).Value
.AllDayEvent = False
.ReminderSet = False
.Save
End With
Next intz
End Sub

Viele Grüße
Bernd


Thomas Ramel

unread,
Nov 3, 2004, 10:13:31 AM11/3/04
to
Grüezi Bernd

Bernd Held schrieb am 03.11.2004

> Ich benötige die Demodatei, damit ich in etwa weiß wie ich vorgehen soll.

Wenns individuell sein soll, ist dies klar.

> Leider habe ich keine fertige Lösung parat, die ich hier präsentieren
> könnte.
> Eine Vorstellung der Lösung würde ich selbstverständlich ins Forum stellen,
> keine Frage

Fein, dann sprechen wir dieselbe Sprache :-)

Michael Zimmermann

unread,
Nov 3, 2004, 10:36:55 AM11/3/04
to
Hallo!

Bernd Held:
> Dim intz As Integer

Mein üblicher Integer-Hinweis: Long statt Integer.

Letzteres ist seit dem 486er obsolet, da Integers für den
Prozessor sowieso in Long hochgerechnet werden müssen und
hinterher wieder runter. Man tut mit Integer also im
Gegensatz zu früher kein gutes Werk mehr. (Es ist
allerdings auch keine Katastrophe.)

> For intz = 2 To ActiveSheet.UsedRange.Rows.Count

...
> Next intz

Unter Performance-Aspekten sehr schlechtes Konstrukt,
da ActiveSheet.UsedRange.Rows.Count in jedem
Schleifendurchlauf wieder bestimmt wird.

Viel besser:

Dim i as Long, n as long

n = ActiveSheet.UsedRange.Rows.Count

For i = 1 To n
...
Next i

Grundregel: Werte oder Objekte, die mehrfach verwendet
werden, Variablen zuweisen.

Gruß aus Mainz
Michael

Bernd Held

unread,
Nov 3, 2004, 3:51:34 PM11/3/04
to
Hallo,

wenn es interessiert, hier nun die Lösung:

"Thomas Ramel" <t.r...@MVPs.org> schrieb im Newsbeitrag

news:71gdvi4gj3vd.yhadm8nz9fb7$.dlg@40tude.net...

Sub TermineUebertragen()
Dim intz As Integer
Dim intMAx As Integer
Dim intT As Integer


Dim objOutlook As Outlook.Application
Dim apptOutlook As Outlook.AppointmentItem

intT = 0


Set objOutlook = CreateObject("Outlook.Application")

intMAx = ActiveSheet.UsedRange.Rows.Count
For intz = 2 To intMAx
If Cells(intz, 7).Value = "X" Then


Set apptOutlook = objOutlook.CreateItem(olAppointmentItem)
With apptOutlook

.Subject = "[" & Cells(intz, 2).Value & "]"
.Body = Cells(intz, 2).Value & vbLf & _
Cells(intz, 1).Value & vbLf & _
Cells(intz, 3).Value & vbLf & _
Cells(intz, 4).Value & vbLf & _
Cells(intz, 6).Value
.Start = Cells(intz, 5).Value
.AllDayEvent = True
.ReminderSet = False
.Save
intT = intT + 1
End With
End If
Next intz
MsgBox "Es wurden " & intT & " Termine übertragen!"
End Sub


Sub OutlookKalenderBereinigen()
Dim appOutlook As Outlook.Application
Dim aptAppointment As Outlook.AppointmentItem
Dim folAppointment As Outlook.MAPIFolder
Dim itmAppointments As Outlook.Items
Dim nspOutlookNameSpace As Outlook.Namespace
Dim lngCount As Long
Dim lngIndex As Long

On Error Resume Next
Set appOutlook = New Outlook.Application
If Err.Number = 0 Then
Set nspOutlookNameSpace = appOutlook.GetNamespace("MAPI")
Set folAppointment = nspOutlookNameSpace.GetDefaultFolder(olFolderCalendar)
Set itmAppointments = folAppointment.Items

lngCount = itmAppointments.Count
For lngIndex = lngCount To 1 Step -1
On Error Resume Next
If Left(itmAppointments(lngIndex).Subject, 1) = "[" Then
itmAppointments(lngIndex).Delete
If Err.Number = 0 Then
End If
Next
Else
With Err
MsgBox "Error " & .Number & vbCr & vbCr & .Description, vbCritical +
vbOKOnly, _
"Die Outlook-sitzung kann nicht gestartet werden"
End With
End If
MsgBox "Die Excel-Termine wurden aus dem Outlook-Kalender wieder entfernt!"

Michael Schwimmer

unread,
Nov 3, 2004, 8:41:13 PM11/3/04
to
Hallo Michael

"Michael Zimmermann" schrieb:


> > For intz = 2 To ActiveSheet.UsedRange.Rows.Count
> ...
> > Next intz
>
> Unter Performance-Aspekten sehr schlechtes Konstrukt,
> da ActiveSheet.UsedRange.Rows.Count in jedem
> Schleifendurchlauf wieder bestimmt wird.

wie kommst du denn nur auf so etwas?
Probier es doch aus, es wird nur ein einziges mal berechnet!

Sub testForNext()
Dim lngMaxDurchläufe As Long
Dim i As Long

lngMaxDurchläufe = 100000
For i = 1 To lngMaxDurchläufe * 1
lngMaxDurchläufe = 10
Next
MsgBox i - 1
End Sub

Wenn deine Aussage stimmen würde, müsste 10 ausgegeben werden,
tatsächlich wird 100000 ausgegeben.

Auch wenn man den Zeitbedarf einer solchen Schleife mit einem Festwert
als >>Ende<< und einer Zeitaufwendigen Berechnung als >>Ende<<
vergleicht, ergibt sich das gleiche Bild: Es wird nur ein einziges mal
berechnet!

MfG
Michael

--
-------------------------------------------
Michael Schwimmer
Home : http://michael-schwimmer.de

Thomas Ramel

unread,
Nov 4, 2004, 12:43:33 AM11/4/04
to
Grüezi Bernd

Bernd Held schrieb am 03.11.2004

> wenn es interessiert, hier nun die Lösung:

[Excel --> Outlook-Steuerung gesnippt]

Danke, Bernd.
Gerade was die Zusammenarbeit von Excel mit anderern Office-Applikationen
angeht scheint es mir wichtige, die jeweiligen Lösungen zu dokumentieren
und hierhin zu stellen - im Google-Archiv sind sie dann jeweils wieder
auffindbar und dienen somit auch anderen Anwendern (und 'uns' Helfern) als
Grundlage und Basis für die Lösung ihrer Probleme.

Melanie Breden

unread,
Nov 4, 2004, 2:50:27 AM11/4/04
to
Hallo Michael,

Michael Zimmermann schrieb:


>> For intz = 2 To ActiveSheet.UsedRange.Rows.Count
> ...
>> Next intz
>
> Unter Performance-Aspekten sehr schlechtes Konstrukt,
> da ActiveSheet.UsedRange.Rows.Count in jedem
> Schleifendurchlauf wieder bestimmt wird.
>
> Viel besser:
>
> Dim i as Long, n as long
>
> n = ActiveSheet.UsedRange.Rows.Count
>
> For i = 1 To n
> ...
> Next i
>
> Grundregel: Werte oder Objekte, die mehrfach verwendet
> werden, Variablen zuweisen.

dieser Grundregel stimme ich absolut zu.

Aber du irrst dich, die For-Zeile wird *nicht* bei jedem Schleifendurchlauf
mit durchlaufen und neu berechnet, sondern nur *einmal* zu Beginn der Schleife.

Zu testen ganz einfach, indem man die Schleife mit F8 durchläuft, oder
folgende Sub probiert:

Public Sub Schleifenzähler()
Dim lngRow As Long

' Zellen A1:A5 sind belegt
For lngRow = 1 To ActiveSheet.UsedRange.Rows.Count
ActiveSheet.Cells(lngRow + 5, "A").Value = lngRow
Debug.Print ActiveSheet.UsedRange.Rows.Count
Next lngRow
End Sub

--
Mit freundlichen Grüssen

Melanie Breden
- Microsoft MVP für Excel -

http://excel.codebooks.de (Das Excel-VBA Codebook)
#Excel-Auftragsprogrammierung#

Michael Zimmermann

unread,
Nov 4, 2004, 8:31:45 AM11/4/04
to
Hallo!

> Michael Zimmermann schrieb:
> > > For intz = 2 To ActiveSheet.UsedRange.Rows.Count
> > ...
> > > Next intz
> >
> > Unter Performance-Aspekten sehr schlechtes Konstrukt,
> > da ActiveSheet.UsedRange.Rows.Count in jedem
> > Schleifendurchlauf wieder bestimmt wird.
> >
> > Viel besser:
> >
> > Dim i as Long, n as long
> >
> > n = ActiveSheet.UsedRange.Rows.Count
> >
> > For i = 1 To n
> > ...
> > Next i
> >
> > Grundregel: Werte oder Objekte, die mehrfach verwendet
> > werden, Variablen zuweisen.
>

Melanie Breden:


> dieser Grundregel stimme ich absolut zu.
>
> Aber du irrst dich, die For-Zeile wird *nicht* bei jedem
> Schleifendurchlauf mit durchlaufen und neu berechnet,
> sondern nur *einmal* zu Beginn der Schleife.

Michael Schwimmer:


| wie kommst du denn nur auf so etwas?

Ganz einfach: Meine ersten Basic-Kontakte liegen über 30
Jahre zurück. In dem Basic, das mich geprägt hat (noch vor
VB), wurde die For-Zeile bei jedem Schleifendurchlauf
mitgenommen, um - obwohl es eher verpönt war - in der
Schleife nicht nur den Zähler sondern auch Endwert und
Schrittweite manipulieren zu können.

In anderen Programmiersprachen, mit denen ich regelmäßig
arbeite wie Java oder C/C++, wird ebenfalls die For-Zeile
bei jedem Schleifendurchlauf ausgewertet. Ich wäre
daher nie auf die Idee gekopmmen, daß es in VB anders
sein könnte.

Es ist kein Verlust, daß es in VB nicht mehr so ist, wie
im Ur-Basic - ich war sowieso nie ein Freund davon -, aber
ich bin aus den genannten Gründen davon ausgegangen, und
dann wäre die Berechnung bei jedem Durchlauf ausgeführt
worden.

Im vorliegenden konkreten Einzelfall war meine Kritik
also unberechtigt.

Im allgemeinen bleibe ich aber dabei:

1.)
Oft wird in For-Schleifen der Endwert in der Schleife
selbst ebenfalls benutzt - z. B. Fortschrittsanzeigen
o. ä. Auch in solchen Fälleb habe ich oft gesehen, daß
der berechnende Ausdruck statt einer Variablen benutzt
wird, was dann die von mir geschilderte Problematik
hervorruft.

2.)
In Do-Loop oder While-Wend wird die Startzeile mit
durchgeschleift. Auch hier gilt das von mir Gesagte.

3.)
In anderen Programmiersprachen wird ebenfalls die
For-Zeile immer wieder gelesen. Auch hier also
Variablen benutzen.

Gruß aus Mainz
Michael

Jürgen Dietze

unread,
Nov 4, 2004, 10:24:06 AM11/4/04
to
Hallo zusammen,
mit Interesse habe ich die Beiträge zu diesem Thema gelesen.
Mein Problem geht noch einen Schritt weiter:

In einer Exceltabelle verwalte ich Seminartermine, die ich den Teilnehmern
gerne per VBA als Outlooktermin zusenden möchte.

Das ist auch an und für sich kein Problem, nur tauche ich dann als
Besprechungsplanung auf.

Tatsächlich möchte ich mit dem versendeten Termin aber später nichts mehr zu
tun haben, es soll aussehen, als hätte der Teilnehmer den Termin selbst
erstellt.

Tja, geht das? Und wenn ja, wie?

Bin gespannt auf eure Antworten
Gruß

Jürgen

Michael Schwimmer

unread,
Nov 4, 2004, 1:51:58 PM11/4/04
to
Hallo Michael

>> wie kommst du denn nur auf so etwas?
> Ganz einfach: Meine ersten Basic-Kontakte liegen über 30
> Jahre zurück. In dem Basic, das mich geprägt hat (noch vor
> VB), wurde die For-Zeile bei jedem Schleifendurchlauf
> mitgenommen, um - obwohl es eher verpönt war - in der
> Schleife nicht nur den Zähler sondern auch Endwert und
> Schrittweite manipulieren zu können.

ich habe nur deshalb so verwundert gefragt, weil ich es
überhaupt nicht anders kenne. Seit VB4 jedenfalls wird nur
einmal berechnet.
Wie das zu Zeiten von GW-Basic oder in den 80ern mit dem
Basic-Dialekt des C64 war, weiß ich nicht mehr, oder
hatte mir damals noch keine Gedanken darüber gemacht. Da
stand das Abtippen und zum Laufen bringen von Listings im
Vordergrund ;-)

> In anderen Programmiersprachen, mit denen ich regelmäßig
> arbeite wie Java oder C/C++, wird ebenfalls die For-Zeile
> bei jedem Schleifendurchlauf ausgewertet. Ich wäre
> daher nie auf die Idee gekopmmen, daß es in VB anders
> sein könnte.
> Es ist kein Verlust, daß es in VB nicht mehr so ist, wie
> im Ur-Basic - ich war sowieso nie ein Freund davon -, aber
> ich bin aus den genannten Gründen davon ausgegangen, und
> dann wäre die Berechnung bei jedem Durchlauf ausgeführt
> worden.

> Im vorliegenden konkreten Einzelfall war meine Kritik
> also unberechtigt.

> Im allgemeinen bleibe ich aber dabei:

> 1.)
> Oft wird in For-Schleifen der Endwert in der Schleife
> selbst ebenfalls benutzt - z. B. Fortschrittsanzeigen
> o. ä. Auch in solchen Fälleb habe ich oft gesehen, daß
> der berechnende Ausdruck statt einer Variablen benutzt
> wird, was dann die von mir geschilderte Problematik
> hervorruft.

Die Anmerkung von mir bezog sich ja auch nur auf die
For Next Schleife. Ansonsten stimme ich dir voll zu!

> 2.)
> In Do-Loop oder While-Wend wird die Startzeile mit
> durchgeschleift. Auch hier gilt das von mir Gesagte.

ACK

> 3.)
> In anderen Programmiersprachen wird ebenfalls die
> For-Zeile immer wieder gelesen. Auch hier also
> Variablen benutzen.

ACK

Im übrigen pflichte ich dir auch bei deinen Anmerkungen
zum Datentyp Integer bei.
Integer wird auch bei mir nur noch benutzt, wenn es nicht
anders geht, wie zum Beispiel bei manchen API-Funktionen.

Es gibt so viel, mit dem man seinen Code verbessern
kann, leider wird man auf Fehler und Optimierungsmöglichkeiten
nicht sehr häufig hingewiesen. Deshalb kann ich Codekritik nur
ausdrücklich befürworten.

MfG
Michael

Stefan Onken

unread,
Nov 4, 2004, 2:57:27 PM11/4/04
to
hallo Jürgen,
das geht mE (gottseidank) nicht.
Du kannst per VBA eine Besprechungsanfrage senden, aber die muß der
Empfänger öffnen, damit der Termin eingetragen wird.
Anregungen dazu: http://tinyurl.com/54h5r

Gruß
stefan

"Jürgen Dietze" <Jrgen...@discussions.microsoft.com> schrieb im
Newsbeitrag news:4A9D2970-4ED8-41C8...@microsoft.com...

Jürgen Dietze

unread,
Nov 5, 2004, 2:30:01 AM11/5/04
to
Hallo Stefan,
das soll der Empfänger auch gerne tun, ich meine öffnen und eintragen. Das
Interesse in anderer Leuts Kalender zu arbeiten habe ich gar nicht.
Unter folgender Internetadresse habe ich das ganze gesehen:
www.ihk-dortmund.de, dort unter Bildung - Weiterbildung, ein Seminar auswählen

Klicke ich dort auf Termin eintragen, geht ein Outlook-Terminfenster auf,
das ich dann speichern kann (das wird dort aber wohl nicht mit VBA gemacht.)

Tja, und so etwas hätte ich halt gern in VBA...

Gruß
Jürgen

stefan onken

unread,
Nov 5, 2004, 6:05:01 AM11/5/04
to
hallo Jürgen,
auf der Seite werden vcs-Dateien eingesetzt, die Outlook entsprechend
interpretiert. Speichere eine solche Datei testweise auf deinem Rechner und
öffne sie mit einem Editor.
Ich habe keine Erfahrung mit dem Dateityp, aber es sollte doch gehen, aus
Excel per VBA eine solche vcs-Datei zu erstellen (zB zunächst als txt-Datei
und dann umbenennen) und als attachment einer mail zu verschicken.

Einfacher ist da mE, Teilnehmer/n eine Besprechungsanfrage zu schicken:
noch eine Codebeispiel: http://www.outlookcode.com/codedetail.aspx?id=88
(es steht da zwar VBScript, es geht aber auch mit VBA (habs getestet)).
Vorraussetzung ist allerdings, dass die Besprechungsanfrage auch mit Outlook
geöffnet wird, um in den Kalender eingetragen zu werden.

Gruß
stefan


"Jürgen Dietze" schrieb:

Jürgen Dietze

unread,
Nov 5, 2004, 6:44:01 AM11/5/04
to
Hallo Stefan,
ich hab das mal mit vcs probiert. Das sieht dann so aus:

BEGIN:VCALENDAR
PRODID:-//Microsoft Corporation//Outlook 9.0 MIMEDIR//EN
VERSION:1.0
BEGIN:VEVENT
DTSTART:20041206T140000Z
DTEND:20041206T163000Z
LOCATION;ENCODING=QUOTED-PRINTABLE:EDV Schulungsraum
UID:040000008200E00074C5B7101A82E008000000007056F8B033C3C4010000000000000000100
000001F6699EA2015134EBD1DB717E69696C2
CATEGORIES;ENCODING=QUOTED-PRINTABLE:Schulungen
SUMMARY;ENCODING=QUOTED-PRINTABLE:Excel (G) 2.3
PRIORITY:3
END:VEVENT
END:VCALENDAR

So etwas als Textdatei zu erzeugen ist kein Thema. Ich habe mal auf die
Einträge UID , ProdID und Version verzichtet, funktioniert trotzdem.

Allerdings findet der Termin in Wirklichkeit von 15 - 17:30 statt, also eine
Stunde später. Ich denke, das hängt mit Sommer-/Winterzeit zusammen.

Solltest Du noch Informationen über vcs-Dateien haben oder bekommen, lass es
mich bitte wissen.

Unter dem Strich ist das wohl die Lösung.

Schönes Wochenende
Jürgen

Michael Zimmermann

unread,
Nov 5, 2004, 7:34:18 AM11/5/04
to
Hallo!

Michael Schwimmer:


> Es gibt so viel, mit dem man seinen Code verbessern
> kann, leider wird man auf Fehler und
> Optimierungsmöglichkeiten nicht sehr häufig hingewiesen.
> Deshalb kann ich Codekritik nur ausdrücklich befürworten.

Schön, jemanden zu treffen, der das auch so sieht.
Selbstverständlich ist diese Einstellung nicht.

Gruß aus Mainz
Michael

0 new messages