我正在寻找以下任务的解决方案:
一般环境:我正在开发一个VBA功能工具箱,用于处理教育优惠的Access数据库中的数据。这包括各种字符串操作和主要通过SQL的数据库字段操作。
在我的一个函数中,我必须连续处理四个数据库字段的不同状态,它们的值为NULL或不为NULL。由于每个字段可以是NULL或非NULL,我们有16种可能的情况:
0-0-0-0,0-0-0-1,0-0-1-0,0-0-1-1依此类推,显然与:
完全相同 0000
,0001
,0010
,0011
,0100
,...,1111
,即十进制0的二进制表示形式15。
为了不对每个案例进行硬编码,我希望通过从0到15的计数来使用数字0-15的二进制表示。
在伪代码中:
i = 0
For i = 0 To 15
arrX(): 0000
StateOfField01 = arrX(0) [which is 0, in this case]
StateofField02 = arrX(1) [dito]
StateOfField03 = arrX(2) [dito]
StateofField04 = arrX(3) [dito]
Do something with the fields, depending on their state
i = i + 1
Next i
到目前为止,我对自己的想法很满意,但有一件事我不知道如何解决:
如何从i的二进制表示中获取每个包含四位数的数组?
答案 0 :(得分:1)
这是一个将十进制数转换为二进制字符串的函数。
Public Function GetBinary(Number As Long) As String
'********************
'Code Courtesy of
' Paul Eugin
'********************
Dim resultStr As String, nLen As Integer
Do While Number > 0
resultStr = resultStr & (Number Mod 2)
Number = Int(Number / 2)
Loop
GetBinary = Format(StrReverse(resultStr), "0000")
End Function
该功能将采用"数字"作为您想要找到二进制等效项的参数。代码末尾的Format函数将确保返回值至少为4个字面值。所以,如果您通过示例,
? GetBinary(5)
0101
答案 1 :(得分:0)
基于PaulFrancis'输入,我发现以下解决方案回答了我的正确需求。
重要的补充是1)" ByVal"对于调用中的参数,以便可以从另一个应该保留for-next计数器的过程内部调用该函数; 2)测试" Number"是0,以前没有涉及。
Public Function GetBinary(ByVal Number As Integer) As String
Dim resultStr As String
If Number = 0 Then
resultStr = "0"
Else
Do While Number > 0
resultStr = resultStr & (Number Mod 2)
Number = Int(Number / 2)
Loop
End If
GetBinary = Format(StrReverse(resultStr), "0000")
End Function
'-----------------------------------
Public Sub TestBinaryToString()
'Purpose: Testing the GetBinary() function:
'output will be displayed in the Immediate Window
Dim i As Integer
Dim strBin As String
For i = 0 To 15
strBin = GetBinary(i)
Debug.Print i; " --> "; strBin
Next i
End Sub