Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

vba+excel2003:dividere foglio in due ...

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Re: vba+excel2003:dividere foglio in due ...

Postdi PcBase » 17/02/12 23:09

Ciao

Avrai certamente notato il codice:

Codice: Seleziona tutto
For Each wind In Windows
    aaa = wind.Caption
    If Left(Replace(wind.Caption, ThisWorkbook.Name, ""), 1) = ":" Then
    wind.Close
End If


Questo in apertura cancella tutte le schermate che avevi precedentemente impostato.

Ora devi aggiungere il codice per rimuovere i comandi richiesti Griglia Schede ecc.. al termine del ciclo.
Ti suggerisco di inserirli all'interno della Sub: ToglieBarraFinestra
Windows xp + Office 2003 Ita
Windows8 Office 2013
PcBase
Utente Senior
 
Post: 129
Iscritto il: 24/02/11 23:26

Sponsor
 

Re: vba+excel2003:dividere foglio in due ...

Postdi Anthony47 » 18/02/12 00:07

Ragazzi, la via multiwindow e' minata...
Dopo la segnalazione di karug (controlli inacessibili su window:2) ho fatto qualche ricerca e leggo che i controlli ActiveX zoppicano nelle situazioni multiwindow, e infatti anche a me il mio Demo_multiwindow_V11.xls si comporta in modo imprevedibile se ci sono piu' windows aperte con activex.

Vi avevo detto che il problema era riuscire a posizionare le userform sul top e sul left dell' area dati, essendo la userform contenuta nella finestra "Applicazione Excel" e non potendo prevedere quale configurazione di menu e barre di controllo e' presente in una qualsiasi installazione.
Ho pero' trovato sul sito di Chip Pearson (un' autorita' nel campo) il codice per dichiarare una form come contenuta nell' area dati.
Ho pertanto ripreso l' idea iniziale di due userform aperte in modalita' "non a scelta obbligata" e posizionate in testa e a sx del foglio.
Trovate questa versione nel file allegato: https://rapidshare.com/files/3900823505 ... rm_V10.xls
In particolare il codice di C.Pearson e' intergrato nelle macro di UserForm_Initialize.
Le userform si visualizzano all' attivazione di Foglio3 e alla disattivazione di Memo, mentre si nascondono all' attivazione di Memo; ma si tratta soo di una scelta per dimostrare l' applicazione.

Adesso pero' e' tutto da fare...

Ciao a tutti.
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13895
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: vba+excel2003:dividere foglio in due ...

Postdi karug64 » 18/02/12 14:25

Aggiornamento.
L'ultima soluzione di Anthony e' (di fatto) la prima richiesta. L'ho testata, ma ho riscontrato un problema:
quando seleziono un foglio qualsiasi (che non sia il 3 e memo) i controlli presenti sul form2 non vengono visualizzati bene (vedi immagine)
https://rapidshare.com/files/46487636/Schermata12.png
se clicco dove so esserci dei controlli appaiono ad uno ad uno (vedi immagine)
https://rapidshare.com/files/1214363929/Schermata14.png
Questo non accade se prima clicco su Memo e poi attivo foglio3.
Allora ho provato ad inserire nell'evento activate di ogni foglio (1,2,4,5) le stesse istruzioni presenti su Memo
>>> Call Via2 <<<
ma, non capisco perche', il risultato e' sempre lo stesso. (solo memo risolve).

P.S.
Risolto questo, per raggiungere la prefezione, basterebbe che le form non avessero la possibilità di essere chiuse tramite la [X] in alto a destra ...... ma forse e' pretendere troppo !!

Grazie
Office 2010
karug64
Utente Senior
 
Post: 580
Iscritto il: 20/11/11 21:22

Re: vba+excel2003:dividere foglio in due ...

Postdi Anthony47 » 18/02/12 15:27

Il file e' un "concept", va composto secondo l' esigenza.
Per semplificare potresti mettere nella Workbook_Open, in coda, Call Via2 (dopo Foglio3.select)

L' effetto che tu dici io non l' ho replicato.

Per evitare che la form si chiuda con la X inserisci questo macro nel codice di ogni form:
Codice: Seleziona tutto
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = vbFormControlMenu Then Cancel = True
End Sub


Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13895
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: vba+excel2003:dividere foglio in due ...

Postdi karug64 » 19/02/12 12:21

Bene. Dopo varie prove sono arrivato alla conclusione che la soluzione migliore per le mie esigenze sarebbe questa:

https://rapidshare.com/files/3357936555/Schermata20.png

cioe' la soluzione senza form, con una finestra divisa in due (nella parte superiore andrei a mettere gli activex -ho riorganizzato la grafica del tutto-, non dovrei visualizzare le schede (ma se le tolgo tramite visualizza-opzioni, quando riapro il foglio ci sono sempre) e nella parte inferiore i fogli dati.

Ma come faccio, in questa soluzione, a lavorare sui fogli sottostanti ? Cioe' se nella parte superiore ho un button e volessi, alla pressione, selezionare il foglio8 della parte di sotto come posso fare ? (Se scrivo sheets("foglio8").select viene selezionato il foglio8 della parte supoeriore.) ?

Grazie.
Office 2010
karug64
Utente Senior
 
Post: 580
Iscritto il: 20/11/11 21:22

Re: vba+excel2003:dividere foglio in due ...

Postdi Anthony47 » 19/02/12 22:55

Allora devi tornare al demo-file che ti avevo passato qui: viewtopic.php?f=26&t=94494&start=20#p541507
Esso generava all' apertura tre finestre (previa cancellazione di eventuali multiwindow pre-esistenti); dovrai modificare la macro affinche te ne generi solo due, e la seconda deve avere W2=1 (width=100%).
Farai in modo che window:1 sia quella con gli activeX; dovrai inoltre impedire che altri fogli che non siano quello con gli activeX siano attivabili nella finestra.

Per eliminare la generazione della terza window toglierai in coda alla Workbook_Open le righe
Codice: Seleziona tutto
With ActiveWindow.NewWindow
'etc
'etc
    End With
Sheets("Foglio3").Select

In ogni momento potrai sapere quale foglio e' attivo in window:2 con una istruzione del tipo
Codice: Seleziona tutto
NomeFoglio = Windows(ThisWorkbook.Name & ":2").ActiveSheet.Name


Per riattivare windows:2 userai istruzione del tipo
Codice: Seleziona tutto
Windows(ThisWorkbook.Name & ":2").Activate
'altre istruzioni relative a window:2


A causa dei bachi sugli ActiveX in ambiene multiwindows nei fogli che attiverai in window:2 non devono esserci ActiveX.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13895
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: vba+excel2003:dividere foglio in due ...

Postdi karug64 » 19/02/12 23:46

Ok, Anthony.
Ho fatto come mi hai suggerito.
Allego il file come modificato secondo le tue indicazioni.
https://rapidshare.com/files/3182675153 ... ow_V11.xls

Come vedi nell'evento click del command presente sulla windows1 ho inserito queste semplici istruzioni:

Windows(ThisWorkbook.Name & ":2").Activate
Sheets("foglio3").Select

ma non si attiva il foglio (neppure il 4).
In effetti se clicco sul foglio 3 e 4 della windows2 manualmente, vedo la scritta ("qui ci sono i dati") ma immediatamente torna al foglio 2.

Inoltre, sapresti dirmi come faccio ad eliminare, via codice, le linguette del fogli, le barre di scorrimento e la griglia della windows1 considerato il fatto che, se le tolgo da strumenti-opzioni e poi salvo, alla riapertura continuano ad essere presenti ?

Grazie
Office 2010
karug64
Utente Senior
 
Post: 580
Iscritto il: 20/11/11 21:22

Re: vba+excel2003:dividere foglio in due ...

Postdi Anthony47 » 20/02/12 00:09

Nel mio file c' erano alcune macro che servivano a fissare Foglio2 in window:2; ora window:2 serve per altri scopi, quindi la macro Worksheet_Activate() la devi eliminare, o cambiare in modo coerente. Ad esempio potrebbe essere utile in tutti i fogli inserire una Worksheet_Activate che impedisce ai fogli (eccetto che a Foglio1) di aprirsi in window:1; qualcosa come
Codice: Seleziona tutto
Private Sub Worksheet_Activate()
If ActiveWindow.Caption = ThisWorkbook.Name & ":1" Then
Sheets("Foglio1").Activate
End If
End Sub

Per il codice che chiedi, separando i settaggi che sono a livello di applicazione da quelle che sono a livello di finestra
-registra due macro mentre esegui quelle operazioni, separando i settaggi che sono a livello di applicazione (macro1) da quelle che sono a livello di finestra (macro2)
-poi nella Workbook_Open aggiungi una Call Macro1 e tante Call Macro2 per quante sono le window; quindi due volte, dopo che hai posizionato il foglio che ti serve nella finestra

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13895
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: vba+excel2003:dividere foglio in due ...

Postdi karug64 » 21/02/12 07:47

ok. la "struttura" e' pronta ..... ora incomincio a riempirla.
Grazie infinite a tutti.
Office 2010
karug64
Utente Senior
 
Post: 580
Iscritto il: 20/11/11 21:22

Re: vba+excel2003:dividere foglio in due ...

Postdi karug64 » 07/03/12 21:21

Salve a tutti.
Innanzitutto mi scuso se riprendo questo post dopo tempo, ma ritengo che questo sia il posto giusto considerato che la problematica si lega a quanto detto qui.

Allora: ho adottato la soluzione della divisione in due finestre.
Nel mio codice pero' ho la necessita' di aprire degli altri file per copiarne il contenuto.
Il problema e' questo : come faccio a fare riferimento al foglio principale quando mi trovo su un altro foglio ? (esempio .....)

Codice: Seleziona tutto
Workbooks.Open Filename:=mypath
nomefoglio = ""
Call nome_del_foglio
Sheets(nomefoglio).Select ' <=== qui mi trovo su un altro foglio
If Trim(Sheets(nomefoglio).Range("A2").Value) <> "" Then

' ora devo confrontare il valore della cella A2 del foglio appena aperto con il valore della cella E3 del foglio "Menu" del work principale (che si chiama Gest_ordini)

            If Sheets(nomefoglio).Range("A2").Value <> Val(Trim(Sheets("Menu").Range("E3").Value)) Then
                MsgBox "Hai selezionato il file  E R R A T O !!", vbCritical, "Errore"
            endif
.....

ma l'istruzione : Val(Trim(Sheets("Menu").Range("E3").Value)) da errore "indice non incluso nell'intervallo"

Come posso fare ?

Grazie
Office 2010
karug64
Utente Senior
 
Post: 580
Iscritto il: 20/11/11 21:22

Re: vba+excel2003:dividere foglio in due ...

Postdi karug64 » 07/03/12 21:52

Ho risolto cosi':

Val(Trim(Windows(ThisWorkbook.Name & ":1").ActiveSheet.Range("E3").Value))

e pare funzionare
Office 2010
karug64
Utente Senior
 
Post: 580
Iscritto il: 20/11/11 21:22

Re: vba+excel2003:dividere foglio in due ...

Postdi Anthony47 » 07/03/12 23:06

Se funziona hai fatto bene; ma e' un po' ridondante:
La proprieta' Sheets si applica all' oggetto Workbook; se non specificato quale, vba assume si tratti dell' ActiveWorkbook. Se in quel momento ti trovi sul nuovo file aperto dovrai esplicitare che non vuoi confrontare con ActiveWorkbook ma con Workbook("Gest_Ordini").Sheets("Menu").etc.etc

Se le macro sono nel file Gest_Ordini puoi usare (come hai fatto) ThisWorkbook.Sheets("Menu").etc.etc

Tu sei partito usando il primo metodo, poi hai usanto il secondo per ottenere il nome del workbook che ti interessa, ma che conosci gia'.
Dopo aver esplicitato il workbook io espliciterei anche il nome foglio, invece di fidarmi che sia l' activesheet.

Tutto questo indipendentemente dalla suddivisione in windows sul primo file, per cui il ":1" non serve.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13895
Iscritto il: 21/03/06 16:03
Località: Ivrea

Precedente

Torna a Applicazioni Office Windows


Topic correlati a "vba+excel2003:dividere foglio in due ...":


Chi c’è in linea

Visitano il forum: Nessuno e 20 ospiti