02. december 2006 - 15:58Der er
15 kommentarer og 1 løsning
dll-funktion returnerer intet
Jeg har en formular med en dato-vælger og "ok" og "Annuller"-knap. Men når jeg laver min activeX-dll returnerer VisDato-funktionen 00:00:00
Når jeg kører msgbox'en i cmdOk_Click-sub'en viser den de rigtige værdier.
Hvad er der galt?
På forhånd tak :-)
'****************Form Code***********************'' Private Sub cmdAnnu_Click() Unload Me End Sub
Private Sub cmdOk_Click() dteVisDato = Me.dtpDato.Value 'MsgBox "dtp værdi: " & Me.dtpDato.Value & vbCr & "vardteDato: " & dteVisDato 'debug Unload Me End Sub '***************************************************
'****************Class Module*********************** Public dteVisDato As Date
Public Function VisDato() As Date frmDato.Show vbModal VisDato = dteVisDato 'MsgBox dteVisDato & vbCr & VisDato & vbCr & "Funk slut" 'debug End Function
Public Function VisDato(dteVisDato) As Date frmDato.Show vbModal VisDato = dteVisDato 'MsgBox dteVisDato & vbCr & VisDato & vbCr & "Funk slut" 'debug End Function
Jeg har fundet ud af at jeg ikke kan tildele en værdi til "dteVisDato" i Class modulet fra formular-koden (Option Explicit kunne have sparet mig for meget!), så hvad gør jeg nu?
Jeg skal jo 'på tværs' af de to kodemoduler, altså fra formularen til Class modulet - nogen med en god idé
Den kan ikke finde du af at din globale variabel ligger i en klasse, helt dirty kan du oprette et modul og flytte Public dteVisDato As Date over i modulet, så kan du sætte den fra din form og senere læse den gemte værdi i klassen som starter dll'en
Synes dog det ville være lidt pænere hvis du fx lavede en init funktion på formen som tager en dato variabel med som parameter. Fx ******************** FORM KODE *********************** Option Explicit
Private mDato As Date
Private Sub cmdAnnuller_Click() Unload Me End Sub
Private Sub cmdOk_Click() mDato = dtpDato.Value Unload Me End Sub
Public Sub Init(dato As Date) mDato = dato Me.Show vbModal dato = mDato End Sub
************ CLASS ***************** Public dteVisDato As Date
Public Function VisDato() As Date dim tmp as Date frmDato.Init tmp VisDato = tmp End Function
Skal prøve, går vel lidt på ByRef/ByVal. VB sender som default variabler som referencer (ByRef), kort sagt betyder det at alle ændringer på variablen slår igennem hele vejen tilbage, endda udenfor funktionen. Her vil det sige at tmp bliver opdateret når jeg ændrer dato variablen i Init funktionen.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.