Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
876to880
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
876to880
876to880
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Unerklärlicher Funktionsaufruf

Unerklärlicher Funktionsaufruf
13.06.2007 14:51:22
Facciola
Hallo,
mir ist gerade beim Löschen einer Zeile etwas passiert, das ich mir nicht erklären kann. Vielleicht kann mir hier jemand weiterhelfen ?!
Es geht darum, eine Zeile und ein Tabellenblatt nach Userinteraktion mittels VBA zu löschen.
Es geht auch darum, den Löschvorgang (Blattwechsel) nicht anzuzeigen, d.h. das Screenupdate auszuschalten. Dies funktioniert allerdings nicht, da das Blatt beim Löschen anscheinend aktiv sein muss. Beim "Activate-Befehl" wechselt dann die Blattansicht trotz ausgeschaltetem Screenupdate. Das, was ich allerdings überhaupt nicht verstehe, ist, dass beim Löschen (Delete-Befehl) des Blattes in eine andere von mir geschriebene Funktion "vorkommenZaehlen" gesprungen wird, die an völlig anderer Stelle für die Darstellung eines Diagramms verwendet wird und absolut garnichts mit dem Löschen des Blattes oder der Zeile zu tun hat. Wer kann mir das erklären ? Der Löschvorgang klappt übrigens trotzdem.
Die angesprochenen Codeabschnitte sind fett hervorgehoben:

Dim wertebereich, zelle As Range
Dim projektnr, stil, antwort, ZF_n, ZF_m, lastProject As String
Dim blatt As Worksheet
Dim n, i, projektnummer, projektnr_del, projektanzahl, zeilen_projektuebersicht_i,  _
zeilen_projektuebersicht_e, zeilen_archiv As Integer
Dim test1, test2, test3 As Boolean
projektnr = InputBox("Welche Projektnummer soll gelöscht werden?" & vbCrLf & _
vbCrLf & "Bitte geben Sie die Nummer 3-stellig ein!" & vbCrLf & _
"Beispiele: 005, 043, 112", "Projekt löschen")
If projektnr = "" Then Exit Sub
projektnr_del = CInt(projektnr)
If projektnr Like "###" Then 'Eingegebene Projektnummer muss eine 3stellige Zahl sein z.B.  _
005, 084, 721
'projektanzahl = Projekte_zaehlen
lastProject = Sheets("PXXX").Range("AA3").Value
zeilen_projektuebersicht_i = Zeilen_zaehlen("Projektübersicht intern")
zeilen_projektuebersicht_e = Zeilen_zaehlen("Projektübersicht extern")
zeilen_archiv = Zeilen_zaehlen("Archiv")
Set wertebereich = Worksheets("Archiv").Range("B6:B" & zeilen_archiv + 5)
If projektnr_del Application.ScreenUpdating = False 'Bildschirmupdate deaktivieren
Worksheets("Archiv").Activate
'Löschen des Projektes im Archiv
For Each zelle In wertebereich
If zelle.Value = projektnr Then
Rows(zelle.Row).Delete
zeilen_archiv = zeilen_archiv - 1
End If
Next
'Löschen des Projektblatts (P###)
Application.DisplayAlerts = False
Worksheets("P" & projektnr).Delete
Application.DisplayAlerts = True
'Hyperlinks in Projektübersicht und Archiv aktualisieren
'Hyperlinks_aktualisieren "Archiv", projektnr_del, zeilen_archiv
'Hyperlinks_aktualisieren "Projektübersicht intern", projektnr_del,  _
zeilen_projektuebersicht_i
'Hyperlinks_aktualisieren "Projektübersicht extern", projektnr_del,  _
zeilen_projektuebersicht_e
'Hyperlink und Projektnummer in Projekten mit höherer Projektnummer aktualisieren
'    For i = projektnr_del To projektanzahl - 1
'        projektnummer = Format(i, "00#")
'        Worksheets("P" & projektnummer).Activate
'        Range("E34").Select
'        ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:= _
"\\DA-AIRBUS\.TRZL_PROJEKTE.TRZL_PROJEKTE.PROJEKTE.HAM\" & _
"Projektlandkarte_TRZL\Projektdokumentation\Projekt-" & _
projektnummer _
, TextToDisplay:="hier gehts zur -> Projektdokumentation"
'        Worksheets("P" & projektnummer).Range("AA3").Value = projektnummer
'    Next
'Laufende Nummer im Archiv updaten
LfdNummer_update Worksheets("Archiv").Range("A6:A" & zeilen_archiv + 5)
'Dokumentationsordner löschen, wenn leer, sonst muss das Löschen manuell nachgeholt  _
werden.
Shell Environ$("COMSPEC") & " /c rmdir " & _
"\\DA-AIRBUS\.TRZL_PROJEKTE.TRZL_PROJEKTE.PROJEKTE.HAM\" & _
"Projektlandkarte_TRZL\Projektdokumentation\Projekt-" & _
projektnr
Application.ScreenUpdating = True
Potenzialuebersicht_update 'Potenzial Übersicht wird aktualisiert
GoTo_Menue
MsgBox "Das Projekt wurde erfolgreich gelöscht!"
Else
MsgBox "Das Projekt wurde nicht gelöscht!"
End If
Else
MsgBox "Ungültige Projektnummer!"
End If


Wer kann mir das erklären ?
Bin für jeden Tipp dankbar.
Gruß,
Ruben

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Unerklärlicher Funktionsaufruf
14.06.2007 00:26:40
fcs
Hallo Ruben,
Problem Nr. 1 (Ansicht aktualisieren)
Verschiebe die Zeile für das Aktivieren des Blatts "Archiv" vor das Abschalten der Bildschirmaktualisierung. Der Bildschirm sollte danach bis zum Abschluss der Lösch-Aktionen "einfrieren".

If antwort = vbOK Then
Worksheets("Archiv").Activate
Application.ScreenUpdating = False 'Bildschirmupdate deaktivieren
'Löschen des Projektes im Archiv


Problem Nr. 2 (unerwarteter Aufruf der Sub/Funktion vorkommenZaehlen)
Das kann man ohne Kenntnis der Datei/Prozeduren nicht nachvollziehen.
Wird die Prozedur von irgendeinem Ereignis gestartet oder innerhalb einer der beiden Subs LfdNummer_update oder Potenzialuebersicht_update aufgerufen oder durch Wertänderungen gestartet?
Falls es ein Ereignis ist, das beim Löschen gestartet wird, dann ggf. vor dem Löschen Ereignisse deaktivieren und dannach wieder aktivieren.


'Löschen des Projektblatts (P###)
Application.EnableEvents = False
Application.DisplayAlerts = False
Worksheets("P" & projektnr).Delete
Application.DisplayAlerts = True
Application.EnableEvents = True

Gruß
Franz
P.S. Weiterer Hinweis zum Deklarieren von Variablen
In einer Dim - Anweisung muss außer für Variablen des Typs Variant (=Standard-Typ) für jede Variable mit ... As ... der Typ festgelegt werden; einmal am Ende reicht nicht.
Also z.B


Dim test1 As Boolean, test2 As Boolean, test3 As Boolean
und nicht
Dim test1, test2, test3 As Boolean

Schau unter der VBa-Hilfe auch mal und DefTyp-Anweisungen nach, wenn du den Typ von Variablen systematisch über den Anfangsbuchstaben des Variablennamens festlegen willst ( z.B.: alle Variablen, die mit "i" beginnen sind vom Typ Integer)

Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige