20. september 2000 - 22:38Der er
15 kommentarer og 1 løsning
Word: ByRef argumenttyperne stemmer ikke overens
Hej
Jeg har to moduler i samme projekt.
I det første modul: En txtbox, her skriver man sit navn og adresse
I andet modul: her henter jeg indholdet fra txtNavnOgAdresse (string) og skriver det til et bogmærke i Word MEN jeg kan ikke få andet end en fejlmeddelelse (jf. overskriften)
1. vær sikker på at du bruger den rigtige datatype. 2. prøv (hvis 1. ikke er forkert) at bruge ByVal DitNavn As String, ByVal DinAdresse As String hvis du kan se at forventet input til den funktion du anvender er en String.
Brug Option Explicit, dan kan afhjælpe små sjuske fejl.
Hvornår er det, det går galt i din kode, prøv at sætte MsgBox\'s ind med små beskeder så kan du sikkert hurtigt aflure hvor langt programmet kommer, for så at se om det evt. er her den mener at havde fundet nogle argument typer der ikke passer overrens.
Option Explicit Dim txtReturAdresse As String (jeg henter denne fra en fil) Dim txtNavnOgAdresse As String
Det kokser altså stadig i modul2 hvor jeg vil bruge ReturAdresse. Måske vil det hjælpe hvis jeg viser lidt mere af mit kode
Modul1: frmDokumentInfo ************************************************* Option Explicit -------- Private Sub Userform_Initialize txtNavnOgAdresse = ActiveDocument.Bookmarks(\"bmkNavnOgAdresse\").Range.Text --------- Private Sub txtNavnOgAdresse_Enter() On Error Resume Next txtNavnOgAdresse.EnterKeyBehavior = True End Sub --------- Private Sub txtNavnOgAdresse_Exit(ByVal Cancel As MSForms.ReturnBoolean) On Error Resume Next txtNavnOgAdresse.EnterKeyBehavior = False End Sub --------- Modul2: frmProduktbeskrivelse ************************************************* (her bruger jeg IKKE Option Explict)
Private Sub btnOK_Click() \'Dette OK knap til den anden inputbox On Error Resume Next frmDokumentInfo.Hide Word.System.Cursor = wdCursorWait Application.ScreenRefresh Application.ScreenUpdating = False
SkrivTilBogmaerke \"bmkNavnOgAdresse2\", txtNavnOgAdresse ActiveDocument.UndoClear Unload frmProduktbeskrivelse End Sub ---------- Public Sub SkrivTilBogmaerke(strBookmarkName As String, Optional strNewBookmarkText As String, Optional lngSeekView As Long) On Error Resume Next Dim lngBookmarkStart As Long
If ActiveDocument.Bookmarks.Exists(strBookmarkName) = True Then lngBookmarkStart = ActiveDocument.Bookmarks(strBookmarkName).Start ActiveDocument.Bookmarks(strBookmarkName).Range.Text = strNewBookmarkText ActiveDocument.Bookmarks.Add strBookmarkName, ActiveDocument.Range(lngBookmarkStart, lngBookmarkStart + Len(strNewBookmarkText)) End If End Sub
Jeg kalder begge forms fra This Document --------- Private Sub Document_New() frmDokumentInfo.Show frmProduktbeskrivelse.Show
End Sub ---------- Det skal lige siges at jeg er ved at bygge en skabelon.
Håber denne beskrivelse kan redde mig ud af kniben da jeg har deadline kl. 15:30 idag!
Definitionen af SkrivTilBogmaerke: SkrivTilBogmaerke(strBookmarkName As String, Optional strNewBookmarkText As String, Optional lngSeekView As Long)
JEg er lidt grøn i dette VB så undskyld hvis jeg spørger dumt, men jeg lærer hurtigt til gengæld!
Vil du ikke præcisere lidt mere bestemt hvordan overførsel af data mellem moduler kan lade sig gøre (jf. eks dim Beholder As String) Jeg tildeler jo lige netop txtNavnOgAdresse en fast string i Modul 1:??? Jeg kan altså ikke kalde den i modul 2 (Hvis jeg sætter SkrivTilBogmaerke subben tilbage i Modul1: og skriver derfra er der ingen problemer!)
Det er derfor jeg ville lave nogle Dim\'s i general, når man dimensionerer noget helt ude i general, kan variablen aflæses fra alle moduler, og ligeledes ændres fra alle moduler. Det er ikke nogen prof. løsning, men kan dog bruges til husbehov.
Ligeledes ville jeg sætte Option Explicit helt derud, derfor vil den være gældende i alle modulerne, hvor det er nødvendigt.
Herude sætte man også andre koder op som f.eks. Option Compare og lign.
DNår du laver det skal du ståe i General og Declarations...
status: Jeg har i ModGeneral gjort flg: Option Explicit Public NavnOgAdresse As String Public (osvosv..alle mine erklæringer) ...
Og jeg har nu fundet det egentlige problem! Det der mangler nu er en måde at flytte indholdet af txtNavnOgAdresse.text (fra txtBox´en) til den globale string NavnOgAdresse. Hvorfor virker nedenstående ikke... ?
Private Sub txtNavnOgAdresse_Enter() On Error Resume Next txtNavnOgAdresse.EnterKeyBehavior = True txtNavnOgAdresse.text = NavnOgAdresse End Sub
Jeg har jo netop erklæret NavnOgAdresse som string. Kort sagt hvordan får jeg den adresse som brugeren indtaster til at blive gemt i den globale streng? (eller bare konvertere txtNavnOgAdresse.Text til NavnOgAdresse.String)???
Du skal ligeledes lave det om sådan her: Private Sub txtNavnOgAdresse_Enter() On Error Resume Next txtNavnOgAdresse.EnterKeyBehavior = True NavnOgAdresse = txtNavnOgAdresse.text End Sub
Private Sub txtNavnOgAdresse_Enter() On Error Resume Next txtNavnOgAdresse.EnterKeyBehavior = True NavnOgAdresse = txtNavnOgAdresse.text MsgBox (NavnOgAdresse) End Sub
Nix jeg bliver nødt til at erklære den som public ellers genkender mit modul2 ikke NavnOgAdresse!
Modul2 genkender NavnOgAdresse (men stringen har intet indhold) derfor må jeg i modul1 kopiere indholdet af txtNavnOgAdresse.Text til NavnOgAdresse.String. Her er det egentlige problem nu, det andet virker fint! :-)
THANK´s ALT virker og er mailet videre i systemet!
Jeg hævede lige pointpuljen til 100 point fordi du var så hurtigt og hjælpsom!
Mvh. Jesper HorsMark
Synes godt om
Ny brugerNybegynder
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.