bravo  , considerato che hai fatto tutto da solo dimostri senz'altro che non hai sprecato tempo
Ci sono alcune cose.
Come sai a differenza dei tipi udt del vecchio vb6 nelle structure del DotNet è possibile scrivere delle procdure.
E' proprio quell oche devi fare per dimensionare gli array al loro interno
ad esempio
	
	
	
		Codice:
	
	
		Public Structure StrNumeriEstrazione
     
        Dim Estratto() As Integer
    Sub DimensionaEstratto
        redim Estratto (5)
    End Sub
    End Structure
	 
 
la cosa va applicata  anche alle altre strutture che contengono array , un 'altra cosa i membri non è necessario dichiararli con public  vedi che io ho messo Dim
Public PrimaDelMeseBool As Long
Public UltimaDelMeseBool As Long
questi valori non conviene registrarli ma calcolarli con un'apposita funzione
Numero as long
in dotnet il long non è il long del vb6 

  il long del vb6 in dotnet si chiama integer , non cambia molto ai fini del tuo programma ma non credo che  che un numero di estrazione possa aver bisogno di un numero a 8 byte .. gia il long del vb6 era troppo.
	
	
	
		Codice:
	
	
		 Public PercorsoDatabase As String = Application.StartupPath() + "\Archivio\"
	 
 
i valori di configurazioni non metterli hardcoded ma crea una classse/modulo che possa leggerli da un file ini ,  oddio i puristi  mi ammazzeranno , in verità dovresti leggerli dai setting , solo che i setting sono una gran rottura di palle sia per il percorso dove li va a creare sia per modificarli eventualmente a mano. Invece il buon vecchio file ini sta nel path dell'eseguibile.
I nomi delle ruote edelel sorti invece li puoi lasciare hardcoded
.... inclusa una booleana che mi indicherà se l'archivio è stato letto e nel caso mi fa proseguire:
piu che gestire quella variabile crea una funzione che torni sempre un boolean  che testa l'array delle estrazioni , se contiene elementi ovviamente deve tornare true
l'array delle estrazioni deve rimanere incapsulato nella classe quindi dichiaralo con private come tutte le altre variabil idelle classi , si accede alle variabili eventualmente tramite le proprietà.
nelle classi del dot net c'è il costruttore  quindi mediante la sub new appena istanzi la classe questa viene eseguita ed è li che si fa l'inizializzazione delle variabili
  
	
	
alcune funzioni di utilità che possono servirti nell'intero progetto vanno trasferiti in un modulo/classe a parte
FileEsistente ad esempio è utile ma non devi dichiararlo nella classe che lo usa senno se in un'altra circostanza ti dovesse servire dovresti riscriverlo.
e cosi tutte le altre funzioni che come logica sono simili all'esempio.
non vedo la procedura alimentaEstrazioni 
 
in compenso ti faccio il regalo di un modulo per gestire i parametri di configurazione , cosi stai un pezzo aventi , ci sono solo 2 funzioni pubbliche e sono quelle che devi usare per leggere e scrivere i valori.
I valori possibili si gestiscono aggiungendo i valori al tipo enumerato , per ora c'è solo la voce Archivio.
Ciao ..
	
	
	
		Codice:
	
	
		Imports System.Collections.Specialized
Imports System.Configuration
Public Module ModAppConfig
    ' ****  FUNZIONI PER LEGGERE IL FILE INI
    ' *******************************************
    Private Declare Unicode Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringW" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Int32, ByVal lpFileName As String) As Int32
    'la funzione WritePrivateProfileString dichiarata come Unicode
    Private Declare Unicode Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringW" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpString As String, ByVal lpFileName As String) As Long
    Private sFileIni As String = Application.ExecutablePath & ".ini"
    Public Enum eValoriAppConfig
        Archivio
    End Enum
    Private Sub iniLeggiRigaIni(ByVal sMenu As String, ByVal keyword As String, ByRef sValueRitorno As String, ByVal sPathFile As String, ByVal retval As Long)
        Dim stringa As String
        sValueRitorno = ""
        sMenu = UCase(sMenu)
        keyword = UCase(keyword)
        stringa = Space$(1000)
        retval = GetPrivateProfileString(sMenu, keyword, "", stringa, 1000, sPathFile)
        If retval <> 0 Then sValueRitorno = Mid$(stringa, 1, retval)
    End Sub
    Private Sub iniScriviRigaIni(ByVal sMenu As String, ByVal keyword As String, ByVal sValueDefault As String, ByVal sPathFile As String, ByVal retval As Long)
        sMenu = UCase(sMenu)
        keyword = UCase(keyword)
        retval = WritePrivateProfileString(sMenu, keyword, sValueDefault, sPathFile)
    End Sub
    Private Function GetNomeValoreAppCfg(ByVal eTipo As eValoriAppConfig) As String
        Return eTipo.ToString
    End Function
    Public Function GetValoreCfg(ByVal eTipo As eValoriAppConfig) As String
        Dim sValue As String = ""
        If sFileIni = "" Then
            Return My.Settings(GetNomeValoreAppCfg(eTipo))
        Else
            Call iniLeggiRigaIni("CONFIG", GetNomeValoreAppCfg(eTipo), sValue, sFileIni, 0)
            Return sValue
        End If
    End Function
    Public Sub SalvaValoreCfg(ByVal eTipo As eValoriAppConfig, ByVal sValue As String)
        If sFileIni = "" Then
            My.Settings(GetNomeValoreAppCfg(eTipo)) = sValue
            My.Settings.Save()
        Else
            Call iniScriviRigaIni("CONFIG", GetNomeValoreAppCfg(eTipo), sValue, sFileIni, 0)
        End If
    End Sub
End Module