MS-Office-Forum
Google
   

Zurück   MS-Office-Forum > Microsoft Office > Microsoft Word
Registrieren Forum Hilfe Alle Foren als gelesen markieren

Banner und Co.

Antworten
Ads Der Renner, 11 Entwicklertools für Access, Tipps & Trick und offene Datenbanken zum einzigartigen Preis.
Themen-Optionen Ansicht
Alt 13.11.2017, 11:33   #1
Nilo87
Neuer Benutzer
Neuer Benutzer
Standard Word 2010 - Neue Tabellenzeile mit Autonummerierung und Steuerelementen

Guten Tag Community! Das ist mein erster Beitrag in diesem Forum.

Ich habe folgendes Problem in Word 2010:

In einem Formular ist eine Tabelle mit 2 Zeilen:

1. Zeile = Kopfzeile
2. Zeile
- in der ersten Spalte eine fortlaufende Nummerierung
- und in den weiteren Spalten verschiedene Inhaltssteuerelemente.

Nun möchte ich mit einem Button unter der Tabelle eine neue Zeile einfügen, welche die fortlaufende Nummerierung in Spalte 1 und die Inhaltssteuerelemente in den anderen Spalten mit kopiert.

Dazu habe ich jetzt bereits das Internet durchforstet und bin auf folgende Lösung gekommen:

_______________________________________________

Private Sub Personal_Click()

If ActiveDocument.ProtectionType <> wdNoProtection Then
ActiveDocument.Unprotect Password:=""
End If

With ActiveDocument.Tables(1)
.Rows(.Rows.Count).Select
With Selection
.Copy
.PasteAppendTable
End With
.Cell(.Rows.Count, 1).Range.Text = .Rows.Count - 2 & "."
End With

If ActiveDocument.ProtectionType = wdNoProtection Then
ActiveDocument.Protect Type:=wdAllowOnlyFormFields, NoReset:=True, Password:=""
End If

End Sub

_______________________________________________

folgendes Problem habe ich mit dieser Lösung:
1. die fortlaufende Nummerierung wird kopiert. Ich habe also in den neuen Zeilen die Nummerierung + die kopierte Nummerierung aus der vorherigen Zeile
2. Die Inhaltssteuerelemente werden mit Inhalt kopiert

Vor allem Punkt 1 stört mich.
Kann mir da jemand helfen?

Grüße
Nilo87 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 13.11.2017, 13:56   #2
Gerhard H
MOF Guru
MOF Guru
Standard

Hallo Nilo,

wenn du die laufende Nummer in der ersten Spalte bereits per Schaltfläche eingefügt hast, lass einfach diese Zeile weg:
Code:

.Cell(.Rows.Count, 1).Range.Text = .Rows.Count - 2 & "."
Und zum Leeren der Inhaltssteuerelemente der neuen Zeile verwende folgenden Code:
Code:

For i = 2 To .Columns.Count
        .Cell(.Rows.Count, i).Range.ContentControls(1).Range.Text = ""
    Next i
(Hier ist vorausgesetzt, dass alle Zellen der Zeile ab der zweiten auch ein Inhaltssteuerelement aufweisen; ansonsten muss man den Code noch anpassen).

Die Inhaltssteuerelemente benötigen übrigens keinen Dokumentschutz; wenn du ihn nicht aus anderen Gründen brauchst, kannst du die Zeilen zum Aufheben und wieder Setzen des Schutzes auch rausnehmen.

__________________

Gruß
Gerhard
Gerhard H ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 13.11.2017, 14:51   #3
Nilo87
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Hallo Gerhard,

habe den Code rausgenommen allerdings funktioniert die automatische Nummerierung dann gar nicht mehr... Ausgabe 1 1 1 1 2
Also letzte Zeile gibt er eine 2 aus. In den oberen eine 1.

Ansonsten hat das funktioniert mit deinem Code. Vielen Dank!

Gruß

Geändert von Nilo87 (13.11.2017 um 14:55 Uhr).
Nilo87 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 13.11.2017, 15:00   #4
Gerhard H
MOF Guru
MOF Guru
Standard

Hallo Nilo,

unter "automatischer Nummerierung" hab ich verstanden: Das Einfügen einer Nummerierung über eine der beiden Schaltflächen im Menüband: Nummerierung oder Liste mit mehreren Ebenen (wobei ich letztere empfehlen würde, auch wenn du nur eine Nummern-Ebene hast). Bei mir wird die dann ohne mein weiteres Zutun in jeder neu eingefügten Zeile um eins höher, wie es sich gehört.

Alternativ: Schmeiß die automatische Nummerierung raus und lass die Code-Zeile drin.

Falls du nicht klarkommst, lade ein Musterdokument hoch.

__________________

Gruß
Gerhard
Gerhard H ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 13.11.2017, 17:12   #5
Nilo87
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Hi,

hat jetzt alles geklappt! Ich möchte das Makro allerdings auf mehrere Tabellen anwenden.

Die einzige Fehlermeldung bekomme ich jetzt nur noch, wenn ich das Makro auf eine Tabelle anwende, wo neben den "Nur-Text-Inhaltssteuerelementen" unter anderem "Dropdownlisten-Inhaltssteuerelemente" und "Kontrolllistensteuerelemente" enthalten sind. Diese können dann nicht geleert werden und ab da hört das Makro dann selbstverständlich auf zu arbeiten. Mit "Nur-Text-Inhaltssteuerelementen" funktioniert es aber wunderbar!

Vielleicht könntest du den Code dahingehend anpassen? Die unterschiedlichen Steuerelemente sind immer in unterschiedlichen Spalten. Ich weiß nicht ob man dahingehend das Makro automatisieren kann, das es unabhängig von der Position der unterschiedlichen Steuerelemente arbeitet.

Bis hierhin auf jeden fall vielen Dank!
Nilo87 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 13.11.2017, 18:34   #6
Gerhard H
MOF Guru
MOF Guru
Standard

Hallo Nilo,

eine Bitte vorab: Erstelle doch künftig für solche Wünsche eine Mustertabelle. Erstens müssen wir es dann nicht raten, wie sie aussieht, und zweitens müssen wir sie nicht nachbasteln. Die Arbeit hast du ja schon erledigt.

Zur Sache: Wie richtig beobachtet, kannst du in das Auswahlfeld von Dropdownlisten-Steuerelementen nichts reinschreiben. Hier kann man aber den ersten Listeneintrag auswählen lassen, der üblicherweise der Aufforderungstext ist.

Kontrolllistensteuerelemente kenn ich nicht. Ich denke, du meinst Kontrollkästchen-Steuerelemente. Hier könnte man das Häkchen setzen oder entfernen.

Bildsteuerelemente und gruppierte Elemente müsste man ebenfalls extra behandeln. Da du aber davon nichts geschrieben hast, ignoriere ich die mal.

Das sähe dann so aus:
Code:

Private Sub Personal_Click()
Dim i As Integer
Dim akt_CC As ContentControl


'If ActiveDocument.ProtectionType <> wdNoProtection Then
'ActiveDocument.Unprotect Password:=""
'End If

With ActiveDocument.Tables(1)
    .Rows(.Rows.Count).Select
        With Selection
            .Copy
            .PasteAppendTable
        End With
    .Cell(.Rows.Count, 1).Range.Text = .Rows.Count - 1 & "."

    For i = 2 To .Columns.Count
       Set akt_CC = .Cell(.Rows.Count, i).Range.ContentControls(1)
    
            With akt_CC
                Select Case .Type
                 Case 4 'Dropdownliste
                    .DropdownListEntries(1).Select
                 Case 8 'Checkbox
                    .Checked = False 'oder true, was dir besser gefällt
                 Case Else 'alles, wo man Text reinschreiben kann
                    .Range.Text = ""
                End Select
            End With
    Next i
    
End With

'If ActiveDocument.ProtectionType = wdNoProtection Then
'ActiveDocument.Protect Type:=wdAllowOnlyFormFields, NoReset:=True, Password:=""
'End If

End Sub
Testdokument mit diesem Makro im Anhang.

Wenn du mehrere Tabellen behandeln willst, gäbe es die Möglichkeit, immer diejenige Tabelle als die aktuelle zu definieren, in der grad die Schreibmarke steht. Dann müsstest du statt:

With ActiveDocument.Tables(1) so notieren: With Selection.Tables(1).

Eine Active-X-Schaltfläche die du offenbar verwenden willst, müsste dann aber direkt in der Tabelle stehen. Das könnte man evtl. so hintricksen, dass man eine rahmenlose Zelle / Zeile erstellt.
Alternativen wären entweder eine Tastenkombination oder eine Schaltfläche in der Schnellzugriffsleiste.
Angehängte Dateien
Dateityp: docm Mustertabelle.docm (35,1 KB, 2x aufgerufen)

__________________

Gruß
Gerhard
Gerhard H ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 14.11.2017, 09:24   #7
Nilo87
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Hi Gerhard,

werde das nächste Mal eine Beispieltabelle machen. Soory.

Vielen Dank. jetzt funktioniert alles so wie ich es brauche!!!

Geiles Forum

Grüße
Nilo87 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 14.11.2017, 13:26   #8
Nilo87
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Es ist jetzt zum Schluss doch noch ein Problem aufgetreten:
Wenn ich die Inhaltssteuerelemente vor dem Löschen schützen möchte funktioniert das Makro wieder nicht

Gibt es da eine schnelle Lösung? Habe den Schreibschutz drin und jeweils alle Felder die zu bearbeiten sind als "Ausnahme markiert".

Grüße

Edit: Habe jetzt rausgefunden, dass es an dem Reset der Felder liegt. Im Anhang eine Beispieldatei die 2 Varianten zeigt. Mir wäre eine Mischung aus beiden am liebsten. Felder werden resettet und die Ausnahmemarkierung wird für jede Zelle einzeln erzeugt.
Angehängte Dateien
Dateityp: docm beispiel.docm (49,7 KB, 0x aufgerufen)

Geändert von Nilo87 (14.11.2017 um 15:08 Uhr).
Nilo87 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 14.11.2017, 15:00   #9
Gerhard H
MOF Guru
MOF Guru
Standard

Hallo, Nilo

du hast drei Möglichkeiten, ein Dokument mit Inhaltssteuerelementen zu schützen

a) deine Variante (würde ich als letztes bevorzugen)
b) als Dokumentschutz: Nur zulassen: Ausfüllen von Formularen (würde ich nehmen, wenn das gesamte Dokument außer den Inhaltssteuerelementen geschützt werden soll)
c) als Eigenschaften der Steuerelemente: Das Steuerelement kann nicht gelöscht werden (würde ich nehmen, wenn das Dokument selber ansonsten keinen Schutz braucht).

Im Fall von a) und b) musst du zu Beginn des Makros den Schutz temporär aufheben, wie ursprünglich vorgesehen und am Ende wieder setzen. Bei a) setzt du beim Wieder-Schützen als Typ wdAllowOnlyReading, bei b) wdAllowOnlyFormFields

Im Fall von c) musst du keinen Dokumentschutz setzen.

__________________

Gruß
Gerhard
Gerhard H ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 14.11.2017, 15:10   #10
Nilo87
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Habe meinen letzten Post aktualisiert mit Beispiel-Datei.
Schutz habe ich aufgehoben und wieder hinzugefügt daran liegt es nicht.

"Habe jetzt rausgefunden, dass es an dem Reset der Felder liegt. Im Anhang eine Beispieldatei die 2 Varianten zeigt. Mir wäre eine Mischung aus beiden am liebsten. Felder werden resettet und die Ausnahmemarkierung wird für jede Zelle einzeln erzeugt."

Das Dokument ist soweit fertig. Das ist quasi das letzte Problem.
Angehängte Dateien
Dateityp: docm beispiel.docm (49,7 KB, 2x aufgerufen)

Geändert von Nilo87 (14.11.2017 um 15:14 Uhr).
Nilo87 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 14.11.2017, 17:38   #11
Gerhard H
MOF Guru
MOF Guru
Standard

Hallo Nilo,

ich bin mir nicht sicher, ob ich deine Problembeschreibung richtig verstanden habe, denn beide Varianten funktionieren fehlerlos. Aber in beiden Varianten werden die Inhaltssteuerelemente nur scheinbar nicht auf ihren Platzhaltertext zurückgesetzt, weil sie nämlich bereits den Platzhaltertext zeigen. Da hast du dich wohl beim Ändern der Platzhaltertexte selber optisch ausgetrickst, indem du sie nicht hellgrau wie üblich, sondern schwarz gefärbt hast.

Zum Beweis lass im angehängten Dokument folgendes Makro für die zweite Tabelle laufen. Es zeigt nur bei demjenigen Inhaltssteuerelement einen Unterschied, in das ich "Egon" eingetragen habe.
Code:

Sub zeigsmir()
Dim i As Integer

With ActiveDocument.Tables(2)
    For i = 2 To .Columns.Count
        MsgBox "Platzhaltertext:  " & .Cell(2, i).Range.ContentControls(1).PlaceholderText & vbLf & _
            "Eingetragener Text: " & .Cell(2, i).Range.ContentControls(1).Range.Text
        Next i
End With
End Sub
Und wenn du auf diese Tabelle dein Makro loslässt, siehst du, dass alles funktioniert.

Solltest du was anderes gemeint haben, erkläre nochmal, was du mit "resetten" meinst, und wo du zwischen den beiden Makros / Tabellen eine unterschiedliche Wirkung siehst.
Angehängte Dateien
Dateityp: docm beispiel2.docm (52,6 KB, 0x aufgerufen)

__________________

Gruß
Gerhard
Gerhard H ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 17.11.2017, 09:25   #12
Nilo87
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Hallo Gerhard,

habe das Dokument jetzt von Schreibschutz auf Formularschutz umgebaut und jetzt funktioniert alles so wie ich es wollte

Es hat jetzt noch eine Änderung gegeben:
Es sind jetzt "Bildinhaltssteuerelemente" in die Tabellen eingeflossen...
Könntest du mir noch schreiben wie der Code zum resetten dieses Steuerelementes heißt?

For i = 2 To .Columns.Count
Set akt_CC = .Cell(.Rows.Count, i).Range.ContentControls(1)

With akt_CC
Select Case .Type
Case 4 'Dropdownliste
.DropdownListEntries(1).Select
Case 8 'Checkbox
.Checked = False 'oder true, was dir besser gefällt
Case Else 'alles, wo man Text reinschreiben kann
.Range.Text = ""
End Select
End With
Next i

Das War ja dein ursprünglicher Code zum resetten der anderen Steuerelemente.


Grüße
Nilo87 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 17.11.2017, 11:20   #13
Gerhard H
MOF Guru
MOF Guru
Standard

Hallo Nilo,

Code:

With akt_CC
Select Case .Type
  Case 2 'Bild-Inhaltssteuerelement
  .Range.InlineShapes(1).Delete
  '....
End Select

__________________

Gruß
Gerhard
Gerhard H ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 17.11.2017, 12:39   #14
Nilo87
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Vielen Dank! Funktioniert Super.

Abschließend für alle nochmal die Lösung, wenn ihr
- in einem Formular
- in einer Tabelle
- eine neue Zeile einfügen wollt,
- Inhaltsteuerelemente dabei zurückgesetzt werden sollen
- und am Anfang eine Abfrage kommen soll, wie viele Zeilen erstellt werden

(Beachtet das die erste Spalte für die lfd. Nr genutzt wird!):

Code:

Sub NeueZeileeinfügen()
 
 Dim lAnzahl As String 
 Dim a As Long 
 Dim i As Integer
 Dim akt_CC As ContentControl

 Anf: 
 lAnzahl = InputBox("Wie oft soll das Makro laufen ?", , 3) 				'Abfrage Anzahl neuer Zeilen
 ' Prüfen ob eine Zahl eingegeben wurde 
 If IsNumeric(lAnzahl) Then 
 For a = 1 To CLng(lAnzahl) 

If ActiveDocument.ProtectionType <> wdNoProtection Then					'Dokumentenschutz entfernen
ActiveDocument.Unprotect Password:=""
End If

With ActiveDocument.Tables(2)
    .Rows(.Rows.Count).Select
        With Selection
            .Copy
            .PasteAppendTable
        End With
       .Cell(.Rows.Count, 1).Range.Text = .Rows.Count - 1 & "."                  'lfd. Nr. erste Spalte

    For i = 2 To .Columns.Count								'Inhaltssteuerelemente auf Default setzen
       Set akt_CC = .Cell(.Rows.Count, i).Range.ContentControls(1)
    
            With akt_CC
                Select Case .Type
  		 Case 2 'Bild-Inhaltssteuerelement
  		    .Range.InlineShapes(1).Delete
                 Case 4 'Dropdownliste
                    .DropdownListEntries(1).Select
                 Case 8 'Checkbox
                    .Checked = False 'oder true, was dir besser gefällt
                 Case Else 'alles, wo man Text reinschreiben kann
                    .Range.Text = ""
                End Select
            End With
    Next i
End With

If ActiveDocument.ProtectionType = wdNoProtection Then					'Dokumentenschutz hinzufügen
ActiveDocument.Protect Type:=wdAllowOnlyFormFields, NoReset:=True, Password:=""
End If

 Next a 
 Else 
     MsgBox "Bitte ein Zahl eingeben !", vbInformation 
 GoTo Anf 
 End If 
         
 End Sub
Vielen Dank an Gerhard
Schönes Wochenende

Geändert von Nilo87 (17.11.2017 um 12:47 Uhr).
Nilo87 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Ads
Antworten


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Besucher: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge anzufügen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist An.
Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:35 Uhr.


Partner und Co.
Access-Paradies -Alles rund um die Datenbank Microsoft Access -Code -Programme-Tools -Tipps   Kostenlose Tipps & Tricks, Downloads und Programme   www.kulpa-online.com - Tipps - Tricks - Tutorials - Meinungen - Downloads uvm...   vb@rchiv · Willkommen in der Welt der VB Programmierung   Access-Garhammer - Hier finden Sie jede Menge Beispiel-Datenbanken zu Access und mehr ...   mcseboard.de   Die Top Seite für Excel-VBA-Makros uvm.

Powered by: vBulletin Version 3.6.2 (Deutsch)
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

Copyright ©2000-2010 MS-Office-Forum. Alle Rechte vorbehalten.
Copyright ©Design: Manuela Kulpa ©Rechte: Günther Kramer
Eine Verwendung der Inhalte in anderen Publikationen, auch auszugsweise,
ist ohne ausdrückliche Zustimmung der Autoren nicht gestattet.
Beachten Sie bitte auch unsere Nutzungsbedingungen.