Ayuda error con macro para obtener número de serie

Tengo un problema con el que quisiera que me ayude por favor.

Yo utilizo la siguiente macro para obtener el número de serie del disco:

Private Declare Function GetVolumeInformation Lib "Kernel32" Alias "GetVolumeInformationA" (ByVal lpRootPathName As String, ByVal lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long) As Long
Sub InsertarSerie() 'para leer serie de disco duro
Dim unidad As String
'Variable que retorna el Numero de serie del volumen
Dim Nserie As Long
'Para almacenar el sistema de archivos
Dim sistemaArchivos As String
'Para retornar el nombre del volumen
Dim volumen As String
'Para saber si funcionó o no la llamada a la función Api
Dim retorno As Long
volumen = String$(255, Chr$(0))
sistemaArchivos = String$(255, Chr$(0))
unidad = "C:\"
'Llamamos a la función, pasándole las variables
retorno = GetVolumeInformation(unidad, volumen, Len(volumen), Nserie, 0, 0, sistemaArchivos, Len(sistemaArchivos))
If Hoja8.Cells(1, 1) = "" Then
Sheets("Parámetros").Range("c16") = Nserie
Sheets("ACCESO").Range("a1") = Nserie
ActiveWorkbook.Sabe
End If
End Sub

De esta manera inserto el número de serie en las hojas arriba indicadas pero hoy la quise abrir en el computador de mi hogar y me salió un error que dice que esto suele suceder cuando se traba con sistemas de 64 bits y me resalta la línea que está en negrita.

Por favor no sé si con estos datos me puedan ayudar.

2 respuestas

Respuesta
1

No estoy seguro pero es muy posible que la maquina de tu hogar tenga instalado un windows de 64 bits en lugar del de 32, tal vez si cambias el KERNEL32 por KERNEL64 en la primera linea de tu código, el problema se solucione aunque los sistemas operativos de 64 tienen cambios mas fuertes que el simple hecho de cambia los números.

Avisame si funciono o no funciono.

Bye

Respuesta

Utiliza esta declaracion

Declare PtrSafe Function GetVolumeInformation& Lib "kernel32" Alias "GetVolumeInformationA" (ByVal lpRootPathName As String, ByVal pVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long)Declare PtrSafe Function GetVolumeInformation& Lib "kernel32" Alias "GetVolumeInformationA" (ByVal lpRootPathName As String, ByVal pVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas