Thema Datum  Von Nutzer Rating
Antwort
05.02.2015 13:58:53 Gast11223
NotSolved
05.02.2015 15:10:05 Gast80362
NotSolved
05.02.2015 15:11:24 Gast70661
NotSolved
05.02.2015 15:44:43 Gast78422
NotSolved
05.02.2015 17:35:30 Gast24131
NotSolved
05.02.2015 15:42:40 Gast22305
NotSolved
05.02.2015 15:27:30 Gast23948
NotSolved
05.02.2015 15:51:46 Gast24611
NotSolved
05.02.2015 15:55:55 Gast45581
NotSolved
05.02.2015 16:02:29 Gast27713
NotSolved
05.02.2015 16:05:29 Gast17501
NotSolved
05.02.2015 17:38:42 Gast45562
NotSolved
05.02.2015 18:58:09 Gast14102
NotSolved
05.02.2015 22:51:22 Gast35311
NotSolved
06.02.2015 09:28:24 Gast79925
NotSolved
Blau Wo ist der Fehler
06.02.2015 09:33:00 Gast818
NotSolved
07.02.2015 18:32:21 Gast16757
NotSolved

Ansicht des Beitrags:
Von:
Gast818
Datum:
06.02.2015 09:33:00
Views:
1061
Rating: Antwort:
  Ja
Thema:
Wo ist der Fehler

Guten Morgen Allerseits,

ich bin gerade etwas am Verzweifeln, da ich das Problem einfach nicht erkenne.
Ich habe, da ich aus restriktiven Gründen in meiner Mappe alle Menüleisten ausblenden muss, mir eine Funktion entwickelt, welche ein "Rückgängig" bzw. "Wiederholen" simuliert.
Ich weiß, dass dies etwas getrickst ist und sicherlich nicht ganz so schön und komfortabel ist wie die originale Funktion dazu von Excel, aber die steht nun einmal nicht zur Verfügung und mit meiner lassen sich auch durch VBA erzeugte Aktionen Rückgängig machen.
Ich habe den Code dazu einmal aus meinem Projekt heraus geschrieben und so zusammen gefasst, dass er in ein leere Mappe eingefügt werden kann. (Wichtig dabei ist allerdings, dass
das erste Tabellen Blatt auf "Ablauf Übersicht" (der Name hat aber nichts mit dem Programablauf zu tun, könnte auch theoreth. Osterhase heißen, also nicht verwirren lassen) umbenannt wird , sonst klappt es nicht.
Die Funktionen im einzelnen laufen auch super. Mein Problem ist eigentlich viel simpler. "Wiederholen" soll nicht ausgeführt werden können, bevor nicht mindestens einmal "Rückgängig" ausgeführt wurde, denn dies würde ja auch keinen Sinn machen und dazu noch Fehler verursachen. Also muss beim Durchlauf von "Rückgängig" "R" auf 1 gesetzt werden.
Leider erkennt dies die "Wiederholen"-Anweisung nicht und ich verstehe nicht wieso.
Wenn ich die kleineren Testläufe am Ende des Codes durchführe klappt es. Auch wenn ich hiermit "R" auf 1 setze funktioniert "Wiederholen".

Ich vermut das es an dieser Zeile in Sub Rückgängig () liegt, welche eigentlich aus VB stammt und nicht aus VBA,
da "R" übergeben wird, wenn ich sie ausschalte:

ThisWorkbook.VBProject.VBComponents("Tabelle2").Properties(5).Value = "Tabelle1"

Allerdings verstehe ich nicht wieso, da "R=1" erst im Anschluss folgt und die MsgBox ja auch reagiert.
Und zudem erzeugt die analoge Zeile in "Wiederholen" nicht diesen Fehler, da hier am Ende "R=0" ist.


Mein Code ist:

Option Explicit

Private Sub Workbook_open()

'eine Kopie des Startzustandes wird erzeugt
   Application.DisplayAlerts = False
   Worksheets("Ablauf Übersicht").Copy After:=Sheets(1)
   Application.DisplayAlerts = True

'Setze R=0
   R = 0
End Sub
Option Explicit
Public R As Integer
Public Function WorkSheetExists(ByVal strName As String) As Boolean
   On Error Resume Next
   WorkSheetExists = Not Worksheets(strName) Is Nothing
End Function


Private Sub Rückgängig()
   

 Dim sBlattname As String
    Application.DisplayAlerts = False
   
    'Durchgangszähler für Rückgängig() um 1 erhöhen (Starten bei 0 aus Workbook_open())

   
    'Prüfung, ob Rückgängig() bereits einmal ausgeführt wurde und somit Kopie des Arbeitsstandes (Sheet(3)) bereits existiert,
    'wenn ja löschen
        sBlattname = "Ablauf Übersicht (3)"
    If WorkSheetExists(sBlattname) Then
   
        Worksheets("Ablauf Übersicht (3)").Delete
    End If
   
    'Kopie des Arbeitsstandes erstellen für "Wiederholen"
    Sheets("Ablauf Übersicht").Copy After:=Sheets(2)

   
    'Kopie des Arbeitsstandes unsichtbar machen
    'Sheets("Ablauf Übersicht (3)").Visible = False
   
    'Kopie mit Startzustand sichtbar machen
    Sheets("Ablauf Übersicht (2)").Visible = True
   
    'Original Löschen
    Sheets("Ablauf Übersicht").Delete
   
    'Kopie, welche bei Workbook_open() erstellt wurde und Startzustand enthält, um benennen zu original Name
    Sheets("Ablauf Übersicht (2)").Name = "Ablauf Übersicht"
   
    'VB Komponente (Codename) der Kopie mit Stratzustand auf original Name umbenennen
    ThisWorkbook.VBProject.VBComponents("Tabelle2").Properties(5).Value = "Tabelle1"
   
    'Neue Kopie (Kopie der Kopie) erstellen
    Sheets("Ablauf Übersicht").Copy After:=Sheets(1)
    Application.DisplayAlerts = True
   
   'setze R
    R = 1
    If R = 1 Then MsgBox ("so weit ok!") 'nur zum Test
End Sub


 Sub Wiederholen()

    'Prüfen von R
   
  If R = 0 Then
    MsgBox ("Geht nicht! Weil nichts da ist!")
    Exit Sub
  Else
    Application.DisplayAlerts = False
   
    'Kopie des Arbeitsstandes sichtbar machen
    'Sheets("Ablauf Übersicht (3)").Visible = True
   
    'NEUES Original aus "Rückgängig()", welches Startzustand enthält, wieder löschen
    Sheets("Ablauf Übersicht").Delete
   
    'Kopie mit Arbeitsstand, welche bei "Rückgängig" erstellt wurde, umbenennen zu original Namen
    Sheets("Ablauf Übersicht (3)").Name = "Ablauf Übersicht"
   
    'VB Komponente (Codename) der Kopie mit Arbeitsstand auf original Name umbenennen
    ThisWorkbook.VBProject.VBComponents("Tabelle3").Properties(5).Value = "Tabelle1"
     
    Application.DisplayAlerts = True
   
    R = 0
 
  End If
 
End Sub



'Nachfolgende Anweisungen nur zum Testen ob Variablen übergeben werden:

Sub Test_Variablensetzen()

 R = 1
End Sub


Sub Test_Variabeln_Prüfung()

 If R = 0 Then
    Range("B10").Value = "nein, geht nicht"
 Else
    Range("B10").Value = "es geht"
    R = 0
 End If
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'überflüssige Arbeitsblätter werden vor dem Schließen gelöscht
 Dim sBlattname As String
   
    sBlattname = "Ablauf Übersicht (2)"
    If Not WorkSheetExists(sBlattname) Then
    Else
        Application.DisplayAlerts = False
        Worksheets("Ablauf Übersicht (2)").Delete
        Application.DisplayAlerts = True
    End If
   
   
    sBlattname = "Ablauf Übersicht (3)"
    If Not WorkSheetExists(sBlattname) Then
    Else
        Application.DisplayAlerts = False
        Worksheets("Ablauf Übersicht (3)").Delete
        Application.DisplayAlerts = True
    End If
  Save

End Sub

Ich hoffe ich konnte mich klar genug ausdrücken und dass jemand den Fehler sieht, der sich mir nicht offenbart, da ich einfach langsam betriebsblind bin.
Oder vielleicht hat ja jemand einen ganz anderen Ansatz für mein Ausgangsproblem.

Ich wäre über eine Antowrt sehr dankbar.

 

mfg


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
05.02.2015 13:58:53 Gast11223
NotSolved
05.02.2015 15:10:05 Gast80362
NotSolved
05.02.2015 15:11:24 Gast70661
NotSolved
05.02.2015 15:44:43 Gast78422
NotSolved
05.02.2015 17:35:30 Gast24131
NotSolved
05.02.2015 15:42:40 Gast22305
NotSolved
05.02.2015 15:27:30 Gast23948
NotSolved
05.02.2015 15:51:46 Gast24611
NotSolved
05.02.2015 15:55:55 Gast45581
NotSolved
05.02.2015 16:02:29 Gast27713
NotSolved
05.02.2015 16:05:29 Gast17501
NotSolved
05.02.2015 17:38:42 Gast45562
NotSolved
05.02.2015 18:58:09 Gast14102
NotSolved
05.02.2015 22:51:22 Gast35311
NotSolved
06.02.2015 09:28:24 Gast79925
NotSolved
Blau Wo ist der Fehler
06.02.2015 09:33:00 Gast818
NotSolved
07.02.2015 18:32:21 Gast16757
NotSolved