Avatar billede horsmark Nybegynder
20. september 2000 - 22:38 Der 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)

Mvh.
Jesper HorsMark
Avatar billede janmanden Nybegynder
21. september 2000 - 01:08 #1
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.
Avatar billede powell Nybegynder
21. september 2000 - 09:28 #2
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.
Avatar billede horsmark Nybegynder
21. september 2000 - 09:49 #3
Jeg bruger option explicit som følgende i modul1:

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!
Avatar billede horsmark Nybegynder
21. september 2000 - 09:52 #4
Hov! I skal måske også lige se hvor der bliver genereret en fejl: (som overskriften på spørgsmålet)

SkrivTilBogmaerke \"bmkNavnOgAdresse2\", txtNavnOgAdresse

Mvh.
HorsMark
Avatar billede powell Nybegynder
21. september 2000 - 10:53 #5
Hvad definerer du SkrivTilBogmærke til? hvis du har sat den forkert, vil den naturligvis komme med en fejl.

Du ønsker at overføre værdien af stringen bmkNavnogAdresse2 til modulet SkrivTilBogmærke.

Den nemme løsning er jo at dimensioner er e.eks. beholder i general sådan her:

Dim Beholder as String

Så overføre dine dataer til denne beholder, og hent dem derfra igen i dit modul.
Avatar billede horsmark Nybegynder
21. september 2000 - 11:01 #6
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!)

HorsMark :-(

Avatar billede powell Nybegynder
21. september 2000 - 11:11 #7
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...

Avatar billede horsmark Nybegynder
21. september 2000 - 13:31 #8
Oki, så langt så godt

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)???
Avatar billede powell Nybegynder
21. september 2000 - 13:34 #9
Drop Public og kald den Dim...
Avatar billede powell Nybegynder
21. september 2000 - 13:39 #10
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

Avatar billede powell Nybegynder
21. september 2000 - 13:40 #11
Du kan jo lave denne test...

Private Sub txtNavnOgAdresse_Enter()
    On Error Resume Next
    txtNavnOgAdresse.EnterKeyBehavior = True
    NavnOgAdresse = txtNavnOgAdresse.text
    MsgBox (NavnOgAdresse)
End Sub



Avatar billede horsmark Nybegynder
21. september 2000 - 13:42 #12
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! :-)
Avatar billede powell Nybegynder
21. september 2000 - 13:43 #13
Hvis den ikke skriver noget i MsgBox\'en så er det fordi variablen er tom. Sådan kan man altid tjekke variablernes indhold under koden...

Prøv det...

Det du gjorde galt var:

d = 1 \' d bliver lig med 1
a = d \' Værdien fra d overføres til a
d = a \' Værdien fra a overføres til d

Her sætter
Avatar billede horsmark Nybegynder
21. september 2000 - 13:43 #14
hov der var du for hurtig, jeg svarede nix til \"Drop Public og kald den Dim... \"
Avatar billede horsmark Nybegynder
21. september 2000 - 13:44 #15
jeg prøver, jeg tror din hjælp virker!
Avatar billede horsmark Nybegynder
21. september 2000 - 14:25 #16
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
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

Seneste spørgsmål Seneste aktivitet
I går 21:00 Libre Office Impress Af Frank i Andre styresystemer
I går 11:47 VB script Af Jenshentze i Word
I går 11:21 Popup ved opstart Af mort1 i Windows
04/0918:50 Slet lokal konto Af ErikHg i Windows
04/0916:05 Ændre tal i en celle Af xvid i Excel