[VBA] Probleem met facturatie macro in Word

Pagina: 1
Acties:

  • CAP-Team
  • Registratie: April 2000
  • Laatst online: 11-09 17:43

CAP-Team

XBL: CAPTeam

Topicstarter
Het probleem: bij mij op m'n werk gebruiken we word-macro's om de opmaak van onze facturen recht te breien.

In deze macro zit een routine die emballageregels uit de factuur moet verwijderen. Dit doet hij door te zoeken op **, want achter elke emballage staat **. Als hij dus ** kan vinden dan wordt de regel geselecteerd. Als nu in deze selectie ook 0,00 gevonden kan worden (gratis emballage) dan mag de regel verwijderd worden, en wordt er opnieuw gezocht naar **, enz.

Nu wil het geval dat emballage ook wel eens niet gratis is, en zolang emballage gratis is gaat het wel goed, maar het probleem treedt op als emballage bijvoorbeeld 10,00 kost, want dan vindt de macro wel 0,00 en wordt de regel verwijderd.

Ik dacht dus slim te zijn en i.p.v. op "0,00" naar " 0,00" te laten zoeken, maar dat werkt niet omdat er onderaan in de macro de else statement niet is ingevuld.

Dus kan hij "**" en " 0,00" vinden dan gaat het goed, en wordt de regel verwijderd.
Maar als er "**" gevonden wordt maar geen " 0,00" dan vliegt de macro in een loep.

Iemand een idee wat ik bij de else conditie moet zetten om hem op te laten houden met zoeken naar " 0,00" en naar de volgende "**" te laten zoeken?

Ik ben zelf niet zo thuis in dat VBA gedoe, ik kan de code wel teruglezen maar zelf programmeren lukt me niet zo in VBA... :(
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Do While .Execute(FindText:="**", Wrap:=wdFindStop, Forward:=True) = True
 ActiveDocument.Bookmarks("\line").Select
 Set srcRange = Selection.Range
 srcRange.Find.ClearFormatting
 With srcRange.Find
 .Replacement.ClearFormatting
 .Replacement.Text = ""
 .Forward = True
 .Wrap = wdFindStop
 .Format = False
 .MatchCase = False
 .MatchWholeWord = False
 .MatchWildcards = False
 .MatchAllWordForms = False
 .MatchSoundsLike = False
 If .Execute(FindText:="0,00", Wrap:=wdFindStop, Forward:=True) Then
  Selection.InsertBreak Type:=wdLineBreak
 Else
 End If
 End With
Loop

Microsoft Surface Pro 6 | Samsung Galaxy S21FE | XBOX Series X


  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 17-09 08:12

Crazy D

I think we should take a look.

Probeer eens de waarde via Val() echt numeriek te maken, dan kun je 'm checken via
If Val(bedrag) = 0 Then....

Let alleen wel ff op dat dat alleen lekker werkt als de . of , in het bedrag gelijk is aan de windows instelling (that is, als je 0,00 doet met Val() maar in je windows is de . het decimaal teken, krijg je bij 0 wel wat je wilt, maar bij 10,00 wordt het een heel ander bedrag...)

Exact expert nodig?


  • CAP-Team
  • Registratie: April 2000
  • Laatst online: 11-09 17:43

CAP-Team

XBL: CAPTeam

Topicstarter
probleem is dus dat hij niet op een numerieke waarde zoekt maar of hij gewoon 0,00 in de tekst tegenkomt...

ik weet dus niet hoe hij weer uit het lusje kan springen als hij wel ** heeft gevonden maar geen " 0,00"

Microsoft Surface Pro 6 | Samsung Galaxy S21FE | XBOX Series X


  • CAP-Team
  • Registratie: April 2000
  • Laatst online: 11-09 17:43

CAP-Team

XBL: CAPTeam

Topicstarter
*Schop* ^

Microsoft Surface Pro 6 | Samsung Galaxy S21FE | XBOX Series X


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 16-09 23:59
id:

Als de regel tekst er (bijna) altijd hetzelfde uitziet kan je het ding parsen door op scheidingstekens(spaties) te zoeken oid, en veld xx gebruiken als het bedrag veld.

Deze is dan makkelijker te checken op zijn waarde, en waarschijnlijk is het een minder buggevoelige methode. (Mits je de parser goed schrijft natuurlijk :))

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.