Avatar billede stry Nybegynder
02. december 2006 - 15:58 Der 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
Avatar billede kabbak Professor
02. december 2006 - 16:04 #1
teVisDato =  DateValue(Me.dtpDato)
Avatar billede stry Nybegynder
02. december 2006 - 16:16 #2
Jeg skal lige forstå rigtigt - hvor vil du ændre?

Jeg kan som sagt se at Public-variablen "teVisDato" får tildelt den rigtige værdi når jeg trykker "ok".
Avatar billede stry Nybegynder
02. december 2006 - 16:17 #3
"teVisDato" = "dteVisDato"
Avatar billede kabbak Professor
02. december 2006 - 16:31 #4
Public Function VisDato(dteVisDato) As Date
frmDato.Show vbModal
        VisDato = dteVisDato
        'MsgBox dteVisDato & vbCr & VisDato & vbCr & "Funk slut" 'debug
End Function

prøv denne, ellers er jeg på bar bund ?
Avatar billede stry Nybegynder
02. december 2006 - 16:35 #5
Det virker som om "dteVisDato" bliver nulstillet når "frmDato" unloades, men jeg ved ikke hvordan jeg undgår det?
Avatar billede stry Nybegynder
02. december 2006 - 16:39 #6
Kabbak, den går ikke for så vil funktionen jo ha' et parameter når jeg kalder den.
Avatar billede kabbak Professor
02. december 2006 - 17:09 #7
Jeg har testet lidt i VBA excel, jeg ved ikke om det er der du programmere i ?


prøv at smide dette i et almindelig modul


'****************Class Module***********************
Public dteVisDato As Date

Public Function VisDato() As Date
  VisDato = dteVisDato
frmDato.Show vbModal
   
        'MsgBox dteVisDato & vbCr & VisDato & vbCr & "Funk slut" 'debug
End Function
Avatar billede stry Nybegynder
02. december 2006 - 17:41 #8
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é
Avatar billede stry Nybegynder
02. december 2006 - 17:42 #9
jeg programmerer i VB 6 og det skal jo ende ud med en dll så jeg kan ikke bruge VBA.
Avatar billede stry Nybegynder
02. december 2006 - 17:47 #10
Kabbak >>17:09:43<< , den rækkefølge duer ikke da brugeren jo vælger datoen i formularen
Avatar billede helmet Nybegynder
02. december 2006 - 18:26 #11
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
Avatar billede stry Nybegynder
02. december 2006 - 18:44 #12
Superlækkert, Helmet - smid et svar :-)
Avatar billede helmet Nybegynder
02. december 2006 - 18:47 #13
Javel, et svar :)
Avatar billede stry Nybegynder
02. december 2006 - 18:50 #14
Mange tak for hjælpen.

Kan du forklare lidt om hvordan det fungerer for jeg kan ikke helt gennemskue det.
Avatar billede helmet Nybegynder
02. december 2006 - 19:20 #15
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.

Er der andet?
Avatar billede stry Nybegynder
02. december 2006 - 19:23 #16
Smart, den var jeg ikke selv kommet på :-)

..og nej, der var ikke andet - lige nu :)

endnu engang tak for hjælpen.
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester