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

Aanpassen VBA

Status
Niet open voor verdere reacties.

boomen

Gebruiker
Lid geworden
17 sep 2014
Berichten
275
Hallo

Ik zit met het volgende.
Ik heb een aantal tabellen voor een kostprijsberekening waarbij bestrijdingsmiddelen aan de orde komen.
Nu heb ik al eerder op dit Forum gezeten en een mooie code gekregen die tot voor kort goed werkte!
Ik ben zelf al begonnen met een studieboek voor VBA en dit heeft mij de mogelijkheid gegeven wat simpelere codes te maken. Nu alleen de "complexe" code niet werkt kann ik hem niet aanpassen.
Ik Loop tegen 2 concrete Problemen aan.

1. De code kopieerd alleen het 1e deel van de tabel de formules.

2. In kolom D werk ik met gegevensvalidatie en als ik na het invoegen van rijen 1 vd 2 bovenste waarde pak rekent hij ook de 1e tabel niks uit.

Hieronder de code en 1 vd tabellen die hij aanpast. (nummer 2). Als iemand een oplossing weet, geef aub aan wat er verändert in de code zodat ik deze beter begrijp.

Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Target.Column = 1 And InStr("2.3.4.5.7.", Target.Value) Then
        i = InputBox("hoeveel rijen invoegen?")
        If i > 0 And IsNumeric(i) Then
            Target.Offset(4).Resize(i, 18).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
            Target.Offset(4, 4).Resize(i, 1).FormulaR1C1 = "=R" & Target.Row + 2 & "C7*VLOOKUP(RC[-1],Bestrijdingsmiddelen,7)"
            Target.Offset(4, 11).Resize(i, 1).FormulaR1C1 = "=R" & Target.Row + 2 & "C14*VLOOKUP(RC[-1],Bestrijdingsmiddelen,7)"
            Target.Offset(4, 6).Resize(i, 1).FormulaR1C1 = "=RC[-2]*VLOOKUP(RC[-3],Bestrijdingsmiddelen,3)"
            Target.Offset(4, 13).Resize(i, 1).FormulaR1C1 = "=RC[-2]*VLOOKUP(RC[-3],Bestrijdingsmiddelen,3)"
        End If
    End If
    Cancel = True
End Sub

En zoals beloofd tabel 2.
Bekijk bijlage Voorbeeld 3.xlsx

Alvast bedankt voor alle hulp!


grtz
 
In je voorbeeld staan geen formules.
VBA code ontbreekt ook.
Svp een realistisch bestand plaatsen.

Duik eens via je Excel-handboek in tabellen in Excel.
Dan wordt VBA overbodig.
 
Bij deze het bestand met de andere werkblade verwijdert ivm vertrouwelijke informatie.
Ik will graag met VBA leren en dit is voor mij een goede kans(stage).
Graag leer ik dus meer over codes. Mijn Excel kennis is naar mijn inzien al goed genoeg.
Bekijk bijlage Voorbeeld 4.xlsm

grtz

Edit: Ik bedoelde geen Excel handboek Maar VBA voor Excel.
 
Mijn Excel kennis is naar mijn inzien al goed genoeg.
Ik wil niet vervelend zijn, maar de fwerking van de functie vert.zoeken behoort bij de basiskennis van Excel. Die heb je blijkbaar nog niet goed onder de knie. Kijk in de helpfunctie voor de uitleg van die functie en speciaal naar 'benaderen'.
 
Ik wil niet vervelend zijn, maar de fwerking van de functie vert.zoeken behoort bij de basiskennis van Excel. Die heb je blijkbaar nog niet goed onder de knie. Kijk in de helpfunctie voor de uitleg van die functie en speciaal naar 'benaderen'.

Ik wil ook niet vervelend zijn, maar gaat het hier om de VLOOKUP in de macro of de functies in Excel?
Ook zie ik geen hulp voor 1 vd 2 punten die ik genoemd heb.
Als ik een voor de hand liggende fout gemaakt heb maak dit dan duidelijk ipv mij naar algemene hulp op Excel te sturen.

grtz
 
Vert.zoeken wijkt in een macro niet af van de functie die je meteen in een blad typt.
Bij uitvoeren van de macro verschijnt een fout in vert.zoeken
Ik heb je niet naar de algemene hulp in Excel gestuurd, maar
1) heel precies naar de helptekst bij gebruik van vert.zoeken, en
2) nog meer specifiek naar de uitleg bij 'benaderen' van die functie.
Als je die bestudeert is die fout snel opgelost.
 
Zapatr heeft gelijk.
Het is niet aan jou als vragensteller voor te schrijven hoe een helper zou moeten reageren.

De tabellen 'begroot', 'werkelijk' en 'verschillenanalyse' bevatten erg veel redundante informatie.
Integreer ze tot 1 tabel en gebruik kolomkoppen voor de titels van velden in plaats van die door de tabel heen te strooien.

Jouw kennis van Excel (maar overigens ook van het Nederlands) is mijns inziens nog voor erg veel verbetering vatbaar.
De beste bron daarvoor is het hulpapparaat van Excel zelf en een goed Excel handboek. Het is dus heel verstandig om je daarheen te verwijzen.
Bestudeer in Excel (niet in VBA) - zoals ik al eerder had aangegeven - de mogelijkheden/eigenschappen van tabellen.
 
@ zapatr
Ja dat snap ik, die 0 wordt niet mee gekopieerd.
Of ik begrijp nog steeds niet wat je bedoelt, Maar dat is toch uiteindelijk mijn vraag?
Hoe pas ik de code aan dat de 2 genoemde Problemen opgelost zijn.
Ik snap het probleem en kann het handmatig aanpassen als ik will, Maar een macro geeft toch juist de mogelijkheid veel handelingen in 1x te doen?

grtz
 
@snb
Het is zeker niet aan mij om te zeggen hoe iemand moet reageren, ik kann wel aangeven hoe ik graag heb dat ze reageren.
De lay-out aanpassen behoort 99% zeker niet tot de opties ivm met het kopieren van data uit andere bestanden(die ik niet maak en al langer gebruikt worden.)
 
Aangezien er tot nu toe niemand met de hulp kan/will komen die ik vraag. Heeft er misschien iemand een de naam van een bedrijf wat hier goed mee overweg kan zodat ik daarmee contact op kan nehmen?

Grtz
 
hallo boomen,
zou u een voorbeeldje kunnen plaatsen met standaard excel_formules in de velden zoals het moet werken?
dus de validatie in de D_kolom en de formules zoals ze moeten worden.
 
Ik heb in het volgende bestand via de macro 2 regels toegevoegd.(dubbel click op 2 voor invoegen van rijen in de tabel)
Hierna heb ik de formules waar ik de fouten zie aangepast.
Probeer bij voorbeeld 4 Maar eens 2 rijen in te voegen en dan dezelfde bestrijdingsmiddelen te selecteren.
Bij het kopje werkelijk(J18) pakt die nu de formules van begroot en de 1e 2 opties in de gegevensvalidatie doen het niet wat voor mij het grootste raadsel is. Ook pakt hij nu het prijsverschil nog niet mee.

Al met al kom ik zelf steeds dichter bij de oplossing door het verder werken in mijn studieboek, Maar voor die gegevensvalidatie heb ik echt geen Idee:(

Bekijk bijlage Voorbeeld 5.xlsm

grtz

Edit: voorbeeld 4 Staat in post #3
Voor de taal mijn excuses, Maar mijn bedrijfscomputer maakt correcties naar het Duits.
 
Laatst bewerkt:
Super bedankt, dit is wat ik zocht! Alle waarden doen het.
Ik zie dat de code kopieerd vanuit de oude code?
Dit gaat mij op dit Moment wel te ver.

Even een vraagje bij de nieuwe code voor ik hem voor mezelf uit ga pluizen.
Mag ik die oude code verwijderen of komt daar info uit?

grtz
 
Laatst bewerkt:
Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Target.Column = 1 And InStr("2.3.4.5.7.", Target) > 0 And Target <> "" Then
        i = InputBox("hoeveel rijen invoegen?")
        If i > 0 And IsNumeric(i) Then
            For n = 1 To i 'tot hier snap ik de code nog.'
                Target.Offset(4).Resize(1, 18).Insert Shift:=xlDown    ', CopyOrigin:=xlFormatFromLeftOrAbove
                [formules].Copy Target.Offset(4, 1).Resize(i, 17)
            Next n
        End If
    End If
    Cancel = True
End Sub

De Target.Offset is nog niet voorbijgekomen voor mij. Edit: 4 rijen naar beneden beginnen.
Bij Resize neem ik aan 1 rij 18 kolommen toevoegen.
Insert Shift:=xlDown hier zeg je dat er naar beneden ingevoegd wordt?
De formule kon toch ook apart gemaakt worden ergens in VB? Edit: Liever in Excel zodat mijn baas ze ook aan kan passen! Dus dit punt is al goed.
En dan snap ik die laatste Resize(i,17) niet. De i is die Input? Edit: De formules worden gekopieerd naar de plek 4 naar beneded 1 naar rechts. dan blijven er 17 cellen over.
Alleen de resize gebeurt pas na het plakken van die formules. Hoe komt het dat er dan in alle nieuwe regels wel formules staan?

Bij tijd over graag hulp:D
Ondertussen ga ik ook zelf zoeken.
 
Laatst bewerkt:
je hebt helemaal gelijk
Code:
[formules].Copy Target.Offset(4, 1).Resize(i, 17)
moet zijn :
Code:
[formules].Copy Target.Offset(4, 1)
 
ik vind het kopiëren van formules en opmaak e.d. makkelijker dan alles in vb code te definiëren .
 
Code:
[formules].Copy Target.Offset(4, 1)
hier in is
Code:
Target.Offset(4, 1)
het begin van de plek waar naar toe geplakt moet worden.
 
sylvester-ponte, ode. Dit is de 1e keer dat ik het Idee heb dat ik het begin te snappen.
Alleen Insert Shift:=xlDown is nog een beetje wazig voor mij.

Die resize na de formules kopieren is nu dus weg, dus die vraag is niet Meer van toepassing.

grtz
 
als je bij in de code op Insert gaat staan en op F1 drukt krijg je uitleg.
dan zie je ook dat het eigenlijk xlShiftDown heet.
en dan zie je ook dat een andere optie is xlShiftToRight. ( om de de cellen opzij te laten gaan ipv naar beneden)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan