Supportnet / Forum / Tabellenkalkulation
Nicht in den Haltemodus wechseln
Frage
Hallo,
zu später Stunde komme ich noch mal mit meiner Frage.
Und zwar möchte ich mit einem Makro ein Tabellenblatt löschen. Dieses enthält aber ein Makro, welches offenbar anspringt, wenn ich das Blatt lösche.
Deshalb kommt immer die Meldung: "Zu diesem Zeitpunkt kann nicht in den Haltemodus gewechselt werden"
Das will ich ja auch gar nicht und wenn ich auf "Fortfahren" klicke, läuft das Makro problemlos durch.
Wie kann ich diese Meldung verhindern oder umgehen? mit displayalerts funktioniert es nicht.
Eine Antwort muss heute nicht mehr sein. Einen schönen entspannten Abend noch.
Gruß
Peter
Antwort 1 von coros
Hallo Peter,
ohne genau Deine Datei und die darin enthaltenen VBA-Code zu kennen, könnte es unter Umständen daran liegen, dass ein Calculate-Ereignis den VBA-Code auslöst. Das könntest DU mit
abfangen. Dieser Befehl bewirkt, dass die Berechnung auf manuell gestellt wird und somit kein Calculate-Ereignis auslöst. Am Ende des Makros solltest Du das aber wieder mit
einschalten.
Noch eine Möglichkeit wäre, sich eine Sperrvariable zu erzeugen, die mit Publik als Typ Boolean definiert wird (Achtung Public-Definition muss in einem StandardModul erstellt werden, damit der Wert in der gesamten Exceldatei verwendet, bzw. abgefragt werden kann), mit der man den Code an einer bestimmten Stelle, meist gleich am Anfanf eines VBA-Codes, diesen abbricht. Als Beispiel
In Deinem Makro weiß Du der Variablen "Sperre" den Wert "True" zu. In dem zu löschenden Blatt setzt Du in jedem Worksheet-Ereignis in der ersten Zeile den Befehl
Das bewirkt, dass der VBA-Code an der Stelle abgebrochen wird.
Ich hoffe, Du kommst klar. Ansonsten benötigt man sicherlich Deine Datei, um zu sehen, welches Ereignis dort anspricht und wie man das unterbinden kann.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du
ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
ohne genau Deine Datei und die darin enthaltenen VBA-Code zu kennen, könnte es unter Umständen daran liegen, dass ein Calculate-Ereignis den VBA-Code auslöst. Das könntest DU mit
Application.Calculation = xlCalculationManualabfangen. Dieser Befehl bewirkt, dass die Berechnung auf manuell gestellt wird und somit kein Calculate-Ereignis auslöst. Am Ende des Makros solltest Du das aber wieder mit
Application.Calculation = xlCalculationAutomaticeinschalten.
Noch eine Möglichkeit wäre, sich eine Sperrvariable zu erzeugen, die mit Publik als Typ Boolean definiert wird (Achtung Public-Definition muss in einem StandardModul erstellt werden, damit der Wert in der gesamten Exceldatei verwendet, bzw. abgefragt werden kann), mit der man den Code an einer bestimmten Stelle, meist gleich am Anfanf eines VBA-Codes, diesen abbricht. Als Beispiel
Public Sperre as BooleanIn Deinem Makro weiß Du der Variablen "Sperre" den Wert "True" zu. In dem zu löschenden Blatt setzt Du in jedem Worksheet-Ereignis in der ersten Zeile den Befehl
If Sperre = True Then Exit SubDas bewirkt, dass der VBA-Code an der Stelle abgebrochen wird.
Ich hoffe, Du kommst klar. Ansonsten benötigt man sicherlich Deine Datei, um zu sehen, welches Ereignis dort anspricht und wie man das unterbinden kann.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du
ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
Antwort 2 von Peter3011
Hi Oliver,
ich habe mal fix das Makro, welches sich im Tabellenblatt befindet, hierher kopiert.
Private Sub Worksheet_Change(ByVal Target As Range)
'Kapazitäten Stromaggregate vergleichen
If Range("c106") < Range("f106") Then
leist$ = Range("f106")
If Sheets("Deckblatt (total)").Range("f8") = "Deutsch" Then
MsgBox ("Die Leistung des Aggregates muss mindestens " & leist$ & " KW betragen!")
neuleist$ = InputBox("Bitte geben Sie hier die Leistung (min. " & leist$ & " KW) ein!")
Else
MsgBox ("The capacity has to have " & leist$ & " KW at minimum!")
neuleist$ = InputBox("Please insert the new capacity (bigger than " & leist$ & " KW)!")
End If
Range("c106") = neuleist$
End If
'Kapazitäten techn. CO2 vergleichen
If Range("c132") < 0 Then
leist$ = Range("f130")
If Sheets("Deckblatt (total)").Range("f8") = "Deutsch" Then
MsgBox ("Sie können maximal " & leist$ & " t Trockeneis produzieren!")
neuleist$ = InputBox("Bitte geben Sie hier die neue Trockeneismenge (max. " & leist$ & " t) ein!")
Else
MsgBox ("You only can produce " & leist$ & " t at maximum!")
neuleist$ = InputBox("Please insert the new dry ice amount (max. " & leist$ & " t) you want to produce!")
End If
Range("c134") = neuleist$
End If
'Wärme für Kälteproduktion
If Range("c120") < 0 Then
leist$ = Range("c122")
eis$ = leist$ / 1.75
If Sheets("Deckblatt (total)").Range("f8") = "Deutsch" Then
MsgBox ("Sie benötigen für die Kältemenge von " & leist$ & " MWh mehr Wärme, als Ihnen zur Verfügung steht!")
neuleist$ = InputBox("Bitte geben Sie hier die neue Kältemenge (max. " & eis$ & " MWh) ein!")
Else
MsgBox ("You only can produce " & leist$ & " MWh cold at maximum!")
neuleist$ = InputBox("Please insert the new cold amount (max. " & eis$ & " MWh) you want to produce!")
End If
Range("c122") = neuleist$
End If
End Sub
Dieses Makro muss unterdrückt werden, wenn das Blatt gelöscht wird.
Und dieses Makro löscht die Blätter.
Private Sub ListBox5_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
'Deklarationen
Dim nummer As Integer
Dim intab As Integer
Dim intcou As Integer
Dim val As Integer
Dim valuta As Integer
Dim I As Long
Dim hi As String
protxt$ = ListBox5.Text
Application.DisplayAlerts = False
For intab = 9 To Worksheets.Count Step 6
nummer = intab
If Worksheets(intab).Range("A1") = protxt$ Then
Worksheets(Array(nummer, nummer + 1, nummer + 3, nummer + 4, _
nummer + 5)).Select
ActiveWindow.SelectedSheets.Delete
Sheets(nummer).Delete
GoTo end1
End If
Next intab
end1:
For intcou = 9 To Worksheets.Count Step 6
'Tabellennamen vergeben
Sheets(intcou).Select
ActiveSheet.Name = "Project " & (intcou - 3) / 6
Sheets(intcou + 1).Select
ActiveSheet.Name = "Deckblatt " & (intcou - 3) / 6
Sheets(intcou + 2).Select
ActiveSheet.Name = "Steuerung " & (intcou - 3) / 6
Sheets(intcou + 3).Select
ActiveSheet.Name = "Summary " & (intcou - 3) / 6
Sheets(intcou + 4).Select
ActiveSheet.Name = "GuV " & (intcou - 3) / 6
Sheets(intcou + 5).Select
ActiveSheet.Name = "Zins und Tilgung " & (intcou - 3) / 6
'Projektnummer vergeben
Sheets("Steuerung " & (intcou - 3) / 6).Select
Range("c7").Select
Selection.ClearContents
ActiveCell.Value = "Project " & (intcou - 3) / 6
Next intcou
UF_Projekt_löschen_de.ListBox5.Clear
For intab = 9 To Worksheets.Count Step 6
Worksheets(intab).Activate
Range("a1").Select
hi = ActiveCell.Value
UF_Projekt_löschen_de.ListBox5.AddItem hi
Next
End Sub
Der fett gedruckte Befehl betrifft das Blatt mit dem Code, der unterdrückt werden soll.
Mit dem Public Sub scheint das nicht zu funktionieren (zumindest so wie ich das mache), da die Fehlermeldung immer noch kommt.
Ich mache noch mal meine Datei fertig und stelle sie hierein.
Vielleicht kommst Du mit diesem Makros auch schon weiter.
Gruß
Peter
ich habe mal fix das Makro, welches sich im Tabellenblatt befindet, hierher kopiert.
Private Sub Worksheet_Change(ByVal Target As Range)
'Kapazitäten Stromaggregate vergleichen
If Range("c106") < Range("f106") Then
leist$ = Range("f106")
If Sheets("Deckblatt (total)").Range("f8") = "Deutsch" Then
MsgBox ("Die Leistung des Aggregates muss mindestens " & leist$ & " KW betragen!")
neuleist$ = InputBox("Bitte geben Sie hier die Leistung (min. " & leist$ & " KW) ein!")
Else
MsgBox ("The capacity has to have " & leist$ & " KW at minimum!")
neuleist$ = InputBox("Please insert the new capacity (bigger than " & leist$ & " KW)!")
End If
Range("c106") = neuleist$
End If
'Kapazitäten techn. CO2 vergleichen
If Range("c132") < 0 Then
leist$ = Range("f130")
If Sheets("Deckblatt (total)").Range("f8") = "Deutsch" Then
MsgBox ("Sie können maximal " & leist$ & " t Trockeneis produzieren!")
neuleist$ = InputBox("Bitte geben Sie hier die neue Trockeneismenge (max. " & leist$ & " t) ein!")
Else
MsgBox ("You only can produce " & leist$ & " t at maximum!")
neuleist$ = InputBox("Please insert the new dry ice amount (max. " & leist$ & " t) you want to produce!")
End If
Range("c134") = neuleist$
End If
'Wärme für Kälteproduktion
If Range("c120") < 0 Then
leist$ = Range("c122")
eis$ = leist$ / 1.75
If Sheets("Deckblatt (total)").Range("f8") = "Deutsch" Then
MsgBox ("Sie benötigen für die Kältemenge von " & leist$ & " MWh mehr Wärme, als Ihnen zur Verfügung steht!")
neuleist$ = InputBox("Bitte geben Sie hier die neue Kältemenge (max. " & eis$ & " MWh) ein!")
Else
MsgBox ("You only can produce " & leist$ & " MWh cold at maximum!")
neuleist$ = InputBox("Please insert the new cold amount (max. " & eis$ & " MWh) you want to produce!")
End If
Range("c122") = neuleist$
End If
End Sub
Dieses Makro muss unterdrückt werden, wenn das Blatt gelöscht wird.
Und dieses Makro löscht die Blätter.
Private Sub ListBox5_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
'Deklarationen
Dim nummer As Integer
Dim intab As Integer
Dim intcou As Integer
Dim val As Integer
Dim valuta As Integer
Dim I As Long
Dim hi As String
protxt$ = ListBox5.Text
Application.DisplayAlerts = False
For intab = 9 To Worksheets.Count Step 6
nummer = intab
If Worksheets(intab).Range("A1") = protxt$ Then
Worksheets(Array(nummer, nummer + 1, nummer + 3, nummer + 4, _
nummer + 5)).Select
ActiveWindow.SelectedSheets.Delete
Sheets(nummer).Delete
GoTo end1
End If
Next intab
end1:
For intcou = 9 To Worksheets.Count Step 6
'Tabellennamen vergeben
Sheets(intcou).Select
ActiveSheet.Name = "Project " & (intcou - 3) / 6
Sheets(intcou + 1).Select
ActiveSheet.Name = "Deckblatt " & (intcou - 3) / 6
Sheets(intcou + 2).Select
ActiveSheet.Name = "Steuerung " & (intcou - 3) / 6
Sheets(intcou + 3).Select
ActiveSheet.Name = "Summary " & (intcou - 3) / 6
Sheets(intcou + 4).Select
ActiveSheet.Name = "GuV " & (intcou - 3) / 6
Sheets(intcou + 5).Select
ActiveSheet.Name = "Zins und Tilgung " & (intcou - 3) / 6
'Projektnummer vergeben
Sheets("Steuerung " & (intcou - 3) / 6).Select
Range("c7").Select
Selection.ClearContents
ActiveCell.Value = "Project " & (intcou - 3) / 6
Next intcou
UF_Projekt_löschen_de.ListBox5.Clear
For intab = 9 To Worksheets.Count Step 6
Worksheets(intab).Activate
Range("a1").Select
hi = ActiveCell.Value
UF_Projekt_löschen_de.ListBox5.AddItem hi
Next
End Sub
Der fett gedruckte Befehl betrifft das Blatt mit dem Code, der unterdrückt werden soll.
Mit dem Public Sub scheint das nicht zu funktionieren (zumindest so wie ich das mache), da die Fehlermeldung immer noch kommt.
Ich mache noch mal meine Datei fertig und stelle sie hierein.
Vielleicht kommst Du mit diesem Makros auch schon weiter.
Gruß
Peter
Antwort 3 von Peter3011
Wo konnte man noch mal die Datei hochladen?
Gruß
Peter
Gruß
Peter
Antwort 4 von coros
HAllo Peter,
die Datei kann man z.B. bei www.netupload.de hochladen. Hast Du denn einen meiner Vorschläge mal ausprobiert? Wenn ja, mit welchem Ergebnis?
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du
ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
die Datei kann man z.B. bei www.netupload.de hochladen. Hast Du denn einen meiner Vorschläge mal ausprobiert? Wenn ja, mit welchem Ergebnis?
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du
ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
Antwort 5 von Peter3011
Hallo Oliver,
habe hin und her probiert. Ohne Erfolg zunächst.
Aber Excel hat sich anscheinend überlegt, dass es auch ohne geht :-).
Jetzt läuft top, ohne dass ich etwas geändert habe.
Danke für Deine Hilfe.
Gruß
Peter
habe hin und her probiert. Ohne Erfolg zunächst.
Aber Excel hat sich anscheinend überlegt, dass es auch ohne geht :-).
Jetzt läuft top, ohne dass ich etwas geändert habe.
Danke für Deine Hilfe.
Gruß
Peter

