• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

numerieke waarden als tekst getoond

Status
Niet open voor verdere reacties.

jofred

Gebruiker
Lid geworden
16 dec 2006
Berichten
172

Als ik gegevens in een Excel-werkblad plaats (bijv. via een VBA-macro vanuit een ORACLE-database), worden numerieke waarden als tekst geplaatst. Hiervoor heb ik al de opmaak van de betreffende cellen gewist en opnieuw opgemaakt als getalsopmaak met het scheidingsteken en 2 decimalen.
Bij gehele waarden worden deze wel als getal opgeslagen, maar als het gaat om niet-gehele waarden ziet Excel dit als tekst (en kun je er dus niet mee rekenen).
Als ik vervolgens de cel selecteer, op de <F2>-toets druk en daarna een enter geeft, dan is het opeens wel een getal. Ook met een aanvullende actie in de macro, waarbij een berekening wordt uitgevoerd, is het opeens wel een getal geworden. :confused:

Heeft iemand een idee waarom Excel zich zo gedraagd en hoe het kan worden geregeld dat in direct een getalswaarde wordt getoond?

 
Is je decimaal scheidingsteken in Oracle hetzelfde als in Excel?
Dat zou het probleem kunnen veroorzaken.
 
Jan

Dat ga ik over een paar uurtjes nog wel even na (ORACLE-database niet hier bij de hand)
Ik neem even aan dat Excel z'n decimaal-teken overneemt van de Windows-instelling uit het Configuratie-scherm > Landinstellingen. Ik heb in Excel niet ergens kunnen ontdekken dat je die instelling kunt overrulen.

 
Draai deze macro eens:

Code:
Sub maakgetallen()
    Dim c As Range
    For Each c In ActiveSheet.UsedRange
        c.Value = c.Value
    Next
End Sub

Beperk het te bewerken gebied tot datgene dat je nodig hebt.

Wigi
 
Ik heb nog eens verder gekeken naar de decimaal-definitie in ORACLE
Ik heb in mijn VBA-code dit nu opgelost door de interpunctie in de ORACLE-sessie zo in te stellen dat het decimaalteken een komma is

Code:
    Set OraSession = CreateObject("OracleInProcServer.XOraSession")
    Set OraDatabase = OraSession.OpenDatabase(Range("database_conn"), InlogString, 0&)
    'de interpunctie gelijkzetten met Excel, komma = decimaalteken
    OraDatabase.dbexecutesql ("alter session set nls_numeric_characters = '.,'")
    Set OvzDynaset = OraDatabase.CreateDynaset(Strsql, 0&)



Wigi,

Je code heb ik gedraaid, maar deze leverde niet het resultaat. Hoewel mijn oorspronkelijke probleem is opgelost (via de ORACLE-definitie), ben ik toch wel geïnteresseerd in je oplossing. Dit zou nl. van pas kunnen zijn bij soortgelijke problemen bij import van tekstbestanden.
Kun jij adhv bijgevoegd bestandje kijken waarom je oplossing niet werkt?



 

Bijlagen

Als je eerst een , vervangt door een . (Ctrl-H) dan werkt de code wel.

Wigi
 
Wigi,

Bedankt voor je reactie. Als ik het goed begrijp moet ik eerst de cel-waarden aanpassen door de komma's te vervangen door punten en vervolgens de maco te laten lopen.
Dat is wat omslachtig Ik heb inmiddels uitgevonden dat Excel automatisch de cellen opmaakt als getal, wanneer je met for-loop de volgende bewerking uitvoert:

Code:
        For i = 2 To 65536
            If Cells(i, 1).Value = "" Then Exit For
            Cells(i, 2).Value = Cells(i, 2).Value * 1
            Cells(i, 3).Value = Cells(i, 3).Value * 1
            Cells(i, 4).Value = Cells(i, 4).Value * 1
        Next

Vraag niet hoe het kan, maar profiteer ervan ;)

 
Als ik het goed begrijp moet ik eerst de cel-waarden aanpassen door de komma's te vervangen door punten en vervolgens de maco te laten lopen.


Euhm... wat jij omslachtig noemt... :)

Code:
ActiveSheet.UsedRange.Replace ",", "."

Wigi
 
Nog simpeler is een cel met een 0 erin te kopiëren en die te plakken over de getallen die je moet aanpassen. Wel Plakken Speciaal kiezen, en Optellen kiezen in het volgende schermpje.

Wigi
 
De laatste suggestie is wel aardig, werkt goed.
Alleen: Als je die opneemt als macro leidt dit tot de volgende code:

Code:
Sub Macro1()
    Range("F8").Select
    Selection.Copy
    Range("B2:D8").Select
    Selection.PasteSpecial Paste:=xlAll, Operation:=xlAdd, SkipBlanks:=False _
        , Transpose:=False
End Sub

Als je deze macro vervolgens weer uitvoert doet hij echter niets. Enig idee hoe dat kan?
 
En als je deze macro opkuist tot:

Code:
Sub Macro1()
    Range("F8").Copy
    Range("B2:D8").PasteSpecial Paste:=xlAll, Operation:=xlAdd
End Sub
 
Helaas, dit levert niet het gewenste resultaat op.

Ik moet het antwoord schuldig blijven. Als je een macro opneemt werkt het, en als je die terug afspeelt op het bestand (dat je gewoon opnieuw opent) dan werkt het niet meer... :confused:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan