[RISOLTO] in attesa della macro....
[RISOLTO] in attesa della macro....
Eccomi ancora qui, ho creato una macro che effettua dei calcoli con dati presi nel foglio1 che poi inserisce i risultati in celle nel foglio2, durante questi calcoli e per via della formattazione che appllico(sempre tramite macro)è molto lenta e si vedono le celle comparire una per volta e tutto il lavoro dura circa 20 secondi, io chiedo a voi Lumi se esiste un modo per nascondere questo materializzarsi delle celle una per volta o se è possibile far comparirte una messagbox del tipo ATTENDERE PREGO che poi sparisce alla conclusione della macro.... Grassie
Ultima modifica di upacill il martedì 24 aprile 2012, 22:13, modificato 1 volta in totale.
Libre office 3.5.2 su Ubuntu 11.10
Re: in attesa della macro....
20 secondi???
ma quanti dati deve calcolare?
metti il codice creato che magari è da sistemare
fai sapere
grazie
ma quanti dati deve calcolare?
metti il codice creato che magari è da sistemare
fai sapere
grazie
AOO 3.4.1 AOO341m1(Build:9593) Linux Mint Debian/Mate 64bit java 1.6.0.22 XP PRO/32bit
con Base --> sempre backup!!!
Se problema è Risolto --> Inserire [Risolto]nel titolo come spiega qui, grazie
con Base --> sempre backup!!!
Se problema è Risolto --> Inserire [Risolto]nel titolo come spiega qui, grazie
Re: in attesa della macro....
Codice: Seleziona tutto
Sub Previsionale
Dim Doc,Sheet,sheet2,sheet1 As Object
dim dispatcher as object
Dim aBorder as New com.sun.star.table.BorderLine
Dim riga,col,skill,ctr,ctr2,A,ultagg,i2,cont,proxskill,sett,sett2,coll,eta2,riga3,riga2 As integer
Dim perc,colall,correttivo,ass,appskill3,appsett,appsett3 As Double
Dim stringa,all,all2,app,dec,alle,appalle As String
Dim data,datains,appskill,appskill2,gg,eta,gg2,ggtot,corrgiorni,a2,correttivogg,appsk,appet as integer
Dim corrskill,correta,Pskilldec,percall,percall2,res,corrall as double
Doc = ThisComponent
Sheet = Doc.Sheets(0)
Sheet2 = Doc.Sheets(2)
oSheet = Doc.Sheets(1)
sheet1= Doc.sheets(1)
' Controllo se esisteono giocatori
cont=0
cell=sheet.getcellbyposition(2,15 )
riga=15
do while cell.string<>""
cell=sheet.getcellbyposition(2,riga )
stringa=cell.string
cont=cont+1
riga=riga+1
loop
cont=cont-1 'numero di giocatori presenti
if Cont=0 then
ctr=0
sheet.getcellbyposition(15,0).value=ctr
exit sub
end if
'
all=Sheet.getcellbyposition(3,3).string 'prende l'allenamento scelto
for i=6 to 12
all2=Sheet.getcellbyposition(i,14).string 'vede la colonna dell'allenamento
if all=all2 then exit for
next i
colall=i 'colonna allenamento scelto
riga=15
Cell = Sheet.getCellByPosition(2, riga)
stringa=cell.string
for i=4 to 15 ' calcolo correttore allenamento
all2=Sheet2.getcellbyposition(7,i).string
corrall=sheet2.getcellbyposition(8,i).value
if all= all2 then exit for
next i
res=Sheet2.getcellbyposition(11,4).value
allen=sheet.getcellbyposition(13,3).string
for i=7 to 11 ' calcolo correttore allenatore
appalle=Sheet2.getcellbyposition(10,i).string
corralle=sheet2.getcellbyposition(11,i).value
if appalle= allen then exit for
next i
ass=Sheet2.getcellbyposition(11,14).value'numero assistenti
correttivo=res*corralle*ass
riga2=5
for a=1 to cont
colonna=6
pskilldec=0
settimane=sheet.getcellbyposition(3,6).value
skill=Sheet.getcellbyposition(colall,riga).value
appskill2= int(skill)
data=Sheet.getcellbyposition(20,15).value 'prende la data di oggi
eta=Sheet.getcellbyposition(3,riga).value'prende il valore degli anni all'inserimento
gg=Sheet.getcellbyposition(4,riga).value 'prende i giorni all'inserimento
datains=Sheet.getcellbyposition(5,riga).value 'prende la data dell'inserimento
ggtot=(eta*112)+gg+data-datains 'Calcola i giorni totali del giocatore
appeta=ggtot mod 112
eta=(ggtot-appeta)/112 ' calcola l'eta attuale in anni
gg =ggtot-(eta*112) 'calcolo i giorni attuali
proxskill=int(skill)+1
nome=sheet.getcellbyposition(2,riga).string
cellrange=Sheet1.getCellRangeByPosition(1,riga2,5,riga2)
With aBorder
.Color = RGB(0, 0, 0)
.OuterLineWidth = 2
End With
oBorder = Cell.TableBorder
With oBorder
.BottomLine = aBorder
End with
sheet1.getcellbyposition(1,riga2).string=nome
sheet1.getcellbyposition(3,riga2).value=eta
sheet1.getcellbyposition(4,riga2).value=gg
cellRange.CellBackColor = RGB (255,255,255)
cellrange.tableborder=oborder
a2=21-proxskill
sett=0
appsett3=0
eta2=0
for i2=1 to a2
if settimane<sett then exit for
Perc=Sheet.getcellbyposition(14,riga).value
if perc=0 then perc=100
percall=perc
perc=percall/100
correttivogg=sheet2.getcellbyposition(13,10).value
if (perc*100) <=1 then exit for
for i=4 to 23 ' calcolo correttore skill
appskill=Sheet2.getcellbyposition(1,i).value
corrskill=sheet2.getcellbyposition(2,i).value
if appskill= appskill2 then exit for
next i
if (perc*100)<>1 then
do while int(pskilldec)<proxskill
for i=4 to 18 'Calcolo correttore eta
appeta=Sheet2.getcellbyposition(4,i).value
correta=sheet2.getcellbyposition(5,i).value
if appeta= eta then exit for
next i
pskilldec=skill+(perc/(corrall*correta*corrskill*correttivo))
skill=pskilldec
sett=sett+1
ggtot2=eta*112+gg+(7*sett) 'giorni totali al prossimo scatto
appeta=ggtot2 mod 112
eta2=(ggtot2-appeta)/112 ' calcolagli anni al prossimo scatto
gg2=ggtot2-(eta2*112) 'calcolo i giorni al prox scatto
loop
Cell = oSheet.getCellByPosition(13, riga)
With aBorder
.Color = RGB(0, 0, 0)
.OuterLineWidth = 1
End With
oBorder = Cell.TableBorder
With oBorder
.BottomLine = aBorder
.LeftLine = aBorder
.TopLine = aBorder
.RightLine = aBorder
End with
sheet1.getcellbyposition(colonna+2,riga2).value=sett
Cell = Sheet1.getCellByPosition(colonna+2, riga2)
Cell.tableborder=oborder
sheet1.getcellbyposition(colonna+2,riga2).CellBackColor = RGB (255, 255, 0)
sheet1.getcellbyposition(colonna,riga2).value=eta2
sheet1.getcellbyposition(colonna+1,riga2).value=gg2
sheet1.getcellbyposition(colonna+1,riga2-1).value=proxskill
CellRange = oSheet.getCellRangeByPosition(colonna,riga2-1,Colonna+2 ,riga2-1)
Cell2 = Sheet1.getCellByPosition(colonna, riga2-1)
cell3= Sheet1.getCellByPosition(colonna+2, riga2-1)
if proxskill >2 then
cellRange.CellBackColor = RGB (170, 221, 150)
cellrange.tableborder=oborder
' cellRange.tableborder= rgb (0,0,0)
'cell2.CellBackColor = RGB (170, 221, 150)
'cell3.CellBackColor = RGB (170, 221, 150)
end if
if proxskill >5 then
cellRange.CellBackColor = RGB (160, 219, 142)
cellRange.tableborder= oborder
'cell2.CellBackColor = RGB (160, 219, 142)
'cell3.CellBackColor = RGB (160, 219, 142)
end if
if proxskill >8 then
cellRange.CellBackColor = RGB (96, 198, 89)
cellRange.tableborder= oborder
' cell2.CellBackColor = RGB (96, 198, 89)
' cell3.CellBackColor = RGB (96, 198, 89)
end if
if proxskill>12 then
cellRange.CellBackColor = RGB (0, 122, 61)
cellRange.tableborder= oborder
end if
if proxskill>14 then
cellRange.CellBackColor = RGB (0, 135, 81)
cellRange.tableborder= oborder
end if
if proxskill>16 then
cellRange.CellBackColor = RGB (0, 107, 73)
cellRange.tableborder= oborder
end if
if proxskill>18 then
cellRange.CellBackColor = RGB (2, 73, 48)
cellRange.tableborder= oborder
end if
if proxskill=20 then
cellRange.CellBackColor = RGB (0, 0, 0)
cellRange.tableborder= oborder
end if
if proxskill>12 then
sheet1.getcellbyposition(colonna+1,riga2-1).CharColor = RGB (255,255, 255)
end if
colonna=colonna+3
proxskill=proxskill+1
appsett3=sett
end if
next i2
riga=riga+1
riga2=riga2+2
next a
End Sub
Libre office 3.5.2 su Ubuntu 11.10
-
- Messaggi: 21
- Iscritto il: lunedì 16 gennaio 2012, 12:48
Re: in attesa della macro....
Puoi fare così:
crea un dialogo e inserisci una label con un messaggio di attesa, poi modifica la tua macro sulla base di questo esempio
Se poi vuoi fare le cose in grande potresti anche mettere invece della label una progress bar che andresti ad aggiornare man mano che esegui il codice...
crea un dialogo e inserisci una label con un messaggio di attesa, poi modifica la tua macro sulla base di questo esempio
Codice: Seleziona tutto
Sub Attesa
oSheet = ThisComponent.Sheets.getByName("Foglio1")
oSheet.isVisible = False
oDialog = CreateUnoDialog(DialogLibraries.Standard.Dialog1)
oDialog.setVisible(True)
Wait 5000 'Sostituisci questa riga con il codice della tua macro
oDialog.setVisible(False)
oSheet.isVisible = True
ThisComponent.CurrentController.setActiveSheet(oSheet)
End Sub
OpenOffice 3.4.1
LibreOffice 3.6.1.2
Microsoft Windows 7 (6.1) x64 Ultimate Edition Service Pack 1 (Build 7601)
LibreOffice 3.6.1.2
Microsoft Windows 7 (6.1) x64 Ultimate Edition Service Pack 1 (Build 7601)
Re: in attesa della macro....
scusa ma sono abbastanza neofita ma come creo un dialogo?
Libre office 3.5.2 su Ubuntu 11.10
-
- Messaggi: 21
- Iscritto il: lunedì 16 gennaio 2012, 12:48
Re: in attesa della macro....
strumenti -> macro -> organizza finestre di dialogo... -> Nuovo -> Ok -> Modifica
OpenOffice 3.4.1
LibreOffice 3.6.1.2
Microsoft Windows 7 (6.1) x64 Ultimate Edition Service Pack 1 (Build 7601)
LibreOffice 3.6.1.2
Microsoft Windows 7 (6.1) x64 Ultimate Edition Service Pack 1 (Build 7601)
Re: in attesa della macro....
Inanzitutto grazie per l'aiuto ,c.spaziani ha scritto:strumenti -> macro -> organizza finestre di dialogo... -> Nuovo -> Ok -> Modifica
allora la finestra di dialogo fatta con il label "Attendi", un'ultima domanda ma come si fa per aggiornare la barra di completamento?
Libre office 3.5.2 su Ubuntu 11.10
-
- Messaggi: 21
- Iscritto il: lunedì 16 gennaio 2012, 12:48
Re: in attesa della macro....
Codice: Seleziona tutto
Sub Attesa
oSheet = ThisComponent.Sheets.getByName("Foglio1")
oSheet.isVisible = False
oDialog = CreateUnoDialog(DialogLibraries.Standard.Dialog1)
oDialog.setVisible(True)
oProgressBarModel = oDialog.Model.ProgressBar1
oProgressBarModel.ProgressValueMin = 1
oProgressBarModel.ProgressValueMax = 3
oProgressBarModel.ProgressValue = 1
Wait 1000
oProgressBarModel.ProgressValue = 2
Wait 1000
oProgressBarModel.ProgressValue = 3
Wait 1000
oDialog.setVisible(False)
oSheet.isVisible = True
ThisComponent.CurrentController.setActiveSheet(oSheet)
End Sub
Un po' laborioso, ma credo sia l'unico modo dal momento che, a quanto ne so, nei dialog non è possibile inserire né testo lampeggiante, né gif animate!
OpenOffice 3.4.1
LibreOffice 3.6.1.2
Microsoft Windows 7 (6.1) x64 Ultimate Edition Service Pack 1 (Build 7601)
LibreOffice 3.6.1.2
Microsoft Windows 7 (6.1) x64 Ultimate Edition Service Pack 1 (Build 7601)
Re: in attesa della macro....
Mille Grazie sei stato gentilissimo
Libre office 3.5.2 su Ubuntu 11.10