Besturingselement in een cel van een tabel meenemen

Status
Niet open voor verdere reacties.

JohanMarscha

Nieuwe gebruiker
Lid geworden
1 apr 2020
Berichten
4
Hallo, Ik probeer een besturingselement (pull down menu) die ik in een cel van een tabel heb gemaakt zo te maken dat deze, wanneer ik op het plusje links naast de tabel klik om een rij toe te voegen dat deze het besturingselement meeneemt/kopieert naar de volgende rij. De rij doornummering heb ik wel voor elkaar gekregen maar dat die het besturingselement mee neemt in de nieuwe rij niet. Ik heb van alles al geprobeerd maar ik kom er niet uit.
Hopelijk weet iemand hier een oplossing voor.
In de bijlage een knipsel van hetgeen waar het om gaat.

Probleen word.png
 

Bijlagen

  • Test.docx
    29,9 KB · Weergaven: 52
Laatst bewerkt:
met een plaatje kan men hier niet zo veel, plaats aub een voorbeeldbestand.
 
Ik heb van alles al geprobeerd maar ik kom er niet uit.
Da's een beetje vaag, vind je niet? Als een dokter dat tegen me zou zeggen, zou ik doorvragen :). Dus: wat heb je allemaal al geprobeerd? Om je alvast een idee te geven wat je niet mag verwachten van Word: dat het element wordt meegenomen als je een nieuwe rij toevoegt. Iets wat met de nummering dus wél kan, omdat je daarmee a.h.w. een celeigenschap meeneemt, en een keuzelijst is een object, en dat kan dus alleen maar als je dat programmeert in VBA. Als een macro óók onder 'van alles' valt, dan zien we uiteraard graag ook die macro :).
 
Ik ben echt een beginner wat betreft Word. Ik heb Word alleen nog maar gebruikt voor standaard tekst intypen, dus een tabel maken met daarin een keuze menu was voor mij al een behoorlijke prestatie en het heeft mij al de nodige uurtjes gekost:D Macro heb ik wel eens van gehoord, maar wat ik er mee kan en hoe ik dat hier kan toepassen is voor mij een raadsel. Geen idee hoe ik moet beginnen. Hopelijk kan iemand mij hierin op weg helpen.
 
Om te beginnen met macro's is dit an sich wel een aardig voorbeeld, want je kunt een groot deel van de noodzakelijke handeling dus wel opnemen. Probeer maar eens. Om te beginnen zou ik, als je dat nog niet gedaan hebt, het tabblad <Ontwikkelaar> aanzetten in het lint, want dat is (in mijn ogen dan) onmisbaar in elke Office applicatie. En die staat dus standaard uit, mafketels bij Microsoft :). Als dat aanstaat, kun je met de knop <Macro opnemen> een macro maken die dus het grootste deel van het werk uitvoert. Wat je moet doen is simpel: selecteer de onderste rij van de tabel (links van de tabel gaan staan met de muis, en klikken) en dan <Ctrl>+<c>, Pijl naar beneden, gevolgd door <Ctrl>+<v>. Kopieer de rij, en plakken. Vervolgens kun je de macro stoppen. Wat de macro doet, is een kopie maken van de rij, inclusief je keuzelijst, en er onder plakken.

Zou je de macro nu gelijk weer uitvoeren, dan krijg je een foutmelding. Dat komt doordat de macro alles heeft opgeslagen, behalve het selecteren. Een macro kan namelijk geen muishandelingen opslaan. Wil je de macro bekijken, dan druk je op <ALt>+<F11> om de macro te lezen. Dan zie je dit:
Code:
Sub Macro2()
    Selection.Copy
    Selection.MoveRight Unit:=wdCharacter, Count:=1
    Selection.PasteAndFormat (wdListContinueNumbering)
End Sub
Je kunt de macro testen door op <F5> te drukken, of de knop <Sub/Userform uitvoeren>.
Hij begint dus gelijk met het Copy commando, niet met selecteren. Je zult dus eerst een rij moeten selecteren voordat je de macro uitvoert.

Daarnaast weet de macro dus niet wannéér hij wel mag draaien, en wanneer niet. Dus daarvoor moeten we ook nog wat doen. Ik heb dan ook de volgende macro voor je gemaakt:

Code:
Sub mcrCopyRij()
Dim aDoc As Document
Dim objTable As Word.Table
Dim numCol As Integer, numRow As Integer, curTabIdx As Integer

    Set aDoc = ActiveDocument
    curTabIdx = aDoc.Range(0, Selection.Tables(1).Range.End).Tables.Count
    Set objTable = aDoc.Tables(curTabIdx)
    numCol = objTable.Columns.Count
    numRow = objTable.Rows.Count
    With Selection
        If .Information(WdInformation.wdWithInTable) = True Then
            ''If .Cells(1).RowIndex = numRow And .Cells(1).ColumnIndex = numCol Then
            If .Cells(1).RowIndex = numRow Then
                .Collapse Direction:=wdCollapseStart
                .SelectRow
                .Copy
                .MoveDown Unit:=wdLine, Count:=1
                .PasteAndFormat (wdListContinueNumbering)
            End If
        End If
    End With
End Sub

Deze macro is een stuk intelligenter; om te beginnen wordt hij uitgevoerd in de actieve tabel, wat handig is als je meerdere tabellen hebt. Daarnaast kijkt hij of de cursor überhaupt wel in een tabel staat (niet onbelangrijk), en of hij in de laatste rij staat. Anders wordt er een rij midden in de tabel ingevoegd. Kan de bedoeling zijn, maar ik vermoed van niet. Ik heb een extra optie ingebouwd die nu als commentaar is gemarkeerd (de groene regel) die een check doet op laatste rij + laatste cel. Als je die liever hebt, moet je bij die regel de twee enkele quootjes weghalen, en minstens één quootje zetten voor de volgende regel.

Ook hiervoor geldt: de macro kun je starten met F5. Voor het gemak kun je de macro ook aan een toets toewijzen. In het document heb ik dat gedaan, en hangt de macro aan de knop <F10>. Op die manier is het heel makkelijk om de macro uit te voeren. Kijk maar eens of je het wat vindt.
 

Bijlagen

  • Test.docm
    35,3 KB · Weergaven: 60
Het tabblad ontwikkelaar heb ik aangezet. Deze had ik nodig voor het maken van het pulldown menu.
Ik zal vanavond na het werk eens gaan spelen met die macro en zal mijn bevindingen hier delen. Het ziet er wel spannend uit voor een leek.:D
Bedankt voor de snelle reactie en de genomen moeite:thumb:
 
Die macro kun je in zijn geheel kopiëren, en in de VBA module (knop <Visual Basic>) plakken in een module. Heb je nog geen module, dan kun je dat doen via <Invoegen>, <Module>. Heb je iets aan die macro voor andere tabellen in andere documenten, zet hem dan in de Normal.Dotm. Is hij alleen voor het huidige document, dan kun je hem ook in dit document zetten. Het gebruik is dan wel een klein beetje anders, want om een macro in de Normal te zetten, moet er wel een macro module in de Normal zitten. Meestal krijg je die pas als je één keer een macro hebt opgenomen en die hebt opgeslagen in de Normal sjabloon. Het voordeel hiervan is, dat je de macro kunt hergebruiken, en je kunt het eigenlijke document nog steeds gebruiken zonder macro's. En dat is weer handig als je het document moet delen met anderen, want je hebt geen controle over hoe andere gebruikers hun macro-instellingen hebben staan.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan