Waarom wordt de variabele niet doorgegeven?

Status
Niet open voor verdere reacties.

luus1901

Gebruiker
Lid geworden
21 mei 2009
Berichten
66
De bedoeling is dat in BatchProces een lijst wordt opgebouwd met bestanden (deze code heb ik allemaal weggelaten omdat dit goed gaat) en een werkblad wordt toegevoegd met de gevonden bestandsnamen. Deze namen zijn verschillend, (ook de datum kan veranderen), alleen ABC met volgnummer is constant.
Adhv ABC moet ik bepalen welke of allebei wordt gevonden om verdere aktie te ondernemen.

Ik probeer een variabele door te geven aan een procedure maar het lukt niet. Snap niet wat ik fout doe. :confused:
(Gebruik excel 2007)


Wie kan mij helpen?

Luus
Bekijk bijlage Doorgeven variabele.xlsm
 
Ik denk dat je de integer by reference (ByRef) moet doorgeven in plaats van by value (ByVal).
 
Edmoor, dank je wel, dit werkt !

Toch even een vraagje over ByVal. Ik was in de veronderstelling dat ByVal alleen de waarde (kopie van de variabele) doorgeeft.
Omdat ik verder niets met de variabele wil doen, waarom dan toch ByRef gebruiken?

Luus
 
Mij lijkt dit voldoende:

Code:
Private Sub BatchProces()
   On Error Resume Next

   For Each it In Array("ABC 1", "ABC 20")
      x3 = Sheets("Blad2").Columns(1).Find(it, , xlValues, 2).Row
      If Not IsEmpty(x3) Then Exit For
   Next

   MsgBox "gevonden: " & Format(Not IsEmpty(x3), "yes/no")
End Sub
 
Edmoor, dank je wel, dit werkt !

Toch even een vraagje over ByVal. Ik was in de veronderstelling dat ByVal alleen de waarde (kopie van de variabele) doorgeeft.
Omdat ik verder niets met de variabele wil doen, waarom dan toch ByRef gebruiken?

Luus

Voor string variabelen is dat inderdaad zo maar voor andere datatypes is niet de waarde van de variabele van belang maar het geheugen adres waar deze waarde staat. Dat is de reden waarom het By Reference moet.
 
snb,
waarschijnlijk was ik in mijn vraagstelling/voorbeeld niet duidelijk. ABC 1 of ABC 2 kan allebei in de lijst voorkomen.

Jouw korte code geeft dit niet. Ik heb een 1 of 2 als antwoord nodig, vandaar de 'leuke' case in de aanroep procedure.
Maar toch wel wat geleerd, alleen (erg blond...) wat is de 2 in Find ?
Luus
 
Ik denk dat je dat werkblad niet eens nodig hebt:
Als je alle xls bestanden in folder G:\OF\ wil achterhalen en wil controleren of enig bestand ABC 1, of ABC2 bevat:

Code:
Sub M_snb()
   sn=split(createobject("wscript.shell").exec("cmd /c ""Dir G:\OF\*ABC *.xls"" /b").stdout.readall,vbCrLf)
   msgbox  ubound(filter(sn,"ABC 1")) +ubound(filter(sn,"ABC 2"))+2
End Sub
 
Mooie code!
Als niet zo ervaren, moet ik even kijken of ik dit kan gebruiken, want de bestanden staan in verschillende mappen.
Soms is wat extra uitleg wel handig voor iemand die niet zo ervaren met programmeren is.
F1 geeft niet altijd antwoord op de zoekvraag.
Luus
 
Als je submappen erbij wil betrekken:

Code:
Sub M_snb()
   sn=split(createobject("wscript.shell").exec("cmd /c ""Dir G:\OF\*ABC *.xls"" /s /b").stdout.readall,vbCrLf)
   msgbox  ubound(filter(sn,"ABC 1")) +ubound(filter(sn,"ABC 2"))+2
End Sub


PS. UIt je alias kon ik geen ervaring afleiden ;)
 
UIt je alias kon ik geen ervaring afleiden ;)
Alleen de geboortedatum. Dit i.v.m. de handtekening :p





Sorry! Ik kon het niet laten :D
 
Laatst bewerkt:
@ snb, dank voor de aanvulling.
@ edmoor en snb, waarom denken jullie dat ik deze handtekening heb gekozen :d
Lijkt mij "gebrek aan" ervaring genoeg, toch :):)


PS @ snb, wil je dit 'oudje' nog antwoord geven op de prangende vraag over de 2 in find??
 
Ik heb standaard 'handtekening tonen' uitstaan in fora.....

Zoek eens in de hulpbestanden van de VBeditor, lemma range.find method
 
Voor mij geeft F1 niet altijd een (helder) antwoord. Vermoed dat je met de 2 de xlSearchdirection bedoeld.
Jouw code uitgetest op de werkelijke mappen. Ik heb twee mappen onder E:\ die allebei bestanden met ABC bevatten.
Na aanpassing van dir en map + xls* vindt de map het juiste aantal in 1 map, maar niet in de andere.
Ook hier in jouw code een voor mij mysterieuze 2. Geen idee waarom het niet werkt.
Luus
 
Code:
.find("zoekwaarde", 'na cel', xlvalues, xlpart)
mijn '2' slaat (tel de komma's) op het vierde argument

zoeken naar de zoekwaarde die overeen kan komen met de tekst van een volledige cel, of met een deel daarvan: xlpart =2, xlwhole =1

als niets gevonden: ubound()=-1
als niets gevonden voor beide waarden:Ubound() +ubound() = -2
omdat ik als ondergrens 0 wil, tel ik bij het minimum van Ubound() +ubound() 2 op om 0 als ondergrens te krijgen

NB. Zorg ervoor dat zowel voor als na 'ABC' een sterretje komt

Heb je vragen over een code: plaats hem hier
Heb je vragen over een werkboek: plaats hem hier
 
Laatst bewerkt:
Ik raakte in de war door de 2, want ik had wel geteld tot het vierde argument, maar kon daar geen getal aan verbinden.
Wist niet dat je xlpart = 2 etc kan schrijven. Dus dank je, weer iets geleerd.

Ook dank voor de andere uitleg. Ga morgen testen of het sterretje inderdaad mijn fout was.
Luus
 
kijk ook eens in de objectbrowser van de VBEditor (F2) en zoek op find of xlfind.
Alle argumenten staan daar ook met hun indexnummer vermeld.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan