Paste-Makro (löst auf manchen Rechnern 1004 aus, auf manchen nicht)
#1
Hallo zusammen.

nachdem ich nun einen ganzen Tag im Netz recherchiert habe gebe ich auf und poste tatsächlich selbst.
Da ich mir nicht sicher bin ob ich nicht vielleicht von einem Fehler profitiere, beschreibe ich mein Problem erstmal mit einem Minimum an Code und Beispielmappen.

--< Funktion >--
Ich nutze Excel um ein Reporting zu erstellen. Dafür habe ich andere Tools, die mir Daten aggregieren und fertige Tabellen mit fester Anordnung zur Verfügung stellen (diese enthalten ganz klassisch Namen, berechnete Werte und Freitexte). Der Vorgang ist im Prinzip:
  • Ich öffne meine Datentabelle, kopiere den Inhalt ohne Titelzeile (Strg+A, Strg+C)
  • Gehe in die Excel-Mappe (Tabelle "Start") die das Makro/Makros enthält und klicke die Schaltfläche des Makros
  • Das Makro (in der Kernfunktion) kopiert die Zwischenablage in ein bestimmtes Tabellenblatt (z.B. "Newsletter"). Dort ist eine Dummyzeile hinterlegt, die wird nach dem Einfügen noch gelöscht.
Code:
ActiveWorkbook.Unprotect Password:="Passwort"
'
    Sheets("START").Select
    Sheets("Newsletter").Visible = True
    Sheets("Newsletter").Select
    ActiveSheet.Unprotect Password:="Passwort"
    Range("A13").Select
    ActiveSheet.Paste
    Rows("12:12").Select
    Selection.Delete Shift:=xlUp

--< Problem >--
So, nun zu dem Problem - das Tool wird von einigen Kollegen genutzt. Bei 70% der Kollegen funktioniert es, die anderen 30% bekommen den Laufzeitfehler 1004 - Die Paste-Methode des Worksheet-Objektes konnte nicht ausgeführt werden
An den Berechtigungen kann es kaum liegen - wenn ein betroffener Kollege das Tool mit seinem User auf meinem Rechner durchführt geht es einwandfrei.
Beim Debuggen bleibt der Code wie zu erwarten bei
Zitat:    ActiveSheet.Paste

stehen.

--< Lösungsansätze(?) >--
  • Nach meiner Recherche habe ich bereits rausfinden können, dass der Unprotect-Befehl angeblich den Zwischenspeicher löscht (zumindest sagen das Beiträge, die ca. 2 Jahre alt sind). Dagegen spricht aber, dass es wie gesagt bei ganz vielen Kollegen funktioniert. Auch habe ich das Makro auf meinem Rechner mit leerem Zwischenspeicher genutzt und habe keinen Fehler erhalten (Im Prinzip wurde nichts kopiert und nur die Dummy-Zeile gelöscht)
  • Unterschiedliche Excel-Versionen? Habe ich bereits getestet und die Versionen bei mir und den Kollegen angeglichen - Fehler bleibt.
  • Excel-Architektur: Die Rechner haben (fast) alle die 32-bit Version installiert. Könnte die 64-bit Version hier vielleicht Abhilfe schaffen?
  • Makros sollten auch bei allen Kollegen aktiviert sein (gibt es einen perfekten Weg das zu prüfen?)
Daher meine Frage, gibt es hier etwas offensichtliches was ich übersehe warum das bei den meisten geht aber eben nicht bei allen?
Ich bin leider kein VBA Profi und arbeite mich noch rein (der Code entsprang leider auch nicht meiner Feder)

Ganz lieben Dank im Voraus für euer Feedback und Engagement
Clemens
Antworten Top
#2
Sheets("Newsletter").Select
ActiveSheet.Unprotect Password:="Passwort"
Range("A13").Select
ActiveSheet.Paste


Für mich klingt das, als würdest Du auf die gleiche Zelle "pasten".
WIN/MSO schicken angeblich alle 5 Sekunden Deinen Screen heim zu Papa (recall-Klausel). 
Antworten Top
#3
Hallo,

ist denn deine "Datentabelle" die du öffnest immer die selbe? Ist die immer im gleichen Verzeichnis?

Wenn ja, warum öffnest du die Datentabelle dann nicht auch gleich per Makro und kopierst deine Daten?

Anmerkungen zu deinem Code:

du selektierst Blatt START - wozu? Auf dem Blatt werden keine Aktionen ausgeführt

Außerdem solltest du auf die ganze Selektiererei verzichten.

Code:
ThisWorkbook.Unprotect Password:="Passwort"
With Worksheets("Newsletter")
    .Visible = True
    .Unprotect Password:="Passwort"
    .Range("A13").PasteSpecial Paste:=xlPasteValuesAndNumberFormats
    Rows(12).Delete
End With

Bei deinem ActiveWorkbook.Unprotect gehe ich mal davon aus, dass das das Workbook ist, in dem sich auch dein Makro befindet. Desshalb ThisWorkbook.

Und der Code gehört in ein allgemeines Codemodul und nicht in das Codemodul eines Worksheets.

Gruß Werner
Antworten Top
#4
Danke schonmal für eure Antworten - ich merke schon jetzt, dass ich eigentlich erstmal eine Schulung in dem Thema brauche.

Ich pack mal den ganzen Code dieser Schaltfläche rein:

Code:
Sub Newsletter_einfügen()
'
' Newsletter_einfügen Makro
'
   ActiveWorkbook.Unprotect Password:="Passwort"
'
    Sheets("START").Select
    Sheets("Newsletter").Visible = True
    Sheets("Newsletter").Select
    ActiveSheet.Unprotect Password:="Passwort"
    Range("A13").Select
    ActiveSheet.Paste
    Rows("12:12").Select
    Selection.Delete Shift:=xlUp
    Range("Newsletterübersicht[[#Headers],[Platz.-ID]]").Select
    ActiveWorkbook.Worksheets("Newsletter").ListObjects("Newsletterübersicht").Sort _
        .SortFields.Clear
    ActiveWorkbook.Worksheets("Newsletter").ListObjects("Newsletterübersicht").Sort _
        .SortFields.Add2 Key:=Range("Newsletterübersicht[Von]"), SortOn:= _
        xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Newsletter").ListObjects("Newsletterübersicht").Sort _
        .SortFields.Add2 Key:=Range("Newsletterübersicht[Platz.-ID]"), SortOn:= _
        xlSortOnValues, Order:=xlAscending, DataOption:=xlSortTextAsNumbers
    ActiveWorkbook.Worksheets("Newsletter").ListObjects("Newsletterübersicht").Sort _
        .SortFields.Add2 Key:=Range("Newsletterübersicht[Sub-ID]"), SortOn:= _
        xlSortOnValues, Order:=xlAscending, DataOption:=xlSortTextAsNumbers
    With ActiveWorkbook.Worksheets("Newsletter").ListObjects("Newsletterübersicht") _
        .Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Sheets("Newsletter").Select
   
    Dim R As Long
   
    Application.ScreenUpdating = False
    For R = 1 To 10000
        If InStr(Cells(R, 2).Value, "1") Or InStr(Cells(R, 2).Value, "2") Or InStr(Cells(R, 2).Value, "3") Or InStr(Cells(R, 2).Value, "4") Or InStr(Cells(R, 2).Value, "5") Or InStr(Cells(R, 2).Value, "6") Or InStr(Cells(R, 2).Value, "7") Or InStr(Cells(R, 2).Value, "8") Or InStr(Cells(R, 2).Value, "9") Or InStr(Cells(R, 2).Value, "10") Or InStr(Cells(R, 2).Value, "11") Or InStr(Cells(R, 2).Value, "12") Or InStr(Cells(R, 2).Value, "13") Or InStr(Cells(R, 2).Value, "14") Or InStr(Cells(R, 2).Value, "15") Or InStr(Cells(R, 2).Value, "16") Or InStr(Cells(R, 2).Value, "17") Or InStr(Cells(R, 2).Value, "18") Or InStr(Cells(R, 2).Value, "19") Or InStr(Cells(R, 2).Value, "20") Then
            'prüfe ob in Spalte B (Sub-ID) eine Zahl von 01 bis 20 drin ist
            Range(Cells(R, 1), Cells(R, 34)).Interior.ColorIndex = 2
            Range(Cells(R, 1), Cells(R, 34)).Font.ColorIndex = 16
        End If
    Next
    Application.ScreenUpdating = True
   
    ActiveWindow.SelectedSheets.Visible = False
    Sheets("Header").Visible = True
    Sheets("Header").Select
    ActiveSheet.Unprotect Password:="Passwort"
    Range("M30").Select
    ActiveCell.FormulaR1C1 = "1"
    Range("N30").Select
    Sheets("Header").Select
    ActiveWindow.SelectedSheets.Visible = False
    Sheets("START").Select
    ActiveSheet.Unprotect Password:="Passwort"
    ActiveSheet.Shapes.Range(Array("Button_kein_NL")).Select
    Selection.Delete
    ActiveSheet.Shapes.Range(Array("Button_NL_einfügen")).Select
    Selection.Delete
   Range("B18").Select
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 5287936
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
    With Selection.Font
        .ThemeColor = xlThemeColorDark1
        .TintAndShade = 0
    End With
    ActiveSheet.Protect Password:="Passwort", UserInterfaceOnly:=True, DrawingObjects:=True, Contents:=True, Scenarios:=True
    ActiveWorkbook.Protect "Passwort", Structure:=True, Windows:=False
  
End Sub


@Werner: Die Datentabellen deren Inhalte ich kopiere liegen leider nicht "ab". Ein PowerBI-Report hält immer die aktuellsten Daten vor und ich exportiere dort eine Tabelle und kopiere aus der dort runtergeladenen Datei einfach nur die Werte in die Zwischenablage und drücke den "Newsletter einfügen" Knopf.

Die Arbeitsmappe hat diverse Tabellenblätter:
  • START (Dort werden Ansprechpartner per Dropdown gewählt und alle Schaltflächen für das Einfügen sind dort)
  • Diverse Blätter mit Daten, eins davon "Newsletter" um das es hier beispielhaft geht
Im letzten Schritt kann ich die Arbeitsmappe schon hochladen, das Verfremden aller Daten dauert nur etwas, daher wollte ich erstmal so die Frage stellen.

Ich verstehe halt nicht, dass es bei den meisten Kollegen ohne Probleme funktioniert und bei einer handvoll diese Fehlermeldung erscheint.
Antworten Top
#5
Hallöchen,

eventuell solltest Du die Kollegen nicht zu Dir holen sondern mal hingehen und dort schauen, was da läuft oder auch nicht ...
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste