EXCEL - Sharepoint - Desync durch Makro

C

Cheetah1337

Gast
Servus,

Ich hätte ein für die Arbeit an sich sehr praktisches Makro geschrieben, lediglich spießt es sich hierbei an dem Umstand, dass das File auf dem Sharepoint liegt und es mehrere Kollegen+In (ich hasse allgemeines Gendern, aber in diesem Fall gibt es tatsächlich EINE "In" ^^) gleichzeitig offen haben.
Sonstige Makros, welche lediglich ein bestimmtes Objekt einfügen oder ähnliches führen zu keinen Problemen, jedoch scheinen multiple schnelle Operationen mit Datenänderungen (auch in einem zur Zeit der Ausführung definitiv nicht anderweitig in Verwendung befindlichen Tabellenblatt) die anderen Teilnehmer+In zu desynchronisieren. Sie bekommen dann oben ein Insert im Excel, dass sie das File "Erneut laden" sollen ... den genauen Wortlaut habe ich jetzt nicht parat, aber der Button lautet eben "Erneut laden".

Ich habe bereits versucht dies zu umgehen, indem ich das autosync-feature für die Dauer der Ausführung deaktiviere, jedoch fruchtete dies nicht.

Code:
Sub COLOR_SEARCH()

'Makro für Zusammenfassung von Projekten anhand eines Suchbegriffs (zum Zwecke der Übersichtlichkeit)

Dim Suchbegriff As String
Dim i As String

Dim x As Integer
Dim Zeile As Integer
Dim Spalte As Integer
Dim Lastrow As Integer

x = 1

'Abfragen von Suchbegriff für Projekzusammenfassung (je genauer, desto besser)

Suchbegriff = InputBox("Suchbegriff?", "Eingabeaufforderung", "")

'Fängt "Abbruch" und leere Eingabe ab

If StrPtr(Suchbegriff) = 0 Or Suchbegriff = NullString Then

Exit Sub

End If

'Bildaufbau stoppen (für schnellere und optisch sauberere Makroausführung)

'    ActiveWorkbook.AutoSaveOn = False
    Application.ScreenUpdating = False

    Worksheets("PROJEKTÜBERSICHT").Activate
    
    ActiveSheet.Unprotect
    
'    Eingegebenen Suchbegriff optisch repräsentieren

    Cells(1, 1).Value = "Suchbegriff: " & Suchbegriff
    
' Index der letzten Reihe für die leere Tabelle definieren

    Lastrow = 2
    
' Etwaige Daten von alten Suchanfragen löschen

    Range("A2:M1500").Select
    Selection.Delete Shift:=xlToLeft
            
    Worksheets("KALENDER 2021").Activate

'    Cursor auf erste Zelle des definierten Suchbereiches setzen für eine Chronologische Abfolge der Ergebnisse
    
    Range("CC1").Activate

' Starten der Suche in der definierten Matrix "PARTIEN"

    Range("PARTIEN").Find(What:=Suchbegriff, After:=ActiveCell, LookIn:=xlFormulas2, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False).Activate

' Zelladresse von erstem Suchergebnis abspeichern um eine Abbruchbedingung zu haben
    
    i = ActiveCell.Address

' Starten von Basisroutine (Begrenzt auf 500 Durchläufe, da bei bestimmten Eingaben die Runtime zu stark anwachsen würde und man nicht all diese Eingaben abfangen kann)
    
    While x < 500:

'    "Nullpunkt" definieren

    Zeile = ActiveCell.Row
    Spalte = ActiveCell.Column
    
    Worksheets("PROJEKTÜBERSICHT").Activate
    
    With Worksheets("KALENDER 2021")

'    Durch Nullpunkt-Referenz bestimmte Ranges in die Ausgabetabelle kopieren

    .Range(.Cells(Zeile, 3), .Cells(Zeile + 1, 3)).COPY Destination:=Worksheets("PROJEKTÜBERSICHT").Range("A" & Lastrow)
    .Range(.Cells(1, Spalte), .Cells(1, Spalte + 5)).COPY Destination:=Worksheets("PROJEKTÜBERSICHT").Range("B" & Lastrow)
    .Range(.Cells(Zeile, Spalte), .Cells(Zeile + 1, Spalte + 5)).COPY Destination:=Worksheets("PROJEKTÜBERSICHT").Range("H" & Lastrow)
    
    End With

'    Zeilenumbruch für Ausgabetabelle

    Lastrow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row + 2
    
    x = x + 1
    
    Worksheets("KALENDER 2021").Activate
    
    Range("PARTIEN").FindNext(After:=ActiveCell).Activate
    
    If ActiveCell.Address = i Then
    
        Worksheets("PROJEKTÜBERSICHT").Activate

'    Bedingte Formatierung setzen um doppelte Werte anzuzeigen (Intern interessant)

        Range("A2:A1500").Select
    Selection.FormatConditions.AddUniqueValues
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    Selection.FormatConditions(1).DupeUnique = xlDuplicate
    With Selection.FormatConditions(1).Font
        .Color = -16383844
        .TintAndShade = 0
    End With
    With Selection.FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .Color = 13551615
        .TintAndShade = 0
    End With
    Selection.FormatConditions(1).StopIfTrue = False
    
'    ActiveWorkbook.AutoSaveOn = True
    Application.ScreenUpdating = True
    
    Range("A2").Activate
    
    ActiveSheet.Protect
    
    Exit Sub
    End If
    
    Wend
    
End Sub

Hat hiermit jemand Erfahrungen?
Kann man das Entgleisen der Kollegen unterbinden?
Leider gibt es hier offenbar für EXCEL-VBA kein Syntax-Highlighting. Aber jo die Zeilen mit den ' sind Kommentare oder auskommentiert. ^^

LG Cheetah
 
@Cheetah1337
Bist du dir da sicher? Dort steht:
  • Autosave muss für Zusammenarbeit immer an sein
  • Was kann ich tun, wenn die Meldungen "Aktualisierung empfohlen" und "Fehler beim Upload" angezeigt werden? Dies kann gelegentlich passieren, wenn jemand ein Excel-Feature verwendet, das bei der gemeinsamen Dokumenterstellung in Excel noch nicht vollständig unterstützt wird. Dadurch kann der Vorgang der gemeinsamen Dokumenterstellung vorübergehend beendet werden.
 
Zuletzt bearbeitet von einem Moderator:
Autosave is immer an.
Und naja Excel-feature, das nicht unterstützt wird? Ich kopiere quasi nur Inhalte, davon halt einige in schneller Abfolge.
Deshalb wollte ich Auto-Save deaktivieren um zu sehen, ob man es so vielleicht umgehen kann.
Ich denke der Auto-Save-Zyklus kommt einfach nicht mit der Anzahl an Inputs zurecht.
Daher meine Frage ob man dies umgehen kann. ^^
Aber ja die allgemeine Doku hierzu (ich meine Makros sind jetzt keine NEUE Erfindung) ist halt leider sehr dürftig. Quasi was geht und was nicht zB. Dann könnte man das Makro evt. aufteilen ... oder ... ich speichere nach jedem Durchlauf manuell bei aktivem auto save ... hmmm ...
 
@deineMudda
Okay ... da steht jetzt durchaus mehr, aber der Großteil ist recht offensichtlich und leider trifft keiner auf mich zu, da ich ja wie gesagt Makros verwende mit dem File und sonst keine Probleme bestehen. Es ist faktisch nur dieses längere Makro.
Aber danke dir trotzdem, dass du dir Zeit genommen hast. :)

LG Cheetah
 
Also Dein Program scheint mir recht 'schwerfällig', da sind ne ganze Menge Activate und Selection und so Zeug drin.

Hast du denn schonmal probiert was passiert, wenn du nur die Kopierroutine deaktivierst? Hast du dann immer noch ein desync? Wenn ja, deaktivierst du weiter bis du den Übeltäter gefunden hast :)
Wenn nein, könnte man versuchen alle Suchergebnisse in einem Array zwischenzuspeichern und am Ende mit einem Mal reinzuschreiben.

Aber so wie ich das sehe, gibts noch Optimierungspotential am Code ;)
 
@Janush Ah gar nicht deine Antwort gesehen ... hmm ... aber kann ich Zelleninhalte einfach in einem Array speichern in Excel? Stelle ich mir halt in der Script-Sprache schwierig vor. Zugegeben, habe diese Sprache nicht von der Pike auf gelernt, sondern immer nur Lösungen für meine Probleme gesucht. ^^''
Jedenfalls danke schon einmal für den Input. :)
 
Zurück
Oben