Come determinare la versione di Excel dell’utente

Ci sono lievi differenze tra le versioni di Excel. Se è necessario determinare quale versione di Excel è in esecuzione, utilizza Application.Version. Restituirà un numero o una stringa di testo a seconda della versione. Ad esempio, 8.0e o 9.0. Quello che segue è un esempio per determinare la versione di Excel:

Sub ExcelVersion()
    MsgBox Val(Application.Version)
End Sub

 

  • 8 – Excel 97
  • 9 – Excel 2000 (Mac: 2001)
  • 10 – Excel 2002 (XP)
  • 11 – Excel 2003 (Mac: 2004)
  • 12 – Excel 2007 (Mac: 2008)
  • 14 – Excel 2010 (Mac: 2011)
  • 15 – Excel 2013 (Mac: 2016)
  • 16 – Excel 2016

Da Office 2016 in poi, Microsoft non ha più aggiornato il numero di Application.Version – tutte le versioni mostrano 16 – non dandoti modo di distinguere tra le versioni. Ma, ancora peggio, non c’è nemmeno modo di differenziare le versioni in abbonamento di Office 365. Poiché ora ci sono cose che funzionano in modo diverso per Office 365 rispetto alle licenze perpetue, questo è un altro potenziale problema per gli sviluppatori.

Dopo aver scavato un po’, abbiamo trovato una chiave di registro che sembra apparire in Office 2019 e Office 365, ma non esiste in Office 2016.

Detto questo, abbiamo messo insieme questa Function. Il suo scopo è abbastanza semplice: testare l’applicazione e vedere se si tratta di una licenza perpetua o di un’installazione in abbonamento e restituire il numero di versione. Quindi chiunque abbia installato Office 365 dovrebbe ricevere 365, altrimenti otterrà un numero di quattro cifre che rappresenta la versione che ha installata.

Function AppVersion() As Long
'Verifica della versione di office

Dim registryObject As Object
Dim rootDirectory As String
Dim keyPath As String
Dim arrEntryNames As Variant
Dim arrValueTypes As Variant
Dim x As Long

Select Case Val(Application.Version)

Case Is = 16
'Controlla l'esistenza di una chiave di licenza
keyPath = "Software\Microsoft\Office\" & CStr(Application.Version) & "\Common\Licensing\LicensingNext"
rootDirectory = "."
Set registryObject = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & rootDirectory & "\root\default:StdRegProv")
registryObject.EnumValues &H80000001, keyPath, arrEntryNames, arrValueTypes

On Error GoTo ErrorExit
For x = 0 To UBound(arrEntryNames)
If InStr(arrEntryNames(x), "365") > 0 Then
AppVersion = 365
Exit Function
End If
If InStr(arrEntryNames(x), "2019") > 0 Then
AppVersion = 2019
Exit Function
End If
Next x

Case Is = 15
AppVersion = 2013
Case Is = 14
AppVersion = 2010
Case Is = 12
AppVersion = 2007
Case Else
'Troppo vecchia per preoccuparsene
AppVersion = 0
End Select

Exit Function

ErrorExit:
'Versione 16, ma senza chiave di licenza. Dev'essere Office 2016
AppVersion = 2016

End Function

Tags:

Ti è stato utile?