Toon posts:

[Excel VBA] WorksheetFunction.Min met variabele invoer?

Pagina: 1
Acties:

Vraag


  • Da_maniaC
  • Registratie: September 2004
  • Laatst online: 05-02 21:33

Da_maniaC

a.k.a. The Sequenz Pounder

Topicstarter
Hallo,

Ik ben bezig om een tooltje te maken in VBA maar ik loop nog vast op 1 functie.
In het verleden had ik ooit eens een tool gemaakt die wat Magazijn handelingen kon registreren en werden er wat werkzaamheden uitgevoerd waarbij er altijd een omstapeling plaats vond van 5 pallets met goederen naar 5 gemixte pallets (van iedere pallet steeds 1 tray goederen).

Nu zijn hier wat variaties op gekomen waardoor ik niet altijd van 5 pallets uit kan gaan. Sommige variaties hebben slechts 2, 3 of 4 pallets.
Mijn gehele tool heb ik hier vrijwel op aangepast.

Ik loop echter nog vast bij de volgende routine:

Ik stap deze routine in waarbij diverse waardes/variabelen al bekend zijn (vanuit een UserForm).

THT1 = 210630
THT2 = 210630
THT3 = 210530
THT4 = ""
THT5 = ""

code:
1
FinalTHT = WorksheetFunction.Min(THT1, THT2, THT3, THT4, THT5)


In de oude situatie waren altijd alle 5 de THT waardes gevuld en kreeg ik een kloppende uitkomst.
Nu zijn de waardes THT3, THT4 of THT5 soms leeg.

Ik heb getracht om hier wat op te bedenken. Een dynamische Array die zich vult aan de hand van
de invoer. Met een extra argument om het aantal (1, 2, 3, 4 of 5 stuks) vooraf kenbaar te maken.
Ik kwam hier vervolgens op de volgende code uit:

Als ik de routine in stap zijn de volgende waardes/variabelen al bekend:

AantalPallets = 3
THT1 = 210630
THT2 = 210630
THT3 = 210530
THT4 = ""
THT5 = ""

De waardes THT4 en THT5 zouden dus niet hoeven te worden meegenomen. Dan werkt de .Min (Minimum) functie niet goed.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Dim THTArray() As Variant
Dim X As Long

X = 1

ReDim THTArray(1 To AantalPallets)

For X = 1 To AantalPallets

THTArray(X) = THT & X

Next X

FinalTHT = WorksheetFunction.Min(THTArray)


Toch gaat hier ergens iets nog niet goed. Mijn uitkomst is telkens "0".

Doe ik nog iets verkeerd in mijn code? Of is mijn aanpak onhandig? Ik krijg de oorzaak niet gevonden! :)

----------

Zojuist nog wat meer getest.

Als ik nu het volgende toevoeg aan de routine:

code:
1
 Debug.Print Join(THTArray, ", ")


Krijg ik als uitkomst: "1, 2, 3".
Ik had verwacht dat hier eigenlijk de waarde van de variabelen: THT1, THT2 en THT3 zou komen te staan! :?

[Voor 7% gewijzigd door Da_maniaC op 18-01-2022 10:25]

Inventory | Instagram: @sequenzpounder | http://www.zdaemon.org | ZDaemon! Client/Server port for DOOM!

Beste antwoord (via Da_maniaC op 18-01-2022 20:53)


  • pporrio
  • Registratie: Februari 2010
  • Laatst online: 23:10
De code gaat fout omdat de lege waarden worden gezien als 0.
Misschien AantalPallets opnemen in een Select statement en zo afhankelijk van het aantal pallets de formule aanpassen:
code:
1
2
3
4
5
6
7
8
9
Select Case AantalPallets
  
    Case 5
      FinalTHT = WorksheetFunction.Min(THT1, THT2, THT3, THT4, THT5)
    
    Case 3
      FinalTHT = WorksheetFunction.Min(THT1, THT2, THT3)
  
End Select

Mijn platencollectie

Alle reacties


Acties:
  • Beste antwoord
  • +1Henk 'm!

  • pporrio
  • Registratie: Februari 2010
  • Laatst online: 23:10
De code gaat fout omdat de lege waarden worden gezien als 0.
Misschien AantalPallets opnemen in een Select statement en zo afhankelijk van het aantal pallets de formule aanpassen:
code:
1
2
3
4
5
6
7
8
9
Select Case AantalPallets
  
    Case 5
      FinalTHT = WorksheetFunction.Min(THT1, THT2, THT3, THT4, THT5)
    
    Case 3
      FinalTHT = WorksheetFunction.Min(THT1, THT2, THT3)
  
End Select

Mijn platencollectie


  • dix-neuf
  • Registratie: Juli 2018
  • Niet online
X = 1 kan achterwege blijven, want je begint de for-nextlus al met x = 1.
Je hebt alleen X gedeclareerd, doe dat ook met AantalPallets en THT en geef die een (begin)waarde (moeten getallen zijn).
En als je de array met 1 wil beginnen dan moet je (boven de macro) vermelden: Option Base 1

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Makkelijker, loopje: kleinste = eerste waarde. Voor elke volgende waarde: als nul: next, anders kleinste = min(kleinste, waarde (i)).

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


  • Da_maniaC
  • Registratie: September 2004
  • Laatst online: 05-02 21:33

Da_maniaC

a.k.a. The Sequenz Pounder

Topicstarter
Allen bedankt voor de uitleg/input.
Ik heb uiteindelijk maar gekozen om de "array" los te laten en hier een Case selectie van te maken. Werkt prima! :)

Inventory | Instagram: @sequenzpounder | http://www.zdaemon.org | ZDaemon! Client/Server port for DOOM!



Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee