Excel VBA und Sharepoint
20.12.2021 09:59:34
Chrissi
ich habe ein Excel-Tool erstellt, das lokal Daten erhebt. Danach die Daten in dem Tool abspeichert, die Daten als Kopie in einer Sharepoint-Datei speichert, die Daten als PDF auf Sharepoint (oder in manchen Fällen lokal) speichert und als Email-Anhang einer neuen EMail anhängt (oder gleich abschickt).
In diesen Dateien arbeite ich mit diversen Makros. Dabei gibt es einige Befehle, die mir echte Schwierigkeiten bereiten.
Man glaub es kaum, aber es sind nicht die komplizierten Makros, die die Probleme verursachen, sondern die leichten, also Copy & paste oder einfache Formeln, die mir im Excel selbst kein Problem machen! Das Ganze wird vermutlich ein mehrteiliger Thread oder mehrere Threads geben.
Ich habe das Gefühl, daß ziemlich viele der Fehler auf Laufzeitprobleme basieren. Daher hoffe ich hier, es kann mir jemand helfen:
Beim Start des Dokumentes prüfe ich, ob lokal in der Datei das selbe Maximum vorkommt, wie online in der Absicherung. Dazu gehe ich wie folgt vor.
Sub Maximum ()
Workbooks.Open Filename:= _
"https://PFAD" 'SharepointSicherung öffnen
DoEvents 'Abwarten bis Datei geöffnet ist
Windows("Tool.xlsm").Activate 'zurück ins Tool springen
DoEvents 'Abwarten bis wieder im Tool zurück
Sheets("Maschinenraum").Range("C4").Formula = "=IF(ISERROR(VLOOKUP(R[-2]C[-1],'[DATEI.xlsx]Verwaltung'!R2C2,1,0)),""Differenz online"",""ok"")"
'Formel für Prüfung einfügen 'In Verwaltung'!R2C2 habe ich die Formel "MAX" verwendet. Dort wird das Maximum der dortigen Absicherung angezeigt
DoEvents 'Abwarten bis Formel eingetragen und berechnet ist
Sheets("Maschinenraum").Calculate 'weil das DoEvents manchmal nicht funktioniert hat, habe ich nochmals die Calculate Funktion verwendet.
DoEvents
If Sheets("Maschinenraum").Range("C4").Value = "Differenz online" Then
Sheets("Einstieg").Range("B22").Value = "Fehlermeldung"
Call Differenz_Email 'Email verschicken
Else
Sheets("Maschinenraum").Range("C4").ClearContents 'Formeln wieder entfernen, damit beim Start des Tools keine "Aktualisieren Frage" kommt
Sheets("Einstieg").Range("B22").ClearContents 'Zelle leeren
End If
End Sub
Meine Fragen:Sorgt "DoEvents" tatsächlich dafür, daß eine Aktion abgeschlossen wird, oder nicht?
Welche Alternative hätte ich statt per Formel das Maximum der Absicherung mit dem Maximum der lokalen Datei zu vergleichen?
Ich öffne ja am Anfang die Absicherung. Danach springe ich wieder in die Arbeitsdatei (das Tool). Gibt es Alternativen zu diesem Vorgehen?
Ich hoffe mein Vorgehen ist etwas verständlich.
Vielen Dank im Voraus für Eure Unterstützung!
VG
Chrissi