当通过VBA调用时,dec2bin不按预期工作

时间:2013-10-12 19:00:26

标签: vba excel-vba excel-formula excel

Excel具有此功能dec2bin(num,places),效果很好。但是当我在VBA中使用它时,我得到了结果,但是如果msb和后面的位为0,格式就会脱离。

我希望获得:

0001代替1

0101代替101

当我将其重定向到电子表格时,我会观察到:

Range("I2").Value = Mid(y, 2, 3)

如果我将它存储在变量中并尝试访问这些位,我就把它弄好了,但是如果我不能用上面提到的方式把它放在电子表格中就没用了。

有任何想法如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

尝试

Sub Sample()
    Dim sVal As String

    sVal = Application.Evaluate("=DEC2BIN(7, 4)")

    Debug.Print sVal
End Sub

或者,如果您不想对Places进行硬编码,请使用此

Sub Sample()
    Dim sVal As String
    Dim nPlace  as Long

    nPlace = 4

    sVal = Application.Evaluate("=DEC2BIN(7," & nPlace & ")")

    Debug.Print sVal
End Sub

这将为您提供0111而不是111

修改

如果要将其输出到Excel单元格,那么您有两个选项

A)将单元格格式化为文本,然后使用

Sub Sample()
    Dim sVal As String
    Dim nPlace As Long

    '~~> Number of places
    nPlace = 4

    sVal = Application.Evaluate("=DEC2BIN(7," & nPlace & ")")

    ThisWorkbook.Sheets("Sheet1").Range("A1").Value = sVal
End Sub

或者,您可以使用.Numberformat通过代码格式化单元格。

OR

B)在Excel中输入数据之前使用'

Sub Sample()
    Dim sVal As String
    Dim nPlace As Long

    '~~> Number of places
    nPlace = 4

    sVal = Application.Evaluate("=DEC2BIN(7," & nPlace & ")")

    ThisWorkbook.Sheets("Sheet1").Range("A2").Value = "'" & sVal
End Sub