24. september 2017 - 17:21Der er
15 kommentarer og 1 løsning
Fjerne tekst men bevare tal og formler
Hej igen
Nu er jeg på spanden igen, har søgt på google og fundet dette som er tættest på.
Private Sub Worksheet_Change(ByVal Target As Range) Dim cell As Range Application.EnableEvents = False For Each cell In Target If Not Application.Intersect(cell, Range("A1:D4")) Is Nothing Then If Not IsNumeric(cell.Value) Then cell.Value = vbNullString End If End If Next cell Application.EnableEvents = True End Sub
Denne gør, at man kun kan skrive tal. Men kunne godt tænke mig, hvis man nu skrev. f.eks. h293, at den så kun skrev 293. Samme med hvis #-293% bliver også til 293. Dog er der nogle formler også, hvis det kan lade sig gøre at bevare dem med mindre man selv skriver i feltet.
Lige nu drejer det om felt A2:A5 og C2:D5, giver det mening?
Private Sub Worksheet_Change(ByVal Target As Range) Dim cell As Range Dim lCount as Long, sString as String Application.EnableEvents = False For Each cell In Target If Not Application.Intersect(cell, Range("A1:D4")) Is Nothing Then if Left(Target.text)="=" Then Exit For for lCount=1 to len(Target) if IsNumeric(Mid(Target.Value,lCount,1)) then sString=sString & Mid(Target.Value.lCount,1) Next Target.Value=sString If Not IsNumeric(cell.Value) Then cell.Value = vbNullString End If End If Next cell Application.EnableEvents = True End Sub
Private Sub Worksheet_Change(ByVal Target As Range) Dim cell As Range Dim lCount As Long, sString As String Application.EnableEvents = False For Each cell In Target On Error GoTo MyEnd If Not Application.Intersect(cell, Range("A1:D5")) Is Nothing Then If Left(Target.Formula, 1) = "=" Then Exit For For lCount = 1 To Len(Target) If IsNumeric(Mid(Target.Value, lCount, 1)) Then sString = sString & Mid(Target.Value, lCount, 1) Next Target.Value = sString If Not IsNumeric(cell.Value) Then cell.Value = vbNullString End If End If Next cell
If Not Application.Intersect(Target, Range("C2:C25")) Is Nothing Then If Target.Value > 100 Then Target.Value = 100 End If
Application.EnableEvents = True On Error GoTo 0 MyEnd: End Sub
Blev enig med mig selv, det kun skal være over 100. Desuden, hvis cellen er formateret til procent - så virker det slet ikke. Kan man trylle her? Det er i min C række som er procent. Er det ellers rigtigt, det som jeg forsøger på?
Private Sub Worksheet_Change(ByVal Target As Range) Dim cell As Range Dim lCount As Long, sString As String Application.EnableEvents = False
If Not Application.Intersect(Target, Range("C2:C25")) Is Nothing Then If Target.Value > 100 Then Target.Value = 100 goto MyEnd End If
For Each cell In Target On Error GoTo MyEnd If Not Application.Intersect(cell, Range("A1:D5")) Is Nothing Then If Left(Target.Formula, 1) = "=" Then Exit For For lCount = 1 To Len(Target) If IsNumeric(Mid(Target.Value, lCount, 1)) Then sString = sString & Mid(Target.Value, lCount, 1) Next Target.Value = sString If Not IsNumeric(cell.Value) Then cell.Value = vbNullString End If End If Next cell
Application.EnableEvents = True On Error GoTo 0 MyEnd: End Sub
prøv denne jeg har flyttet testen af C? så man kan ryge til slut før anden test
Det er ligesom om, at jeg skal lukke excel ned hver gang der sker en fejl - før VBA koden virker igen. Kan det være rigtigt, eller er der noget alternativt så det virker?
Lige nu, hvis cellen er formateret til procent, så virker det ikke. Kan man gøre, så koden selv tilføjer % efter tallet i stedet for formatering til procent? Ellers så virker rimeligt, det eneste er bare, hvis man sætter - (minus) foran tallet, så skriver den stadig tallet. Hvor i det andet VBA kode, der fjernede den bare - (minus) og skrev det tal.
Private Sub Worksheet_Change(ByVal Target As Range) Test Target, Range("A2:B25") ' Kolonner før C Test Target, Range("E2:F25") ' kolonner efter C If Not Intersect(Target, Range("C2:C25")) Is Nothing Then ' Formater c til procent If Target.Value > 1 Then Target.Value = 1 End If End Sub
Private Sub Test(ByVal Target As Range, ByVal rRange As Range) Dim sString As String, dTal As Double, Icount As Integer If Not Intersect(Target, rRange) Is Nothing Then sString = Target.Text For Icount = 1 To Len(sString) If IsNumeric(Mid(sString, Icount, 1)) Then sString = Mid(sString, Icount, Len(sString) - Icount + 1) Exit For End If Next dTal = Val(sString) If Not Target.Value = dTal Then Target.Value = dTal End If
Takker for hjælpen Jan, endnu engang er du dagens mand i skysovs :o).
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.