Fehler 5991 im Makro

Moderator: ModerationP

Fehler 5991 im Makro

Beitragvon Word_Beginner » 02. Jun 2014, 15:07

Guten Tag Zusammen,

folgendes Makro soll leere Zeilen aus einer drei Spalten Tabelle löschen, jede Spalte hat ein Textformularfeld, wenn eine Zeile leer ist soll diese gelöscht werden.
Code: Alles auswählen
Sub LeereTabZeilenLöschen()
    Dim AktTab As Word.Table
    Dim iAktRow As Integer, iAktCell As Integer
    Dim Löschen As Boolean
    Dim StrPwd As String
   
    StrPwd = "TEST"
    With ActiveDocument
        If .ProtectionType = wdAllowOnlyFormFields Then
            .Unprotect Password:=StrPwd
        End If
        For Each AktTab In ActiveDocument.Tables
            For iAktRow = AktTab.Rows.Count To 1 Step -1
                Löschen = True
                For iAktCell = 1 To AktTab.Rows(iAktRow).Cells.Count
                    If Len(Trim(AktTab.Rows(iAktRow).Cells(iAktCell))) > 2 Then
                        Löschen = False
                    End If
                Next iAktCell
                If Löschen Then AktTab.Rows(iAktRow).Delete
            Next iAktRow
        Next AktTab
        .Protect Type:=wdAllowOnlyFormFields, NoReset:=True, Password:=StrPwd
    End With
End Sub
Bei der Ausführung erhalte ich den
Makro Fehler 5991 - Es können keine individuellen Reihen in dieser Sammlung adressiert werden, weil die Tabelle vertikal verbundene Zellen enthält.

Danke für die Hilfe ;)
Word_Beginner
 

Re: Fehler 5991 im Makro

Beitragvon Miss Marple » 02. Jun 2014, 16:32

Hi,

die Fehlermeldung ist doch eindeutig, oder ?

Deine Tabelle enthält verbundene Zellen und die können nun mal nicht gelöscht werden. Wenn du wirklich Zeilen löschen möchtest, musst du die Tabelle anders aufbauen.

Gruß
MM

P.S.
Fehlermeldung: "5992" = verbundene Zellen in Spalten, "5991" = verbundene Zellen in Zeilen
Miss Marple
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 1568
Registriert: 24. Jan 2014, 08:13
Wohnort: 52° 15' 53" N, 10° 31' 26" E

Re: Fehler 5991 im Makro

Beitragvon Word_Beginner » 03. Jun 2014, 08:16

Hallo,

danke für die Hilfe.
Die Tabelle hat nur keine vertikal verbundene Zeilen, (3 Zeilen und 4 Spalten)

Habt Ihr noch eine Idee??

Danke
Word_Beginner
 

Re: Fehler 5991 im Makro

Beitragvon Miss Marple » 03. Jun 2014, 11:19

Ich will nicht nerven, aber bist du sicher, dass deine Tabelle nicht doch verbundene Zellen enthält. Ich hatte diese Fehlermeldung(en) noch nie 'grundlos' :roll: ...

Wenn du nicht dahinter kommst, woran es liegt, kannst du bei einer so kleinen Tabelle noch mal schnell in einer Kopie der Datei eine neue Tabelle (ohne jegliche Formatierung o.ä.) erstellen, die Formularfelder da reinziehen, die 'alte Tabelle' löschen und das Makro über die 'neue' laufen lassen.

Wenn dann auch in dieser Tabelle der Fehler erscheint, muss du die Datei wohl mal hochladen (wichtige persönliche Daten vorher raus). Meine Kristallkugel konnte sich zwar erholen (Zwangspause), aber alles zeigt sie mir nach wie vor nicht.

Gruß
MM

Nachtrag: In deinem Code steht die Zeile
Code: Alles auswählen
        For Each AktTab In ActiveDocument.Tables
Gibt es denn mehr als nur diese eine Tabelle in deinem Dokument? Sonst würdest du ja wohl nicht 'For Each' verwenden. Dann könnte der Fehler natürlich auch bei einer ganz anderen Tabelle auftreten.
Miss Marple
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 1568
Registriert: 24. Jan 2014, 08:13
Wohnort: 52° 15' 53" N, 10° 31' 26" E

Re: Fehler 5991 im Makro

Beitragvon Word_Beginner » 03. Jun 2014, 13:24

Hi,

leider fehlen mir hier die VBA Kenntnisse um es auf meine spezielle Tabelle auszurichten.

Wie muss ich das Makro denn ändern, das es auf speziell die eine Tabelle ausrichte?

danke ;)
Word_Beginner
 

Re: Fehler 5991 im Makro

Beitragvon Miss Marple » 03. Jun 2014, 16:55

Na ja, wenn ich dir sage, dass du mit einem Range arbeiten musst, ist dir wahrscheinlich nicht wirklich geholfen.

Genauso wenig wie mir mit deiner pauschalen Frage wie du das Makro ändern musst. Dazu weiß ich viel zu wenig über die Datei. Bisher nur, dass Formulafelder ausgefüllt werden und leere Zeilen gelöscht werden sollen. Und dass sich wohl noch weitere Tabellen in der Datei befinden - das reicht aber leider nicht.

Wie erstellst du die Datei? Von einer Vorlage mit immer wieder leeren Formularfeldern?
Was passiert, mit den gelöschten Tabellenzeilen? Wird die Datei so abgespeichert (ggf. gedruckt/verschickt) und ansonsten ruhst sie in Frieden auf der Festplatte?
Wo befindet sich dein Cursor, wenn du das Makro startest? In der Tabelle oder irgendwo außerhalb. Oder kannst du das so ganau gar nicht sagen?
Ist die Tabelle immer an derselben Stelle = sie ist immer die soundsovielte Tabelle im Dokument und das wird sich auch nicht ändern.

Du siehst Fragen über Fragen. Nur anders lässt sich kein verlässlicher Ansatz finden.

Gruß
MM
Miss Marple
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 1568
Registriert: 24. Jan 2014, 08:13
Wohnort: 52° 15' 53" N, 10° 31' 26" E

Re: Fehler 5991 im Makro

Beitragvon Word_Beginner » 04. Jun 2014, 14:05

Hallo,

also die erste Tabelle ist ein Briefkopf, diese Tabelle hat unterschiedlichste Zeilen und Spalten, hier soll aber auch nichts gelöscht werden.

Die zweite Tabelle in dem Formular ist eine Übersicht mit Daten, auch hier soll nichts verändert werden.

Und die dritte Tabelle ist die über die das Makro laufen soll und Tabellenzeilen in denen die Textformularfelder leer sind gelöscht werden.
Das Makro starte ich momentan über das letzte Textformularfeld der Tabelle (bei Beenden). Generell könnte es aber auch außerhalb angestartet werden.

Das Formular ist selbst geschützt, so dass nur die Textformularfelder ausgefüllt werden können. Es wird ausgefüllt und soll nach entfernen der Tabellenzeilen gedruckt werden. Danach wird es immer wieder im Ursprungszustand aufgerufen.

Ich hoffe die Informationen helfen weiter.
Word_Beginner
 

Re: Fehler 5991 im Makro

Beitragvon Miss Marple » 04. Jun 2014, 14:47

Ja, das hilft.

Der Schnipsel ...
Code: Alles auswählen
    Set AktTab = ActiveDoument.Tables(3)      ' <- geändert/ersetzt
    With AktTab     ' <- geändert/ersetzt
        For iAktRow = AktTab.Rows.Count To 1 Step -1
            Löschen = True
            For iAktCell = 1 To AktTab.Rows(iAktRow).Cells.Count
                If Len(Trim(AktTab.Rows(iAktRow).Cells(iAktCell))) > 2 Then
                    Löschen = False
                End If
            Next iAktCell
            If Löschen Then AktTab.Rows(iAktRow).Delete
        Next iAktRow
    End With     ' <- geändert/ersetzt
... ersetzt deinen Code zwischen "If .ProtectionType" ...
Code: Alles auswählen
        If .ProtectionType = wdAllowOnlyFormFields Then
            .Unprotect Password:=StrPwd
        End If
        '...
        '...
        '...
        .Protect Type:=wdAllowOnlyFormFields, NoReset:=True, Password:=StrPwd
... und ".Protect Type". Sollte klappen.

Ob der Rest dazwischen funktioniert, kann ich dir nicht garantieren, denn ich hab's nicht ausprobiert. Ich hab keine Zeit/Lust, deine Datei nachzubauen, nur um es auszuprobieren :roll: . Wirst du dann ja schon sehen, ob es geht.

Die Tabelle Nr. 3 ist nun 'in Stein gemeißelt', wenn eine andere Tabelle davor eingefügt wird (irgendwann mal) bekommst du wieder ein Problem. Aber bis dahin ...

Gruß
MM
Miss Marple
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 1568
Registriert: 24. Jan 2014, 08:13
Wohnort: 52° 15' 53" N, 10° 31' 26" E

Re: Fehler 5991 im Makro

Beitragvon Word_Beginner » 12. Jun 2014, 10:59

Hallo,

danke für die Hilfe, nur leider funktioniert dieses Makro nicht, wenn ein Textformularfeld nicht ausgefüllt wird also den Ursprungszustand hat [OOOOO], wenn ich es als Text formatiere würde es funktionieren sofern ich hier eine Leerzeile eintrage, da das Formularfeld aber ein Datum erwartet, geht dies hier nicht.

Wie muss ich das Makro denn anpassen, dass Zeilen die Textformularfelder und ggf. Drop-Down Felder enthalten, die nicht ausgefüllt werden, also den Ursprungszustand haben trotzdem gelöscht werden?

Danke im Voraus.

LG
Word_Beginner
 


Zurück zu Word Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste