• 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.

Excel VBA vraag

Status
Niet open voor verdere reacties.

Withaar

Verenigingslid
Lid geworden
8 apr 2001
Berichten
3.551
Vanuit een applicatie krijg ik regelmatig een bestand in excel.
Het probleem is dat getallen als tekst opgeslagen zijn.

Door een F2 en een Enter te geven re-enter ik de data waardoor Excel er getallen van maakt.

Nu dacht ik een macro te kunnen schrijven die dit voor me doet.

Sub Reenter()
Dim Lkolom As Integer
Dim Lrij As Long
Dim x As Integer
Dim y As Integer
Dim LCel As Range
' Leeg, dan stoppen
If WorksheetFunction.CountA(Cells) > 0 Then
' laatste rij
Lrij = Cells.Find(What:="*", After:=[A1], _
SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
' laatste kolom
Lkolom = Cells.Find(What:="*", After:=[A1], _
SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column

For y = 1 To Lrij
For x = 1 To Lkolom
Cells(y, x).Activate
SendKeys "{F2}{Enter}"
Next x
Next y
End If
End Sub

Dit werkt echter niet zoals ik wil.
Het probleem lijkt de Enter te zijn, hierdoor kom je in een andere cel, afhankelijk van je excel instellingen naar recht of naar beneden (links en naar boven kan ook nog, maar die instelling gebruik ik eigenlijk nooit).
De for-next lussen lijken hier door niet goed te werken, maar misschien is het totaal iets anders...

Iemand een oplossing/idee hoe ik dit voor elkaar krijg?
 
Laatst bewerkt:
Code:
Sub Text_To_Numeric()
    Dim c As Range
    Dim MyRange As Range
    Set MyRange = Range("A1:A10")
    For Each c In MyRange
        If (IsNumeric(c.Value)) Then c.Value = c.Value * 1
    Next c
End Sub
Range even aanpassen. Succes.
 
Net niet helemaal.

Alle lege cellen in de range krijgen nu een 0.
Lege cellen zou de macro moeten overslaan.
En ook percentages zouden omgezet moeten worden.

Heb nu dit;
Sub Text_To_Numeric()
Dim c As Range
Dim MyRange As Range
Set MyRange = Range("A1:Z200")
For Each c In MyRange
If (c.Value) = Empty Then GoTo nextc Else
If (IsNumeric(c.Value)) Then c.Value = c.Value * 1
nextc:
Next c
End Sub

wat voor de lege cellen al goed werkt.
 
Zwietzzzzz?

Code:
Sub Text_To_Numeric()


Dim MyRange As Range
Dim Cl As Range
Dim Txt As String

Set MyRange = ActiveSheet.UsedRange

For Each Cl In MyRange

    If Len(Trim(Cl & "")) > 0 Then
        If IsNumeric(Cl.Value) Then
            Cl.NumberFormat = "General"
            Cl.Value = CDbl(Cl.Text)
        ElseIf IsNumeric(Replace(Cl.Text, "%", "")) Then
            Txt = Cl.Text
            Cl.NumberFormat = "0.00%"
            Cl.Value = CDbl(Replace(Txt, "%", "")) / 100
        End If
    End If
Next Cl

End Sub
 
Ga nog even goed testen, maar lijkt te zijn wat ik zoek.

Bedankt!
 
Nou werkt prima.

Nu moet ik er nog achter komen hoe ik dit voor circa 100 medegebruikers handig kan inregelen.
Om bij elk nieuwe bestand een macro aan te maken is niet erg handig.
 
Exporteer de module
en voeg hem toe aan de prsnlk.xls
van al die mensen

Of als er toch niets in hun prsnlk.xls bestand staat:
Verplaats de module naar jouw prsnlk.xls
en plaats bij iedereen een kopie in de Excel map
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan