Acties:
  • 0 Henk 'm!

  • jobdebob
  • Registratie: September 2017
  • Laatst online: 02-08-2023
Hee allen,

Ik ben net begonnen met VBA in excel, maar ik had een kleine vraag.
Momenteel ben ik bezig met het automatiseren van simpele functions in VBA.
Als ik deze uitvoer in excel komt er zoals gewenst gewoon het goede antwoord uit.
Nu zou ik ook graag de gebruikte formule als output krijgen, bijvoorbeeld in de cel ernaast, is dit mogelijk?
Ik heb dit al geprobeerd te googelen, maar ik kwam er niet uit.

Of is het bijvoorbeeld mogelijk om in de functie van VBA in te programmeren dat er bij het uitvoeren van de functie een bepaalde tekst komt in de cel naast de cel waar de functie wordt uitgevoerd?

Heel simpel voorbeeld

Function test(E, D)

test = E / (D + E)

End Function

Stel ik voer in excel het volgende in =test(1,1), dan zou ik graag het volgende zien:

In de cel waar ik uitvoer: 0,5
En in een andere cel: E / (D + E) = 1 / (1+1)

Alle tips zijn welkom, alvast bedankt!
Job

Acties:
  • 0 Henk 'm!

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Ja dat kan, tenmínste door een losse vba-macro te maken die obv. OnChange() merkt dat een cel in kolom X is aangepast, dan in kolom X+1 tekst invoegen obv de formula in kolom X.

(Ik ben ws de komende dagen offline dus kan even geen voorbeeldcode geven, belangrijkste de de onchange()).

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


Acties:
  • 0 Henk 'm!

  • DeDooieVent
  • Registratie: April 2005
  • Laatst online: 08-04 13:31
F_J_K schreef op vrijdag 8 september 2017 @ 17:59:
Ja dat kan, tenmínste door een losse vba-macro te maken die obv. OnChange() merkt dat een cel in kolom X is aangepast, dan in kolom X+1 tekst invoegen obv de formula in kolom X.

(Ik ben ws de komende dagen offline dus kan even geen voorbeeldcode geven, belangrijkste de de onchange()).
Dit gaat mislopen, omdat als je cel kolom x+1 aanpast hij meteen ook die volgende kolom gaat vullen

Net getest, want ik dacht hetzelfde, maar de hele rij wordt gevuld

Acties:
  • 0 Henk 'm!

  • DeDooieVent
  • Registratie: April 2005
  • Laatst online: 08-04 13:31
ja nieuwe post... maar ok vergeef me

Module code:

code:
1
2
3
4
5
6
7
8
9
Public Trigger As Integer


Function test(E, D)

test = E / (D + E)

Trigger = 1
End Function



werkblad code:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Trigger = 1 Then


Cells(Target.Row, Target.Column + 1) = "hihi"


Trigger = 0
End If



End Sub


misschien sloppy code, maar je kan nu met de triggers de verschillende functies definieren

dus nu kun je een string samenstellen, met als trigger = 1 dan string = E & "(" & D & "+" & "E)"

en zo weiter

maar ja... wat een bende gaat dit worden

ik volg dit topic en hoop te leren

[ Voor 26% gewijzigd door DeDooieVent op 08-09-2017 18:38 ]


Acties:
  • 0 Henk 'm!

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Je wilt natuurlijk alleen kolom X in de gaten houden en alleen X+1 vullen, niet any kolom. Misschien had ik een andere letter als voorbeeld kunnen geven :P

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


Acties:
  • 0 Henk 'm!

  • DeDooieVent
  • Registratie: April 2005
  • Laatst online: 08-04 13:31
F_J_K schreef op vrijdag 8 september 2017 @ 18:38:
Je wilt natuurlijk alleen kolom X in de gaten houden en alleen X+1 vullen, niet any kolom. Misschien had ik een andere letter als voorbeeld kunnen geven :P
ja nee dat snapte ik, maar je weet niet waar de functie wordt ingevoerd, dus je wil altijd kolom x+1 vullen, maar alleen kolom x+1

daarom mijn oplossing met de trigger

Acties:
  • 0 Henk 'm!

  • naitsoezn
  • Registratie: December 2002
  • Niet online

naitsoezn

Nait Soez'n!

Excuus als het volgende geen antwoord op je vraag is, maar wil je eigenlijk niet gewoon 'debuggen'? In dat geval kun je gewoon in de VBA-editor van Excel 'brake-points' zetten (door ter hoogte van de coderegel waar je in geïnteresseerd bent op de grijze balk naast de tekst te klikken), en dat stopt de uitvoering van de functie wanneer die wordt aangeroepen, en kun je o.a. via een mouse-over (en geavanceerdere functies) de huidige waardes van variabelen achterhalen.

Als dit niet is wat je zoekt, negeer deze post dan maar :P

't Het nog nooit, nog nooit zo donker west, of 't wer altied wel weer licht


Acties:
  • 0 Henk 'm!

  • jobdebob
  • Registratie: September 2017
  • Laatst online: 02-08-2023
DeDooieVent schreef op vrijdag 8 september 2017 @ 18:35:
ja nieuwe post... maar ok vergeef me

Module code:

code:
1
2
3
4
5
6
7
8
9
Public Trigger As Integer


Function test(E, D)

test = E / (D + E)

Trigger = 1
End Function



werkblad code:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Trigger = 1 Then


Cells(Target.Row, Target.Column + 1) = "hihi"


Trigger = 0
End If



End Sub


misschien sloppy code, maar je kan nu met de triggers de verschillende functies definieren

dus nu kun je een string samenstellen, met als trigger = 1 dan string = E & "(" & D & "+" & "E)"

en zo weiter

maar ja... wat een bende gaat dit worden

ik volg dit topic en hoop te leren
Ik vergeef het je! :) Ontzettend bedankt voor de hulp.

Ik krijg het alleen nog niet werkend.
Moet ik beide codes gewoon in een module op VBA zetten?
En dan zou er na het uitvoeren van de function test automatisch iets moeten gebeuren toch?


En inderdaad, dan wordt het snel rommelig. Wellicht dat er nog handigere opties zijn.

Thanks!

Edit: na nog wat aan kloten is het toch gelukt!

Acties:
  • 0 Henk 'm!

  • DeDooieVent
  • Registratie: April 2005
  • Laatst online: 08-04 13:31
jobdebob schreef op vrijdag 8 september 2017 @ 20:02:
[...]


Ik vergeef het je! :) Ontzettend bedankt voor de hulp.

Ik krijg het alleen nog niet werkend.
Moet ik beide codes gewoon in een module op VBA zetten?
En dan zou er na het uitvoeren van de function test automatisch iets moeten gebeuren toch?


En inderdaad, dan wordt het snel rommelig. Wellicht dat er nog handigere opties zijn.

Thanks!

Edit: na nog wat aan kloten is het toch gelukt!
haha

grappig... ja als ik het had willen oplossen met jouw probleem had ik het zo aangepakt, maar god.. als je 100 udf's hebt gaat het mislopen

echt een drama...

ik blijf erbij, dit is sloppy code... een bende... maar ik weet (uit ervaring) dat het soms gewoon zo werkt... en dan is het een kwestie van accepteren en net doen of je een l33t h4ckz0r bent...

ik verdien al 19 jaar zo mijn geld

edit:

ik blijf topic volgen, hoop op een elegantere oplossing, want je probleem is interessant, nooit aan de hand gehad, maar je vraagstelling is legitiem en boeiend...

[ Voor 8% gewijzigd door DeDooieVent op 08-09-2017 21:11 ]


Acties:
  • 0 Henk 'm!

  • jobdebob
  • Registratie: September 2017
  • Laatst online: 02-08-2023
DeDooieVent schreef op vrijdag 8 september 2017 @ 21:07:
[...]


haha

grappig... ja als ik het had willen oplossen met jouw probleem had ik het zo aangepakt, maar god.. als je 100 udf's hebt gaat het mislopen

echt een drama...

ik blijf erbij, dit is sloppy code... een bende... maar ik weet (uit ervaring) dat het soms gewoon zo werkt... en dan is het een kwestie van accepteren en net doen of je een l33t h4ckz0r bent...

ik verdien al 19 jaar zo mijn geld

edit:

ik blijf topic volgen, hoop op een elegantere oplossing, want je probleem is interessant, nooit aan de hand gehad, maar je vraagstelling is legitiem en boeiend...
Ik heb het nodig voor een examen waar ik alles mee mag nemen wat ik wil. En moet toch VBA leren voor een ander vak, dus 2 vliegen in een klap.

Het ziet er inderdaad erg omslagtig uit zo. Heb nu dit voor 1 functie:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Trigger = 1 Then


Cells(Target.Row - 3, Target.Column) = " =E / (E + D) * Re + D / (E + D) * Rd"


Cells(Target.Row - 2, Target.Column) = Range("E").Value & " / (" & Range("E").Text & "+ " & Range("D").Text & ") * " & Range("Re").Text & " + " & Range("D").Value & " / (" & Range("E").Text & "+" & Range("D").Text & ") * " & Range("Rd").Text


Trigger = 0

End If

End Sub



Het werkt precies zoals ik wil, maar het ziet er erg inefficiënt uit en het duurt redelijk lang om het in elkaar te draaien. Heb uiteindleijk rond de 25 functies denk ik, maar sommige zijn erg gecompliceerd.

Ben benieuwd of iemand nog met een andere oplossing komt. Wel erg leuk zo'n forum om te leren!

Acties:
  • 0 Henk 'm!

  • DeDooieVent
  • Registratie: April 2005
  • Laatst online: 08-04 13:31
ik zou per functie een trigger bouwen

if trigger is 1

if trigger is 2

etc

verdiep je in "case"

je kan zo nog wel redelijk efficiënt bouwen (25 is te doen)

Acties:
  • 0 Henk 'm!

  • jobdebob
  • Registratie: September 2017
  • Laatst online: 02-08-2023
Daar was ik inderdaad al mee bezig. Nog nooit van gehoord, maar ik ga me erin verdiepen.
Heb je toevallig een goede link om er meer over te lezen?

Thanks voor de hulp!

Acties:
  • 0 Henk 'm!

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Zo uit t hoofd: laat de functie een array retourneren en geef de functie in als matrixformule op twee cellen.
In cel 1 komt eerste element van t array, in cel 2 het tweede element.

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland

Pagina: 1