Nummering van Shapes

Status
Niet open voor verdere reacties.

DutchOirs

Gebruiker
Lid geworden
30 sep 2009
Berichten
720
Goedemiddag allen,

Zit met een vraagje over shapes in Word 2003.
Heb een Document gemaakt in Wordt met diverse autovormen en TextBoxen.
Totaal zijn er 29.
Bij openen van document moeten er diversen zichtbaar zijn en diversen onzichtbaar.

Aansturing door:
Code:
With MyDoc
  .Shapes(1).visible = True
  .Shapes(2).visible = True 
  .Shapes(3).visible = True
OF
  .Shapes(4).visible = False
  .Shapes(51).visible = False
End with
Dit werkt perfect, maar nu komt het probleem.
Als ik iets doe in het document, veranderd de volgorde van de Shapes.
b.v. Shapes(1) wordt Shapes(3)
Shapes(2) wordt Shapes(5)
enz. enz.

Is hier een oplossing voor?

Door b.v. de Shapes nummering vast te zetten?

Vr. Gr.

Dutch
 
Shapes kun je geen nummer geven; de nummering is de indexvolgorde. Dus wat je nu ook al gebruikt. Je kunt ze wél een Naam geven. Die is alleen lastig te achterhalen, want die zie je niet in de Eigenschappen. Wat ik dan meestal doe, is met een Inputbox de huidige naam uit te lezen, aan te passen in de variabele en terug te zetten. Daarna kun je de shape altijd aanroepen met de naam i.p.v. het index nummer.

De naam mag uiteraard bést een nummer zijn :).
 
Goedenavond OctaFish,

Heb even een vb-tje gemaakt met een paar vormen en een TextBox.

Tevens een InputBox, maar weet even nu niet hoe ik die namen kan opvragen.

Neem aan dat je wel een idee hebt :)

Dat de nummering de indexering is v/d vormen begrijp ik nu.

Maar wat is de mogelijkheid voor opvragen v/d namen?
 

Bijlagen

  • Shapes Name #1.doc
    41 KB · Weergaven: 30
Maar wat is de mogelijkheid voor opvragen v/d namen?
Wat dacht je hier van?
Code:
Private Sub CommandButton1_Click()
Dim shp As Shape, tmp As String

    For Each shp In ActiveDocument.Shapes
        shp.Select
        tmp = InputBox("", "", shp.Name)
        shp.Name = tmp
    Next shp

End Sub

Zelf zet ik de Stapmodus aan, zodat je kunt zien (als je het VBA venster niet beeldvullend gebruikt) welke shape is geselecteerd. In jouw geval heb je twee stoelen, die "chair1" en "chair3" heten. Die naam wordt dan in de Inputbox gezet, zodat je de naam kan aanpassen, en daarna wordt hij aan de shape gehangen.
 
Thanks, maar kom geen stap verder :-(

Hij zegt"
1.Select a shape in a drawing window.

2.On the Developer tab, in the Shape Design group, click Shape Name.

3.In the Shape Name dialog box, enter a name.

The ID of the shape is listed at the top of the Shape Name dialog box.

4.Click OK.

Oftewel:

1. Selecteer een vorm in een tekenvenster.

2. Klik op het tabblad Ontwikkelaar in de groep Vormontwerp op Vormnaam.

3. Voer in het dialoogvenster Vormnaam een naam in.

4. De ID van de vorm staat bovenaan het dialoogvenster Vormnaam.

Bij 2 al niet verder. Klik op het tabblad Ontwikkelaar in de groep Vorm ontwerp op Vorm naam ? waar

Gebruik Office 2003, dat zal het probleem zijn denk ik...

Oww had Octafish niet gezien, zal even proberen. Thanks
 
Laatst bewerkt:
Hoi Octafish,

Heb het werkende, maar blijven 2 vragen over :)

In het vb-tje #2

De vormen heten
1e: Stoel #1
2e: Cloud #1
3e: TB #2
4e: TB #1
5e: Divan1
Inderdaad als je de vormen of TextBoxen verplaatst veranderd aan naamgeving niets :) gelukkig 1e goal bereikt :)

1e vraag, bij name opvragen:

1e selecteert ie Stoel #1 en geeft naam Stoel #1 = ok
2e selecteert ie nog steeds Stoel #1 maar geeft de naam Cloud #1 = NIET Ok
3e selecteert ie Cloud #1 en geeft als naam TB #2 = NIET OK
4e selecteert ie TB #2 en geeft als naam TB #1 = NIET OK
5e selecteert ie TB #1 en geeft als naam Divan1 = NIET OK
In feite na de 1e loopt ie eentje achter.
Namen veranderen werkt ook


2e vraag zie vb-tje. Om de vormen (on)zichtbaar te maken werkt niet meer
 

Bijlagen

  • Shapes Name #2.doc
    45,5 KB · Weergaven: 29
Laatst bewerkt:
Je hebt de code een beetje wonderlijk aangepast. Probeer deze variant eens
Code:
Private Sub CommandButton1_Click()
Dim shp As Shape, tmp As String, myDoc As Document

    Set myDoc = ActiveDocument
    For Each shp In myDoc.Shapes
        With shp
            .Select
            Application.ScreenRefresh
            tmp = InputBox("", "", .Name)
            .Name = tmp
            If .Visible = msoFalse Then .Visible = msoTrue Else .Visible = msoFalse
        End With
    Next shp
    CommandButton1.Select
    Application.ScreenUpdating = True

End Sub
 
Hoi Octafish,

Super werkt. ScreenRefresh doet wonderen :)

Dat zichtbaar of niet zichtbaar werkt in die lus.

Hoe nu als ik een willekeurige vorm wil zichtbaar maken. Met aangeven van naam?
Deed het tot nu toe met de index nummering begrijp ik.

Kom er morgen wel weer op terug. Ga nu de luiken sluiten :)

Alvast bedankt voor de hulp.

Dutch
 
Goedemorgen Octafish,

Heb er nog eens over nagedacht over je laatste oplossing.

Kom hiermee helaas geen stap verder, want deze oplossing werkt ook in een lus.

Wat ik in het begin aangaf is dat de indexering veranderd in het document.
Dus dacht toen als je met een naam v/d vorm kan aangeven welke zichtbaar moeten zijn en welke niet, je dit probleem kon omzeilen.

Dus gaan nog even verder zoeken:
-We weten nu hoe je de naam van een vorm kan opvragen.
-We weten nu hoe je de naam van een vorm een andere naam kan geven.

Wat we nog niet weten is: hoe je met een naam, deze vorm zichtbaar kan maken en onzichtbaar.
 
Goedemorgen OctaFish & Edmoor,

Ben eruit, wat een goede nachtrust al niet kan doen :)
Code:
Private Sub OctaFish2()                                 ' maakt desbetreffende Shape Onzichtbaar of Zichtbaar
  Dim Naam As String
  
  'ActiveDocument.Shapes("TB #2").Visible = True        ' optie 1 rechtstreeks
  
  Naam = "Divan1"
  ActiveDocument.Shapes(Naam).Visible = True            ' optie 2 via een variabele
  
End Sub
Heb hierin twee opties, één met een variabele en één zonder variabele.

Het werkt dus ga het proberen te verwerken in m'n document.
Weet nu hoe ik de namen kan opvragen van alle 29 vormen en TextBoxen.
En weet nu ook hoe je een shape "met naam" onzichtbaar en zichtbaar kan maken.

Beidde bedankt voor het meedenken.

Vr. Gr.

Dutch
 

Bijlagen

  • Shapes Name #4.doc
    48,5 KB · Weergaven: 26
Succes! Je had het in eerste instantie over 'diverse' shapes. Als je ze op basis van een kenmerk zichtbaar of onzichtbaar wilt maken, kun je dat doen door dat kenmerk in de naam op te nemen met bijvoorbeeld twee letters. Je kunt dan op basis van die twee letters bepalen of een object zichtbaar moet zijn of niet.
Code:
Private Sub CommandButton1_Click()
Dim shp As Shape, tmp As String, myDoc As Document

    Set myDoc = ActiveDocument
    For Each shp In myDoc.Shapes
        With shp
            .Select
            Application.ScreenRefresh
            Select Case Left(shp.Name, 2)
                Case "G1"
                    .Visible = msoFalse
                Case "G2"
                    .Visible = msoTrue
                Case "G3"
                    .Visible = msoFalse
            End Select
        End With
    Next shp
    Application.ScreenUpdating = True
    CommandButton1.Select

End Sub

Ik zou dan een aparte macro maken om de namen van de shapes in te stellen :).
 
Inderdaad OctaFish,

Degene die zichtbaar moeten zijn bij opstarten document zou je hiermee zichtbaar maken en degene die niet zichtbaar moeten zijn ook dus niet.
Dan later per gebeurtenis kan je desbetreffende vorm (met naam) zichtbaar maken.

Thanks en fijne dag nog
 
Goedemorgen OctaFish,

Werkt allemaal perfect.. nogmaals bedankt..

Om puntjes op de i te zetten had ik nog een klein vraagje.
Gebruik een Teller om ook te weten welk indexnummer een vorm heeft.
Code:
Private Sub OctaFish1()
  Dim shp As Shape, tmp As String, myDoc, i As Integer
  Set myDoc = CreateObject(ActiveDocument.FullName)
  i = 0
  For Each shp In ActiveDocument.Shapes
    i = i + 1
  '  Application.InputBox = "Indexnr = " & i
    MsgBox ("IndexNr. =  " & i)
    shp.Select
    Application.ScreenRefresh
    tmp = InputBox("", "", shp.Name)
    shp.Name = tmp
  Next shp
End Sub

Zoals je ziet doe ik het met een MsgBox. De vraag is, kan je in deze InputBox ook tekst neer zetten, zodat de Teller daar verschijnt?
Scheelt weer een klik met de MsgBox.

Vr. Gr.
Dutch
 
Dat kan, maar hoe moet dat er dan uitzien volgens jou?
 
Als je nu InputBox opent zie je alleen een venster met een Invoerveld + een knop voor Annuleren + een knop voor OK.

Wat ik nu als MessageBox neerzet
Code:
   MsgBox ("IndexNr. =  " & i)
Zou dan in een venster op het InputBox moeten zien. Tevens met de mogelijkheid om hier dan "IndexNr. = & i" in te voeren zodat dit venster dit automatisch laat zien.

Gr.
Dutch
 
Dat kán wel, maar bedenk wel dat een Inputbox een andere functie heeft dan een MsgBox. Een Inputbox gebruik je om input van de gebruiker te vragen die je verderop weer gebruikt. Bijvoorbeeld een objectnaam of een datum. Zodra je daar teksten gaat neerzetten als: "IndexNr. = 2" is de functionaliteit van de standaardwaarde weg, want je gebruikt die tekst dus nergens. InputBox("", "", shp.Name & i) Geeft je als defaultwaarde in de inputbox bijvoorbeeld "Stoel2", en dat is bruikbaar als naam voor een shape. "Stoel, IndexNr. = 2" is dat niet.
Code:
    shp.Select
    Application.ScreenRefresh
    tmp = InputBox("Typ hier de objectnaam", "IndexNr. " & i, shp.Name)

Met deze code krijg je een Inputbox die in de titel IndexNr. # laat zien, als prompt de tekst "Typ hier de objectnaam" en als voorgestelde waarde de naam van de shape. En verder zou ik niet gaan als ik jou was.
 
Hoi OctaFish,

Ja begrijp ik, maar bedoelde ook niet dat in het Invoerveld v-d InputBox dit zou komen, maar in een extra venster in de InputBox.
Het Invoerveld moet gehandhaafd blijven om de namen op te vragen en evt. te veranderen.
Het gaat om het gegeven van het indexnummer om deze als `extra` zichtbaar te laten zien.
Wat ik nu dus doe met een MsgBox.
 
Zoals ik al zei, kan dat ofwel in de Prompt, ofwel in de titel.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan