[risolto] Problemi con parametri

Creare una macro - Scrivere uno script - Usare le API
Rispondi
nickopenoffice
Messaggi: 11
Iscritto il: venerdì 17 giugno 2011, 15:38

[risolto] Problemi con parametri

Messaggio da nickopenoffice »

Salve a tutti,
ho da poco intrapreso la programmazione per cercare di dare un piccolo contributo al miglioramento di opeoffice.
Ho creato delle macro in basic per cominciare a familiarizzare con il linguaggio.
Il mio problema e' nel passaggio di parametri in una procedura/funzione, alle volte funziona alle volte non; non capisco.
posto una semplice macro :




Dim Doc,Sheet As Object
Dim inputs As String
Dim stringa,stringa1,stringa2 As String
Dim Trovato As Boolean

Doc = ThisComponent
Sheet = Doc.Sheets(0)

Cell = Sheet.getCellByPosition(3, 3)
inputs=cell.string

scorpora(inputs,stringa,stringa1,stringa2,trovato)

Doc = ThisComponent
Sheet = Doc.Sheets(0)


Cell = Sheet.getCellByPosition(0, 0)
Cell.String =stringa

Cell = Sheet.getCellByPosition(0, 1)
Cell.String =stringa1

Cell = Sheet.getCellByPosition(0, 2)
Cell.String =stringa2

Cell = Sheet.getCellByPosition(0, 3)
Cell.String =trovato



End Sub



Sub scorpora(ByVal funz As String, str As String, str1 As String, str2 As String, trov As Boolean)
Dim flag,flag1 As String
Dim posiz,conta,inizio As Integer


flag = funz

flag1=mid(flag,2,2)

if (flag1="ma" ) or (flag1="ma") then
trov=true
posiz=4
flag1=mid(flag,posiz,1)
Do While flag1<>":"
posiz=posiz+1
flag1=mid(flag,posiz,1)
Loop
string=mid(flag,4,posiz-4)


conta=0
posiz=posiz+1
inizio=posiz
flag1=mid(flag,posiz,1)
Do While flag1<>":"
posiz=posiz+1
conta=conta+1
flag1=mid(flag,posiz,1)
Loop
string1=mid(flag,inizio,conta)


conta=0
posiz=posiz+1
inizio=posiz
flag1=mid(flag,posiz,1)
Do While flag1<>":"
posiz=posiz+1
conta=conta+1
flag1=mid(flag,posiz,1)
Loop
string2=mid(flag,inizio,conta)

Else
trov=false
End If

End Sub





la subroutine funziona correttamente come voglio io(gia' testata).
Pero' quando si ritorna dalla subroutine le stringhe(str,str1,str2) sono vuote.
Dopo tante prove ha funzionato una volta soltanto,poi non ha più funzionato.
Utilizzo la versione OOo 3.3,
secondo voi dove sbaglio?


Grazie per l'attenzione.
Ultima modifica di nickopenoffice il venerdì 22 luglio 2011, 21:05, modificato 1 volta in totale.
openoffice 3.3.0 windows 7
Avatar utente
Gumo
Messaggi: 1227
Iscritto il: lunedì 15 marzo 2010, 13:43
Località: IT

Re: Problemi con parametri

Messaggio da Gumo »

devi togliere il BY VAL

Codice: Seleziona tutto

Sub scorpora(Funz As String, str As String, str1 As String, str2 As String, trov As Boolean)
La dichiarazione BY VAL dovrebbe valere solo per il parametro a cui è associata, ma nelle prove che ho fatto vale anche per gli altri.
per cui invalida il passaggio delle variabili tra le routine.

(Io non lo uso mai, non ne vedo l'utilità)

ciao
g
Per cortesia, inserisci [Risolto] nel Titolo iniziale se il tuo problema è stato risolto.
-
Win 7 AOO4.1 + Ubuntu 14.04 AOO4.1 - Esci dall'illegalità: utilizza OpenOffice !
Avatar utente
FncZ4pp4
Messaggi: 285
Iscritto il: domenica 2 gennaio 2011, 20:32

Re: Problemi con parametri

Messaggio da FncZ4pp4 »

nickopenoffice ha scritto:Salve a tutti,
ho da poco intrapreso la programmazione per cercare di dare un piccolo contributo al miglioramento di opeoffice.
Ho creato delle macro in basic per cominciare a familiarizzare con il linguaggio.
Il mio problema e' nel passaggio di parametri in una procedura/funzione, alle volte funziona alle volte non; non capisco.
posto una semplice macro :




Dim Doc,Sheet As Object
Dim inputs As String
Dim stringa,stringa1,stringa2 As String
Dim Trovato As Boolean

Doc = ThisComponent
Sheet = Doc.Sheets(0)

Cell = Sheet.getCellByPosition(3, 3)
inputs=cell.string

scorpora(inputs,stringa,stringa1,stringa2,trovato)

Doc = ThisComponent
Sheet = Doc.Sheets(0)


Cell = Sheet.getCellByPosition(0, 0)
Cell.String =stringa

Cell = Sheet.getCellByPosition(0, 1)
Cell.String =stringa1

Cell = Sheet.getCellByPosition(0, 2)
Cell.String =stringa2

Cell = Sheet.getCellByPosition(0, 3)
Cell.String =trovato



End Sub



Sub scorpora(ByVal funz As String, str As String, str1 As String, str2 As String, trov As Boolean)
Dim flag,flag1 As String
Dim posiz,conta,inizio As Integer


flag = funz

flag1=mid(flag,2,2)

if (flag1="ma" ) or (flag1="ma") then
trov=true
posiz=4
flag1=mid(flag,posiz,1)
Do While flag1<>":"
posiz=posiz+1
flag1=mid(flag,posiz,1)
Loop
string=mid(flag,4,posiz-4)


conta=0
posiz=posiz+1
inizio=posiz
flag1=mid(flag,posiz,1)
Do While flag1<>":"
posiz=posiz+1
conta=conta+1
flag1=mid(flag,posiz,1)
Loop
string1=mid(flag,inizio,conta)


conta=0
posiz=posiz+1
inizio=posiz
flag1=mid(flag,posiz,1)
Do While flag1<>":"
posiz=posiz+1
conta=conta+1
flag1=mid(flag,posiz,1)
Loop
string2=mid(flag,inizio,conta)

Else
trov=false
End If

End Sub





la subroutine funziona correttamente come voglio io(gia' testata).
Pero' quando si ritorna dalla subroutine le stringhe(str,str1,str2) sono vuote.
Dopo tante prove ha funzionato una volta soltanto,poi non ha più funzionato.
Utilizzo la versione OOo 3.3,
secondo voi dove sbaglio?


Grazie per l'attenzione.
Per usare delle variabili in diverse procedure la devi definire come "pubblica" nell'intestazione, prima di tutte le procedure Sub. in pratica devono essere dichiarate nel modulo e non nella SubRoutine. Ti faccio un semplice esempio:

Codice: Seleziona tutto

Dim A As Integer REM Questa variabile è pubblica
Sub Numero1
 Numero2
 Numero3
Print A
End Sub
 
Sub Numero2
 A = A + 2
End Sub

Sub Numero3
 A = A * 5
End Sub 
Come puoi vedere eseguendo questo script alla chiamata della Sub Numero2 addizziono lo stesso valore di A che è 0 con 2, Poi con la chiamata della Sub Numero3 Moltiplico per 5 lo stesso valore di A che ora è 2, e da come risultato 10, se io avessi dichiarato A all'interno della Sub Numero1 ogni volta che uscivo da tale SubRoutine per entrare su un altra la variabile A si azzera e si azzera anche quando torna sulla Sub Numero1, per cui il risultato sarebbe stato sempre 0.

Oppure puoi dichiarare delle variabili Globali che rimangono in memoria anche dopo la fine dell'esecuzione della macro, la puoi dichiarare anche dentro una SubRoutine con l'istruzione Global MiaVariabile As Integer

Se ti servono altre info contattaci su questa discussione. :)
Per cortesia, inserisci [Risolto] nel Titolo iniziale se il tuo problema è stato risolto.
-
OpenOffice 3.3 su Windows XP
nickopenoffice
Messaggi: 11
Iscritto il: venerdì 17 giugno 2011, 15:38

Re: Problemi con parametri

Messaggio da nickopenoffice »

Salve,
ho tolto byval ma continuo ad avere sempre problemi di passaggio parametri;
non capisco le ultime due variabili vengono passate correttamente, mentre quelle centrali no.
Che senso ha?
openoffice 3.3.0 windows 7
nickopenoffice
Messaggi: 11
Iscritto il: venerdì 17 giugno 2011, 15:38

Re: Problemi con parametri

Messaggio da nickopenoffice »

Ho risolto. Ho dicharato la variabile incriminata come global prima del main.
Adesso, funziona. non mi era mai accaduto,strano....
i misteri dell'informatica......
openoffice 3.3.0 windows 7
Rispondi