Toon posts:

[VB6] Variabelen naar public subs?

Pagina: 1
Acties:

Verwijderd

Topicstarter
G'morgen, hier ben ik weer met weer een nieuwe vraag :)

Dit doe ik in een programma:
code:
1
2
3
4
5
6
Private Sub start_Click()
Set mp2word = CreateObject("mp2word.dll")
mp2word.mswstart MSWord_visible = True
mp2word.mswnew MSWord_FileName = "test.doc"

End Sub

btw: mp2word wordt public gedefinieerd als object

en de dll functie ziet er zo uit:
code:
1
2
3
4
5
6
7
8
9
Public Sub MSWstart(MSWord_visible As Boolean)
    ' Het starten van Word,
    ' parameter is visible (bool): bepaalt of Word
    ' hidden of visible wordt uitgevoerd
    On Error Resume Next
    Set msword = CreateObject("word.application")
    msword_exists = True
    msword.visible = MSWord_visible
End Sub

Maar hij doet het gewoon niet. De variabele MSWord_visible krijgt in de Public Sub MSWstart zelfs de waarde 'false'! Iemand enig idee wat er fout gaat? Het zal wel weer iets heel stoms zijn...

Verwijderd

Named-parameters moet je meegeven met ':='
Dus iets van: MsgBox Title:="Hello World"

Jij geeft nu het resultaat van 'MSWord_visible = True' mee, en dat is dus 'False'. Hierbij neem ik even aan dat je geen 'Option Explicit' aan hebt staan...

Het wordt dus nu:
code:
1
mp2word.mswstart MSWord_visible:=True

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 15-09 19:11

Crazy D

I think we should take a look.

Op vrijdag 04 januari 2002 09:55 schreef CyberKnutselaar het volgende:
G'morgen, hier ben ik weer met weer een nieuwe vraag :)
:D toch altijd leuk, zo'n stukje zekerheid. Weet je iig dat er minstens 2 VB vragen op een dag komen :P
Dit doe ik in een programma:

en de dll functie ziet er zo uit:
code:
1
2
3
4
5
6
7
8
9
Public Sub MSWstart(MSWord_visible As Boolean)
    ' Het starten van Word,
    ' parameter is visible (bool): bepaalt of Word
    ' hidden of visible wordt uitgevoerd
    On Error Resume Next
    Set msword = CreateObject("word.application")
    msword_exists = True
    msword.visible = MSWord_visible
End Sub
Ik zie daar iets heel lelijks staan. Het begint met On en enidigt met Error Resume Next.
Maak er dan op z'n minst On Local Error... van, maar haal 'm voorlopig eens weg en kijk eens wat voor fout je krijgt...

[edit]
En Debbus heeft idd gelijk ;)

Exact expert nodig?


Verwijderd

Topicstarter
Op vrijdag 04 januari 2002 10:03 schreef CrazyD_at_work het volgende:

[..]

:D toch altijd leuk, zo'n stukje zekerheid. Weet je iig dat er minstens 2 VB vragen op een dag komen :P
[..]
Leuk he ;) Oplossing werkt... maar die := kun je ook gewoon weglaten, alleen moest ik dan ook even de variabele weglaten, en alleen de waarde laten staan ;) Van die kleine dingen...

Verwijderd

Maar wat dus belangrijker is: niet zomaar 'On Error Resume Next' gebruiken en elke module beginnen met 'Option Explicit'

  • baskabas
  • Registratie: December 2000
  • Laatst online: 05-04 12:26
Dit werkt ook! ;)
code:
1
mp2word.mswstart True

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 15-09 19:11

Crazy D

I think we should take a look.

Op vrijdag 04 januari 2002 10:16 schreef CyberKnutselaar het volgende:
Leuk he ;) Oplossing werkt... maar die := kun je ook gewoon weglaten, alleen moest ik dan ook even de variabele weglaten, en alleen de waarde laten staan ;) Van die kleine dingen...
Die := kun je gebruiken om optionele parameters mee te geven, zonder eerst ,,,, neer te moeten zetten om eerdere optionele params over te slaan...
Private Sub Test(Optional p1 As String, Optional p2 As string)

Kun je dus aanroepen als
Call Test(p2:="Blah")

Al vind ik dat zelf niet zo prettig werken, maja... Je komt ze vaak tegen in Word macro's, vooral als je ze record i.p.v. zelf schrijft...

Exact expert nodig?


Verwijderd

Topicstarter
Weer iets anders... ik ga maar verder in dit topic ;) Ik start dus in m'n dlletje Word. Die is visible, en daar worden allerlei streken mee uitgehaald. Nu is natuurlijk de kans dat de gebruiker Word afsluit. Dan loopt dus die hele dll in de soep, want het object dat aan word gekoppeld was is ongeldig. Hoe controleer ik of dat object nog werkelijk wat is? als ik doe
code:
1
2
3
if (mijnobject <> "") then
   ...
end if

gaat ie flippen als het object al niet meer bestaat! Dan heb ik alsnog een runtime error, en dat wil ik niet |:( Ik heb jullie weer nodig ;)

Verwijderd

Object kun je controleren met 'Is Nothing'.
code:
1
2
3
If objWordApplication Is Nothing Then
   MsgBox "Huh!? Waar is me Word naar toe??"
End If

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 15-09 19:11

Crazy D

I think we should take a look.

Op vrijdag 04 januari 2002 11:16 schreef CyberKnutselaar het volgende:
code:
1
2
3
if (mijnobject <> "") then
   ...
end if
Als het object netjes opgeruimt wordt, kun je met If... Is Nothing dat afvangen...
Is eigenlijk wel gewoon manual werk hoor, ik zou dat ding toch eens rustig bekijken, en de reference lijst ook eens doornemen :)

[edit]
toch eens eerst refreshen voordat ik antwoord geef...

Exact expert nodig?


Verwijderd

Topicstarter
Volgende vraag:
code:
1
2
3
4
5
msword.selection.find.clearformatting
msword.selection.find.Text = mmf
msword.selection.find.replacement.clearformatting
msword.selection.find.replacement.Text = rt
msword.selection.find.execute Replace:=wdReplaceAll, Format:=True, MatchCase:=False, Matchwholeword:=False

Dat zegt MS over het vervangen van het woord in variabele mmf door variabele rt IN HET HELE DOCUMENT. Dus alle mmf-jes worden vervangen door rt-tjes.

Probleem is, dat ik dit gevonden heb bij de Word XP documentatie over VBA. Er bestaat volgensmij (kan het niet vinden bij MSDN) geen documentatie over Word 95,97,2000 en VBA. En natuurlijk werkt dit niet onder word 97. Word 97 gaat niet eens aan het vervangen, maar selecteerd alleen de tekst mmf, en stopt dan. Pas als ik zeg
code:
1
2
3
4
5
msword.selection.find.clearformatting
msword.selection.find.Text = mmf
msword.selection.find.replacement.clearformatting
msword.selection.find.replacement.Text = rt
msword.selection.find.execute Replace:=true, Format:=True, MatchCase:=False, Matchwholeword:=False

(Let op de parameter 'Replace' in de laatste regel)
dan doet ie wat, maar je begrijpt, dan vervangt ie alleen de eerste mmf met rt, en stopt daarna. Iemand enig idee hoe het wel moet, wat ik fout doe. Of kan dit gewoon niet met word 97 (dat zou echt enorm lastig zijn)

Verwijderd

Topicstarter
Op vrijdag 04 januari 2002 11:23 schreef Debbus het volgende:
Object kun je controleren met 'Is Nothing'.
code:
1
2
3
If objWordApplication Is Nothing Then
   MsgBox "Huh!? Waar is me Word naar toe??"
End If
Tsja, maar dit werkt niet :( Hij blijft gewoon denken dat Word er nog is, ookal heeft de gebruiker het afgesloten. Ik heb nu dit:
code:
1
2
3
4
5
6
7
8
Private Sub class_terminate()
    If Not (msword Is Nothing) Then
      msword.quit False
      Set msword = Nothing
      msword_exists = False
      msword_document_exists = False
    End If
End Sub

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 15-09 19:11

Crazy D

I think we should take a look.

Wat voor een error krijg je?
De VB-way-to-go zou in dat geval (kunnen) zijn, iets als:
code:
1
2
3
4
5
6
7
Err.Clear
On Local Error Resume Next
' benader je word-object
If Err.Number <> 0 Then
    ' word was gesloten, of er is een andere reden
    ' check error nummer ed., en doe n.a.v. de noodzakelijke aktie
End If

Exact expert nodig?


Verwijderd

Topicstarter
"The remote server machine does not exist or is unavailable"

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 15-09 19:11

Crazy D

I think we should take a look.

Op vrijdag 04 januari 2002 12:30 schreef CyberKnutselaar het volgende:
"The remote server machine does not exist or is unavailable"
Dat wist je al, Word is afgesloten :)
Dan kun je 'm dus opnieuw initializeren, en kijken of het dan wel weer werkt...

Exact expert nodig?

Pagina: 1