Punten in komma's vervangen doormiddel van formule

Status
Niet open voor verdere reacties.

Micheltje13

Gebruiker
Lid geworden
28 jan 2011
Berichten
132
Hallo,

Het is best lastig uit te leggen maar ik ga het toch proberen.
Wij maken gebruik van Exact en daarin maken wij offerte's. Doormiddel van een wordmerge template met xml koppelingen komt hier een bestand uit die naar de klant kan. In deze template staat een tabel met producten. De template bestaat uit een tabel met 1 regel waarin de xml koppelingen staan. Op het moment dat er meerdere producten aan de offerte worden toegevoegd dan komen er automatisch meerdere regels bij in de tabel.

Nu zaten wij met een probleem vanuit het systeem aangezien er data *1000 gedaan moest worden. Omdat we maar 1 regel in de template konden invullen moesten we een formule bedenken die snapt dat er een bepaalde cel op dezelfde regel *1000 gedaan moet worden.

Dit is opgelost doormiddel van de volgende formules:

{ = { quote "D{ = 1+{ seq row \c } } } *1000}
{ = { quote "F{ = { seq row } } } *1000}

Zo worden de kolommen D en de kolommen F keer 1000 gedaan.

Echter nu zitten we in deze zelfde kolommen met nog een probleem. Doordat onze exact notatie punten neer zet waar het komma's moet neerzetten komt er bij de *1000 formule een verkeerd getal. Zo wordt 101.50 * 1000 = 151000 terwijl dit natuurlijk niet goed is. Op het moment dat ik de waarde 101.50 vervang voor 101,50 dan geeft ie wel de goede uitkomst bij *1000 namelijk = 101500. Nu ben ik op zoek naar een formule. Het liefst natuurlijk in de formules die hierboven genoemd zijn, die ervoor zorgen dat de waardes die uit exact komen in de kolommen D en F in plaats van met een . met een , genoteerd worden zodat ie de juiste berekening maakt op het moment dat we *1000 doen.
 
Is het niet voldoende als je met 10 vermenigvuldigt? Dan omzeil je de kommanotatie volgens mij.
 
Nee helaas, 101.50 wordt dan namelijk 1510. Dus dat gaat ook niet goed. Goed omgedacht maar het mocht helaas niet baten.
 
Hoe kan de berekening 101.50 * 1000 = 151000 ooit kloppen? Als de komma wordt genegeerd omdat Word de kommanotatie niet herkend, moet er dit uitkomen: 10150 * 1000 = 10.150.000. Jij wilt dus dit zien: 101,50 * 1000 = 101.500,00.
Maar wat je ook wilt, het is toch onmogelijk dus in Word velden hoef je het allemaal niet te zoeken. Een Word veld kan namelijk niet gesplitst worden (wat een optie zou kunnen zijn) en je kunt er ook geen Zoek-en-Vervang in doen (wat een andere optie zou zijn geweest).
De enige mogelijkheid is dus om via een macro en VBA het samenvoegbestand in te lezen, te bewerken en het resultaat in het document te zetten.
 
Ja die berekening klopt niet. Via een macro ben ik nu aan het kijken en het is gelukt maar dan verandert ie de punten in de hele tabel terwijl ik het alleen in kolom 4 en 6 veranderd wil hebben. Ik heb ermee zitten stoeien maar ik kom er nog niet uit. Tot noch toe is de macro dit:

Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "."
.Replacement.Text = ","
.Forward = True
.Wrap = wdFindAsk
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll

Echter pakt ie hier de hele tabel. Welke selection formule moet ik gebruiken om kolom 4 en 6 te selecteren en hier de punten in komma's te veranderen.
 
Hij pakt zo niet alleen de hele tabel, maar je hele document. Je zult de tabel cel,voor cel moeten uitlezen vermoed ik.
 
Gelukt met deze macro:

Code:
Sub ModColumn()
Dim kolom As Column, cel As Cell
Set kolom = ActiveDocument.Tables(2).Columns(4)
For Each cel In kolom.Cells
If IsNumeric(Left(cel.Range.Text, Len(cel.Range.Text) - 1)) Then
cel.Range.Text = Replace(cel.Range.Text, ".", ",")
End If
Next cel
Set kolom = ActiveDocument.Tables(2).Columns(6)
For Each cel In kolom.Cells
If IsNumeric(Left(cel.Range.Text, Len(cel.Range.Text) - 1)) Then
cel.Range.Text = Replace(cel.Range.Text, ".", ",")
End If
Next cel
ActivePrinter = "Microsoft Print to PDF"
Application.PrintOut FileName:="", Range:=wdPrintAllDocument, Item:= _
wdPrintDocumentWithMarkup, Copies:=1, Pages:="", PageType:= _
wdPrintAllPages, Collate:=True, Background:=True, PrintToFile:=False, _
PrintZoomColumn:=0, PrintZoomRow:=0, PrintZoomPaperWidth:=0, _
PrintZoomPaperHeight:=0
End Sub
 
Laatst bewerkt:
Da's geen formule, maar een macro. Die me trouwens bekend voorkomt :).
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan