• 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.

Rijhoogte automatisch aanpassen wanneer er formules gebruikt worden

Kadeha

Gebruiker
Lid geworden
26 apr 2018
Berichten
9
Beste experten,

Ik richt mij tot jullie omdat ik er met copilot toch niet uitgeraak en mijn kennis over vba in excel is onbestaande.
Ik heb een excelbestand met 2 tabbladen. Op het eerste tabblad wordt alle data ingevuld, met dit tabblad moet er niets gebeuren. Het tweede tabblad 'AVA' is een formulier met een bepaalde opmaak (oorspronkelijk word), de bedoeling is dat de minimum rijhoogtes blijven maar dat ze wel vergroten wanneer de tekst veel meer is.

Maar omdat ik met formules werk gaat dit niet omdat excel natuurlijk alleen mijn formule ziet staan als inhoud. De formule haalt de gegevens uit het eerste tabblad, in dit voorbeeld is het een 1 op 1 relatie, bijv: =DATA!C4 maar soms ook met een ALS bijv: =ALS(DATA!C1="Er zijn geen varianten toegestaan";"";DATA!C1)

Kan er mij iemand helpen?
 

Bijlagen

Als je met vba wil werken is de eerste voorwaarde dat er geen samengevoegde cellen zijn.
 
Het kan WEL met VBA en samengevoegde cellen maar wel via een workaround.
Volgende code is voor cel A5
Code:
Sub tst()
    With Sheets("AVA")
        .Columns(27).ColumnWidth = 107
        .Range("AA50").Value = .Range("A5").Value
        With .Range("AA50")
            .WrapText = True
            .EntireRow.AutoFit
            rwHeight = .RowHeight
        End With
        .Columns(27).ColumnWidth = 8.33
        .Range("A5").RowHeight = rwHeight
        If .Range("A5").RowHeight < 57 Then .Range("A5").RowHeight = 57
    End With
End Sub
 
Het kan WEL met VBA en samengevoegde cellen maar wel via een workaround.
Volgende code is voor cel A5
Code:
Sub tst()
    With Sheets("AVA")
        .Columns(27).ColumnWidth = 107
        .Range("AA50").Value = .Range("A5").Value
        With .Range("AA50")
            .WrapText = True
            .EntireRow.AutoFit
            rwHeight = .RowHeight
        End With
        .Columns(27).ColumnWidth = 8.33
        .Range("A5").RowHeight = rwHeight
        If .Range("A5").RowHeight < 57 Then .Range("A5").RowHeight = 57
    End With
End Sub
Dag Warme bakkertje, ik heb jouw code gekopieerd en in de programmacode geplakt, opgeslaan als .xlsm, de tekst van in die cel eens weggedaan en er opnieuw ingezet. Ik denk dat ik iets verkeerd doe want het werkt niet.
 
Heb je op ALT-F8 gedrukt, de macro geselecteerd en dan op uitvoeren geklikt ?
Of de code rechtstreeks vanuit de VB-Editor laten lopen ?
 
Het kan ook op deze manier, werkt na hat invullen van de tekst op blad data.
 

Bijlagen

Heb je op ALT-F8 gedrukt, de macro geselecteerd en dan op uitvoeren geklikt ?
Of de code rechtstreeks vanuit de VB-Editor laten lopen ?
Ja :-), gelukt. Dit is al een hele stap vooruit. Ik ga ook naar emields zijn idee eens kijken. Dus ik ga de topic nog niet direct als opgelost zetten, want het zou kunnen dat ik hier nog eens op terugkom.
 
Je kan de code ook in het Worksheet_Activate event zetten van werkblad AVA zodat de code atomatisch loopt wanneer je het werkblad AVA activeert.
Code:
Private Sub Worksheet_Activate()
    Application.ScreenUpdating = False
        Columns(27).ColumnWidth = 107
        Range("AA50").Value = Range("A5").Value
        With Range("AA50")
            .WrapText = True
            .EntireRow.AutoFit
            rwHeight = .RowHeight
        End With
        Columns(27).ColumnWidth = 8.33
        Range("A5").RowHeight = rwHeight
        If Range("A5").RowHeight < 57 Then Range("A5").RowHeight = 57
End Sub
 
Je kan de code ook in het Worksheet_Activate event zetten van werkblad AVA zodat de code atomatisch loopt wanneer je het werkblad AVA activeert.
Code:
Private Sub Worksheet_Activate()
    Application.ScreenUpdating = False
        Columns(27).ColumnWidth = 107
        Range("AA50").Value = Range("A5").Value
        With Range("AA50")
            .WrapText = True
            .EntireRow.AutoFit
            rwHeight = .RowHeight
        End With
        Columns(27).ColumnWidth = 8.33
        Range("A5").RowHeight = rwHeight
        If Range("A5").RowHeight < 57 Then Range("A5").RowHeight = 57
End Sub
Maar dat is gewoon de kers op de taart. Merci daarvoor.

Mag ik nog 1 bijvraagje stellen. Welk deel van de code of hoe moet ik het aanpakken om een 2e of een 3e cel zo te laten aanpassen? Hier gaat het nu om A5, maar in mijn echt document heb ik zo meerdere cellen.
 
Een pasklaar antwoord hierop geven kan ik niet omdat er meerdere factoren meespelen.
Hiervoor zou ik de originele opmaak van werkblad AVA moeten zien en om welke cellen het gaat.
 
Hierbij een algemeen toepasbare functie om de celhoogte van samengestelde cellen aan te passen.
 

Bijlagen

Een pasklaar antwoord hierop geven kan ik niet omdat er meerdere factoren meespelen.
Hiervoor zou ik de originele opmaak van werkblad AVA moeten zien en om welke cellen het gaat.
Ja, natuurlijk. Ik zet bij deze het volledige document erbij. De bedoeling is dat het eerste tabblad DATA wordt ingevuld en dat in het tabblad AVA voor meerdere cellen de minimumhoogte van de rijhoogte behouden blijft, maar voor de cellen waarbij er meer tekst kan getypt worden moet de rijhoogte mee aanpassen.
 

Bijlagen

Van welke cellen moet de rijhoogte aangepast kunnen worden en wat is daarbij de minimum rijhoogte?
En het zou handig zijn als de minimum rijhoogte de huidige rijhoogte is, dan hoeft die niet apart opgegeven te worden. Dan zou je kunnen volstaan met een algemene functieaanroep, bijvoorbeeld:
Code:
CelhoogteAanpassen Range("A56")
CelhoogteAanpassen Range("B57")
 
Laatst bewerkt:
Van welke cellen moet de rijhoogte aangepast kunnen worden en wat is daarbij de minimum rijhoogte?
En het zou handig zijn als de minimum rijhoogte de huidige rijhoogte is, dan hoeft die niet apart opgegeven te worden. Dan zou je kunnen volstaan met een algemene functieaanroep, bijvoorbeeld:
Code:
CelhoogteAanpassen Range("A56")
CelhoogteAanpassen Range("B57")
Dat zou kunnen, denk ik, maar soms is het ingewikkeld omdat er gegevens van uit verschillende cellen uit DATA komen, en ik de cel in de AVA bij elkaar gezet heb terwijl de titel in de kolom A een samengevoegde cel is. Ik heb in dit bestand de minimum rijhoogtes ingevuld. Maar als jouw idee zou kunnen, dan zou dat wel superhandig zijn.
 

Bijlagen

Bij het activeren van werkblad AVA worden de rijhoogtes automatisch aangepast. De minimum rijhoogte is de huidige rijhoogte. En ik neem aan dat je A56 bedoelde in plaats van B56.
 

Bijlagen

Bij het activeren van werkblad AVA worden de rijhoogtes automatisch aangepast. De minimum rijhoogte is de huidige rijhoogte. En ik neem aan dat je A56 bedoelde in plaats van B56.
Waaaauw!!! Ik hoop dat ik het in woorden kan omschrijven hoe dankbaar ik je ben. Dit werkt :) !!!

Ik ken niets van VBA en bewonder jullie kennis, en ik wil jullie bij deze allemaal bedanken om mij te helpen, Ahulpje, Warme Bakkertje en emields, een dikke merci voor jullie bijdrage.
 
Bij het activeren van werkblad AVA worden de rijhoogtes automatisch aangepast. De minimum rijhoogte is de huidige rijhoogte. En ik neem aan dat je A56 bedoelde in plaats van B56.
Dag AHulpje, ik heb nog een vraagje voor jouw oplossing. Als ik bijvoorbeeld in DATA in cel C9, heel veel tekst typ, dan zal de cel in AVA B46 wel vergroten. Maar als ik nadien terug minder inhoud typ dan keert de oorspronkelijke rijhoogte niet terug. Doe ik iets verkeerds?
 
Nee, je doet niets verkeerd. Met dit scenario houdt de macro helaas geen rekening. De oorspronkelijke rijhoogte is de rijhoogte die de macro aantreft. En die is door je eerste actie vergroot, bij de tweede actie wordt uitgegaan van de op dat moment bestaande rijhoogte. De minimale rijhoogte per aan te passen cel kan als parameter meegeven worden aan de functie die de rijhoogte bepaalt. In bijgaande versie is dat geïmplementeerd. Kijk maar of je dat handig vindt.
 

Bijlagen

Nee, je doet niets verkeerd. Met dit scenario houdt de macro helaas geen rekening. De oorspronkelijke rijhoogte is de rijhoogte die de macro aantreft. En die is door je eerste actie vergroot, bij de tweede actie wordt uitgegaan van de op dat moment bestaande rijhoogte. De minimale rijhoogte per aan te passen cel kan als parameter meegeven worden aan de functie die de rijhoogte bepaalt. In bijgaande versie is dat geïmplementeerd. Kijk maar of je dat handig vindt.
De max AHulpje. Dit is het gewoonweg :-). Nogmaals en hopelijk voor de laatste keer bedankt voor je hulp.
 
Terug
Bovenaan Onderaan