lht

I'm not sure what you mean by 'hang', but you might want to try:

[vba]
Option Explicit
Sub Convert_to_Values()
Dim oCell As Object
For Each oCell In Selection
oCell.NumberFormat = "General"
oCell.Value = oCell.Value
Next oCell
Set oCell = Nothing
End Sub
[/vba]

Selection is a range, so you don't want to work through each range in a range. Insted you want to work through each object in the range.

.Value = .Value is equivalent to paste special, if your cells are formatted as text this may not fix the problem hence changing the number format before setting the values. If this doesn't work you may want to try multiplying each cell by 1 (.value = .Value * 1). Although this won'y work if your selection is a mix of text and numbers.