Aqui les dejo unas rutinas que he hecho y comentado para que logren comprenderlas.
Espero que les sirva.
Private Function Bin2Dec(NumBinario As String) As Long
'Declarar variable LOCAL a utilizar
Dim Recorre As Integer
'Asegurarse de 3 cosas aqui: Que la longitud de la cadena ingresada sea mayor a cero, que el valor ingresado sea numerico y que no haya signos negativos.
'Si no se cumple al menos una de estas tres condiciones, la funcion devolvera cero.
If Len(NumBinario) < 1 Or Not IsNumeric(NumBinario) Or NumBinario < 0 Then Exit Function
'Recorrer caracter por caracter usando un For
For Recorre = 0 To Len(NumBinario) - 1
'Recorrer caracter por caracter. Establecer la condicion que el caracter seleccionado debe valer 1.
'En caso que se cumpla la condicion sumar al resultado parcial 2 elevado a la posicion del caracter seleccionado.
If Mid(NumBinario, Len(NumBinario) - Recorre, 1) = "1" Then Bin2Dec = Bin2Dec + 2 ^ Recorre
Next
End Function
Private Function Dec2Bin(NumDecimal As Integer) As String
'Repetir siempre y cuando NumDecimal sea mayor a 1
Do While NumDecimal > 1
'El resultado parcial de la función es igual al resto de la división mas el resultado parcial anterior.
Dec2Bin = NumDecimal Mod 2 & Dec2Bin
'Dividir NumDecimal por dos y eliminar la parte decimal utilizando la instruccion FIx.
NumDecimal = Fix(NumDecimal / 2)
Loop
'El resultado de la funcion es igual al resto de la ultima division mas el resultado obtenido durante el do while
Dec2Bin = NumDecimal & Dec2Bin
End Function
Ejemplos de USO:
Para mostrar en un cuadro de mensaje el numero decimal partiendo de un binario:
msgbox bin2dec("10100101")
Para mostrar en un cuadro de mensaje el numero binario partiendo de un decimal:
msgbox dec2bin(129)
Saludos.