如何在执行vba之前检查命令是否可行?

问题描述:

我想使用宏来改变长长的单元格列。单元格是数字或文本。数字,虽然,存储为文本,我想转换它们。我想喜欢如何在执行vba之前检查命令是否可行?

`Range("A1").Value = Int(Range("A1").Value)` 

,这将被存储为文本数号码时,工作正常,但显然它不会是文字,没有数字的值所在工作。如何设置命令以查看,如果可以进行此转换,那么请执行此操作?

+0

'如果ISNUMERIC(范围( “A1”)值then'也许...... – xQbert

使用IsNumeric。为了避免将空白转换为零,请检查空白。

if IsNumeric(Range("A1").Value2) and Not IsEmpty(Range("A1")) then 
Range("A1").Value = Int(Range("A1").Value) 
end if 
+1

为什么你在条件中使用'Value2'和而不是“价值”? – Black

+1

更多的习惯,给你实际的价值,不受任何单元格格式的干扰 – cyboashu

+2

@EdwardBlack来自MS docs:“该属性和Value属性之间的唯一区别是Value2属性不使用货币和日期数据类型您可以使用Double数据类型将使用这些数据类型格式化的值作为浮点数返回。“ –

Range.TextToColumns method一起执行它们。 VBA的开销将负责错误控制。

with worksheets("Sheet1") 
    with intersect(.usedrange, .columns(1)) 
     .numberformat = "General" 
     .TextToColumns DataType:=xlFixedWidth, FieldInfo:=Array(0, 1) 
    end with 
end with 

我想这应该这样做:

With Range("A:A") ' column A 
    .NumberFormat = "General" 
    .Value = .Value   ' Excel should auto convert the strings to numbers 
End With 
+0

如果列A中没有日期或货币,则** [.Value](https://msdn.microsoft.com/en-us/library/office/ff195193.aspx)= [.Value2](https:/ /msdn.microsoft.com/en-us/library/office/ff193553.aspx)**可能稍好一些。 – Jeeped

+0

甚至更​​好'.Value2 = .Value2':] – Slai

+0

可能只是编程风格,但我倾向于使用默认的.Value作为目标,.Value2作为源。 – Jeeped