• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Hoe zwaar is de camerafunctie van Excel?

Status
Niet open voor verdere reacties.
Voortbordurend op post #39 van snb kom ik tot het volgende.
het éénmalig een onbeperkt aantal gedefinieerde gebieden vast te leggen gaat waarschijnlijk niet werken omdat
het blad Aanbieding waarschijnlijk niet statisch is??
Sub M_snb heb ik dan maar in de code SelectionChange van Blad Offerte gezet.

@snb, heeft deze code dan nog voordelen ?

Het enigste wat me maar niet lukt is het dynamisch maken van Shape(5).Height
 

Bijlagen

Natuurlijk is het blad 'aanbieding' (in ieder geval de struktuur van hoofdstukken) statisch.
Dat is ook de reden dat TS er bij een begroting gebruik van wil maken en zichtbaar wil maken.
Als er gegevens in bald 'aanbieding' worden gewijzigd, heeft dat geen invloed op de struktuur van het blad, en dus ook niet op de gegevens die in werkblad 'begroting' moeten worden getoond.
Selectionchange is overigens een gebeurtenis waar je zoveel mogelijk van af moet zien te blijven; die wordt veel te vaak en dus overbodig uitgevoerd.
 
De 'structuur' van het blad 'aanbieding zal zeker statisch zijn.
Maar wat als er in een paragraaf rijen worden toegevoegd.
De structuur blijft hetzelfde maar het 'benoemd bereik' veranderd niet zonder het aanroepen van M_snb.
 
Laatst bewerkt:
Zoals je in mijn laatste versie kunt zien zie ik geen enkele reden om in een gebied rijen toe te voegen. Tekst kan gewoon toegevoegd worden in de tekstrij van het gebied.
Maar in het geval van zo'n onverstandige aktie, kan de macro opnieuw gedraaid worden om de eenmalige wijzizing van benoemde gebieden vast te leggen (alles beter dan een extreem volatiele gebeurtenis)

PS. 3e persoon enkelvoud tegenwoordige tijd eindigt immer op t.
 
Laatst bewerkt:
Bedankt voor de les nederlands.
Toch nog een vraag:
Hoe krijg ik de hoogte van de shape fatsoenlijk ingesteld afhankelijk van de hoeveelheid tekst.(regels)
 
Bv.

Code:
shapes(1).textframe.autosize =true
 
hallo Harry,

Dan krijg ik de foutmelding 'deze eigenschap of methode wordt niet ondersteund door dit object'
Zelf heb ik al van alles geprobeerd, niets lijkt te werken.
 
Zolang TS het werkblad niet beter opbouwt, is dit nog niet aan de orde.
 
Ik geloof dat ik er goed aan doe om even aan te geven wat de achtergronden zijn van hoe ik het document tot nu toe heb opgebouwd.

Mijn bedoeling is om een 2.0 versie te maken van een document dat al sinds 2000 in de lucht is.
Ik heb het beheer hiervan in 2007 overgenomen, er veel aan aangepast maar de basisstructuur steeds gelijk gelaten.
Ik heb buiten mijzelf nog iets van 10 gebruikers.
Het merendeel van deze gebruikers krijgt flink de hik (en gaat onaardig tegen mij doen) als ik teveel van het al meer dan 20 jaar platgetreden pad afwijk.

Vandaar dat een aantal zaken (ook al zijn/lijken ze onhandig) er volgens mij tóch in moeten blijven.

1e: De kolom A met de e-tjes en i-tjes. Sinds 2000 de trigger om het printgebied te definiëren.
Er zijn tal van andere methoden voor te bedenken, maar doorgaan met de bestaande methode is de enige waar ik geen weerstand mee oproep.

2e: Het gebruik van samengevoegde cellen aan de begroting kant.
Lijkt in het het deel (voorbeeld) dat jullie hebben gezien onnodig, maar ik weet wat er verder komt.
Als ik deze samengevoegde cellen uit elkaar zou halen en alle kolommen een werkbare breedte geven zou er een veel grotere schermbreedte nodig zijn.
(en zou het gebruik van cameraplaatjes naast het werkgebied zinloos zijn want buiten beeld)
Overigens zou het wel wat minder kunnen dan dit, ik denk dat ik er onder invloed van jullie vermaningen wel een aantal uit ga halen.

3e: Het gebruik van samengevoegde cellen aan de aanbieding kant.
De aanbieding moet een prettig leesbaar technisch stuk worden. Dit houdt in dat er (op basis van de begroting gemaakte keuzes) tekst wordt gegenereerd die een layout moet hebben.
Ook moeten er zo nu en dan lijstjes en opsommingen komen.
Om al dat soort dingen goed te kunnen realiseren werken we met meerdere kolommen in het tekstgebied.

4e: Er moeten zowel aan de begrotingzijde als aan de aanbiedingzijde altijd regels kunnen worden toegevoegd.
In onze aanbiedingen zit namelijk vaak een (soms grote) component aan niet standaard zaken die door de gebruiker makkelijk toegevoegd moet kunnen worden.

De code die in mijn beleving tot nu toe het mooist in mijn "plaatje" past is die van Ad1957 in #38

Ik hoop dat ik één en ander zo wat duidelijker heb gemaakt
 
@Ad,

Je bent een beetje deze draad aan het kapen.
Maak een eigen draad, met een eigen voorbeeldbestand.
Dan kunnen we daarin verder gaan.
 
Eerst ga ik nog maar eens verder zoeken.
Mocht het me zelf niet lukken dan zal ik een eigen topic starten.
 
nog een poging om mijn versie onder de aandacht te brengen
 

Bijlagen

Werkt volgens mij ook perfect.:thumb:
Alleen de code is voor mij gedeeltelijk niet te volgen.(nog steeds te weinig kennis)
 
het bereik van de camera wordt gestuurd door de gedefinieerde naam "Bereik".
Die ene macro moet enkel linkerbovenhoek en die gedefinieerde naam aanpassen.
De grootte van de camera is gewoon in verhouding tot dat bereik en die schaal kan je aanpassen.
Dus waar de macro van SNB éénmalig vaste bereiken maakt, gaat deze dat gewoon iedere keer zelf actief opzoeken.

Code:
Sub Camera(Rij)

     Dim Rij_B, Rij_A1, Rij_A2, sHoofdstuk, shA, shB, Cam, cB

     Set shB = Sheets("Begroting")
     Set shA = Sheets("Aanbieding")
     Set Cam = Sheets("Begroting").Shapes("Camera1")

     '**** KLIK JE IN BEGROTING OP EEN ANDER HOOFDSTUK ???? *******************
     With shB.UsedRange.Columns(3)
          If Rij < 10 Or Rij >= .Row + .Rows.Count + 5 Then MsgBox "buiten bereik": GoTo fout
     End With
     Rij_B = Evaluate(Replace("=AGGREGATE(14,6,ROW(Begroting_§)/((LEFT(Begroting_§,1)=""§"")*(ROW(Begroting_§)<=#)),1)", "#", Rij))     'rij waar het hoofdstuk staat
     If Rij_B = Rij_Begroting Then Exit Sub     'identiek aan vorige keer = stoppen

     '****** MET WELK HOOFDSTUK IN AANBIEDING STEMT DIT OVEREEN *************
     Rij_Begroting = Rij_B
     Set cB = shB.Cells(Rij_B, "AD")     'cel waar straks de camera wordt gezet
     sHoofdstuk = shB.Cells(Rij_B, "C").Value     'huidig hoofdstuk
     Rij_A1 = Application.Match(sHoofdstuk, shA.Columns("B"), 0)     'startrij in Aanbieding
     If Not IsNumeric(Rij_A1) Then MsgBox "Hoofdstuk niet gevonden", vbInformation, sHoofdstuk: GoTo fout
     Rij_A2 = shA.Cells(Rij_A1, "B").End(xlDown).Row - Rij_A1
     If Rij_A2 > 20 Then MsgBox "teveel regels voor dat hoofdstuk", vbInformation, sHoofdstuk: GoTo fout
     shA.Cells(Rij_A1, 1).Resize(Rij_A2, 12).Name = "Bereik"     'benoemd bereik "bereik" = je camerastandpunt

     '********* PAS DE CAMERA AAN ****************************************
     With Cam
          .Visible = True
          .Top = cB.Top     '
          .Left = cB.Left
          .ScaleHeight 1.2, msoTrue, msoScaleFromTopLeft     'zowel hoogte als breedte een ratio van 1.2 tov origineel (zelf aan te passen)
          .ScaleHeight 1.2, msoTrue, msoScaleFromTopLeft
          Application.ScreenUpdating = True
     End With
     Exit Sub

fout:
     Cam.Visible = False
     Application.ScreenUpdating = True
End Sub
 
Laatst bewerkt:
Deze code ben ik uiteindelijk toch wel van gecharmeerd.
> heeft blijkbaar niet per sé een lege regel nodig per gebied
>kon door mij qua layout/omvang van het camera plaatje vrij makkelijk door mij worden aangepast.
>Lijkt niet met een shapes volgorde te werken.
In de versie van Ad1957 is dat tricky in combinatie met bestaande shapes (de knoppen bovenaan zijn shape 1 tm 3 en het cameraplaatje is dan shape 4) en ik hield mijn hart vast voor het geval ik later meer knoppen bij zou willen maken.

Puntje dat ik wat minder vind is dat het geheel over 1 code en 3 macro's lijkt te zijn verdeeld. (maar als het werkt dan werkt het natuurlijk :))
Laatste punt dat ik wel echt een vervelende vind is dit: Als ik een cameraplaatje wegklik heb ik tot nu toe geen manier gevonden om de boel weer aan de praat te krijgen.
 
Laatst bewerkt:
1. Geef de shape een toepasselijke naam bijv. shape("Camera")
 
nu maakt de macro een camera aan, als die niet bestaat, maar in principe als je met de linkermuisknop op de camera klikt, dan wordt die onzichtbaar, dus kan die shape normaal gezien niet meer "verdwijnen".
 

Bijlagen

@AD1957

Nog op je vraag.
Code:
.Shapes(5).Height = Blad2.Range(Replace(c00, "=aanbieding!", "")).Height
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan