| | Post: 2 | Registrato il: 25/11/2016
| Città: MILANO | Età: 46 | Utente Junior | 2007 e precedenti | | OFFLINE | |
|
04/01/2017 11:55 | |
Buongiorno, in un file condiviso di excel con modifiche da parte di più utenti contemporaneamente ho provato ad inserire nella colonna "Q2" una data e nella colonna "R2" la formula
=giorno lavorativo(Q2;2). La formula funziona correttamente ma, se il file viene condiviso, excel va in crash.
A questo punto sono nelle condizioni di richiedere aiuto per un VBA che possa sostituire la funzione immessa e vedere se, con questo modo alternativo, excel mi permetta di lavorare.
Il lavoro del vba definitivo dovrebbe seguire questa procedura:
in foglio2 vorrei inserire un elenco di giorni festivi
nel foglio dove lavoro e dove vorrei inserire il codice vorrei che per ogni data inserita in una cella della colonna "Q" mi restituisse due giorni lavorativi successi a "Q" al netto delle festività inserite nel foglio2.
Purtroppo sono un utente completamente inesperto di vba e vi chiedo, pertanto, pazienza e aiuto se possibile.
Grazie in anticipo.
Nicola |
|
| | Post: 3.568 | Registrato il: 13/03/2012
| Città: LIVORNO | Età: 78 | Utente Master | 2010 | | OFFLINE | |
|
04/01/2017 12:35 | |
allega un file di esempio
----------
Win 10 - Excel 2010
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta |
| | Post: 207 | Registrato il: 31/01/2010
| Città: LIVORNO | Età: 61 | Utente Junior | 2016 | | OFFLINE | |
|
04/01/2017 15:03 | |
Ciao Nicopedro come già suggerito dall'amico Patel45 che saluto sarebbe opportuno che tu Alleghi un file zippato in formato .zip oppure .rar affinché qualcuno possa aiutarti......
Saluti
--------------
Marco
excel 2013 |
| | Post: 2 | Registrato il: 25/11/2016
| Città: MILANO | Età: 46 | Utente Junior | 2007 e precedenti | | OFFLINE | |
|
05/01/2017 10:25 | |
Buongiorno a tutti,
allego il file come da Vs. richiesta e vi ringrazio fin da ora per l'interessamento.
Nico |
| | Post: 3.569 | Registrato il: 13/03/2012
| Città: LIVORNO | Età: 78 | Utente Master | 2010 | | OFFLINE | |
|
05/01/2017 12:42 | |
Sub prova()
LR = Cells(Rows.Count, "Q").End(xlUp).Row
For r = 2 To LR
giorno = Cells(r, "Q")
Cells(r, "R") = Application.WorksheetFunction.WorkDay(giorno, 2)
Next
End Sub
----------
Win 10 - Excel 2010
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta |
| | Post: 3 | Registrato il: 25/11/2016
| Città: MILANO | Età: 46 | Utente Junior | 2007 e precedenti | | OFFLINE | |
|
05/01/2017 13:04 | |
grazie patel45. ho inserito questo codice in una macro con tasto rapido attivabile ctrl+e ed in effetti ha saltato i sabati e le domeniche ma non tiene conto delle festività del foglio 2.
Per renderlo condiviso ha trasformato il file in estensione .xlsm per attivare la macro. (spero non sia un problema per la compatibilità con versione antecedenti al 2007).
Infine, come potrei legare questa modifica alla colonna R al mutare della colonna q invece di usare un tasto scelta rapida?
Grazie, Nicola
edit: ti chiedo anche, sempre per favore, se è possibile far in modo da non scrivere nulla in colonna r qualora non vi sia valore in colonna q corrispondente. [Modificato da nicopedro 05/01/2017 13:13] |
| | Post: 3.570 | Registrato il: 13/03/2012
| Città: LIVORNO | Età: 78 | Utente Master | 2010 | | OFFLINE | |
|
05/01/2017 14:29 | |
Infine, come potrei legare questa modifica alla colonna R al mutare della colonna q invece di usare un tasto scelta rapida?
temo che così facendo ritornino i problemi dovuti alla condivisione.
edit: ti chiedo anche, sempre per favore, se è possibile far in modo da non scrivere nulla in colonna r qualora non vi sia valore in colonna q corrispondente.
Sub prova()
LR = Cells(Rows.Count, "Q").End(xlUp).Row
For r = 2 To LR
giorno = Cells(r, "Q")
if giorno <> "" then Cells(r, "R") = Application.WorksheetFunction.WorkDay(giorno, 2)
Next
End Sub
[Modificato da patel45 05/01/2017 19:01]
----------
Win 10 - Excel 2010
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta |
| | Post: 3.571 | Registrato il: 13/03/2012
| Città: LIVORNO | Età: 78 | Utente Master | 2010 | | OFFLINE | |
|
05/01/2017 15:55 | |
prova anche questa
Sub secgiorno()
LR = Cells(Rows.Count, "Q").End(xlUp).Row
LR1 = Sheets(2).Cells(Rows.Count, "A").End(xlUp).Row
For r = 2 To LR
giorno = Cells(r, "Q")
If giorno <> "" Then
giornolav = Application.WorksheetFunction.WorkDay(giorno, 2)
For rr = 1 To LR1
If Sheets(2).Cells(rr, 1) = giornolav Then
giornolav = Sheets(2).Cells(rr, 1) + 1
giornolav = Application.WorksheetFunction.WorkDay(giornolav, 2)
End If
Next
Cells(r, "R") = giornolav
End If
Next
End Sub [Modificato da patel45 05/01/2017 19:03]
----------
Win 10 - Excel 2010
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta |
| | Post: 4 | Registrato il: 25/11/2016
| Città: MILANO | Età: 46 | Utente Junior | 2007 e precedenti | | OFFLINE | |
|
09/01/2017 09:01 | |
patel45, 05/01/2017 15.55:
prova anche questa
Sub secgiorno()
LR = Cells(Rows.Count, "Q").End(xlUp).Row
LR1 = Sheets(2).Cells(Rows.Count, "A").End(xlUp).Row
For r = 2 To LR
giorno = Cells(r, "Q")
If giorno <> "" Then
giornolav = Application.WorksheetFunction.WorkDay(giorno, 2)
For rr = 1 To LR1
If Sheets(2).Cells(rr, 1) = giornolav Then
giornolav = Sheets(2).Cells(rr, 1) + 1
giornolav = Application.WorksheetFunction.WorkDay(giornolav, 2)
End If
Next
Cells(r, "R") = giornolav
End If
Next
End Sub
ciao e grazie. non capisco se sbaglio io in qualcosa ma non riesco a far leggere in foglio 2 le festività. questo nuovo codice che cosa fa di diverso dal primo che mi avevi scritto?
Grazie ancora.
Nico |
| | Post: 3.580 | Registrato il: 13/03/2012
| Città: LIVORNO | Età: 78 | Utente Master | 2010 | | OFFLINE | |
|
09/01/2017 09:12 | |
l'ultimo codice dovrebbe, come da te chiesto, tener conto delle festività italiane, ma per funzionare lo devi mettere in un modulo standard e non in quello del foglio1
----------
Win 10 - Excel 2010
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta |
| | Post: 5 | Registrato il: 25/11/2016
| Città: MILANO | Età: 46 | Utente Junior | 2007 e precedenti | | OFFLINE | |
|
09/01/2017 12:42 | |
funziona...avevo dimenticato soltanto di cambiare il numero (2) del codice dopo sheets in base al numero di fogli che avevo nel file originale... credo vi sia ancora un piccolo errore...
se imposto come data di partenza il giorno 4/1 dovrebbe considerare il giorno 5 come primo giorno lavorativo da saltare e ridarmi il 6/1 che essendo festivo dovrebbe essere saltato...poi vi è il 7/1 e 8/1 che sono sabato e domenica e quindi dovrebbe restituire il 9/1...invece mi restituisce il 10/01... mi pare come se trovando il 06/01 azzerasse il conteggio e ripartisse da capo con il primo giorno utile...
in pratica vede il 05/01 ma poi incontrando errore il giorno 06/01 riparte a contare da capo il gionro 09/01
non so se mi sono spiegato...grazie mille...sei gentilissimo |
| | Post: 3.581 | Registrato il: 13/03/2012
| Città: LIVORNO | Età: 78 | Utente Master | 2010 | | OFFLINE | |
|
09/01/2017 15:01 | |
non avevi detto " due giorni lavorativi successivi a "Q" al netto delle festività inserite nel foglio2" ?
----------
Win 10 - Excel 2010
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta |
| | Post: 6 | Registrato il: 25/11/2016
| Città: MILANO | Età: 46 | Utente Junior | 2007 e precedenti | | OFFLINE | |
|
09/01/2017 15:30 | |
si,
faccio fatica a spiegarti ma se inserisci il codice nel file di esempio che ti ho inviato e provi a inserire nella prima riga di Q il 4/1 e nella seconda riga di Q il 5/1 vedrai che ti accorgerai del problema...non sono stato in grado di spiegarti il problema riscontrato ma sicuramente te ne accorgerai con la prova.
Ty. il risultato è quello riportato di seguito...
mer 4/1/17 mar 10/1/17
gio 5/1/17 lun 9/1/17
|
| | Post: 3.583 | Registrato il: 13/03/2012
| Città: LIVORNO | Età: 78 | Utente Master | 2010 | | OFFLINE | |
|
09/01/2017 16:41 | |
hai ragione, ma qual'è il risultato corretto secondo te ?
prova questa
Sub secondogiornolav()
LR = Cells(Rows.Count, "Q").End(xlUp).Row
For r = 2 To LR
giorno = Cells(r, "Q")
Cells(r, "R") = Application.WorksheetFunction.WorkDay_Intl(giorno, 2, , Sheets(2).Range("A2:A24"))
Next
End Sub [Modificato da patel45 09/01/2017 16:53]
----------
Win 10 - Excel 2010
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta |
| | Post: 7 | Registrato il: 25/11/2016
| Città: MILANO | Età: 46 | Utente Junior | 2007 e precedenti | | OFFLINE | |
|
10/01/2017 17:31 | |
ciao patel,
entrambe le date sono scorrette:
se inserisco il 4/1 dovrebbe conteggiare il 5/1 e saltarlo perchè primo giorno...poi considerare il 6/1 come festivo e quindi saltarlo...saltare sabato e domanica e restituire il 9/1
se inserissi il 05/01 allora dovrebbe saltare il 6/1 perchè festivo, saltare sabato e domenica, saltare il primo giorno lavorativo e cioè il 9/1 e restituire il 10/1
ho provato ad inserire il codice in sostituzione a quello precedente ma mi ha restituito errore:
errore di run-time 438: proprietà o metodo non supportati dall'oggetto.aprendo il debug mi segnala la riga
Cells(r, "R") = Application.WorksheetFunction.WorkDay_Intl(giorno, 2, , Sheets(2).Range("A2:A24")) |
| | Post: 3.587 | Registrato il: 13/03/2012
| Città: LIVORNO | Età: 78 | Utente Master | 2010 | | OFFLINE | |
|
10/01/2017 17:45 | |
probabilmente dipende dal fatto che hai il 2007, a me funziona col 2010 e il risultato è quello che hai detto tu.
Controlla se tra le funzioni del foglio oltre a GIORNO.LAVORATIVO hai anche GIORNO.LAVORATIVO.INTL
----------
Win 10 - Excel 2010
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta |
| | Post: 8 | Registrato il: 25/11/2016
| Città: MILANO | Età: 46 | Utente Junior | 2007 e precedenti | | OFFLINE | |
|
11/01/2017 09:07 | |
patel45, 10/01/2017 17.45:
probabilmente dipende dal fatto che hai il 2007, a me funziona col 2010 e il risultato è quello che hai detto tu.
Controlla se tra le funzioni del foglio oltre a GIORNO.LAVORATIVO hai anche GIORNO.LAVORATIVO.INTL
purtroppo no. |
| | Post: 3.589 | Registrato il: 13/03/2012
| Città: LIVORNO | Età: 78 | Utente Master | 2010 | | OFFLINE | |
|
11/01/2017 12:07 | |
ultimo tentativo, prova questa
Sub secgiorno()
Dim giorno As Date
LR = Cells(Rows.Count, "Q").End(xlUp).Row
For r = 2 To LR
If Cells(r, "Q") <> "" Then
giorno = Cells(r, "Q")
Cells(r, "R") = GetWorkDaysNum(giorno, 2)
End If
Next
End Sub
Public Function GetWorkDaysNum(DateStart As Date, giorni As Integer, Optional WorkDays As Integer = 5) As Long
Dim dtStart As Date, dtAct As Date, x As Integer, blFest As Boolean
dtStart = DateStart
dtAct = DateStart - 1
Do Until x > giorni
dtAct = DateAdd("d", 1, dtAct)
blFest = False
' Controllo se il G è all'interno della Settimana LUNGA/CORTA
' quindi se è SABATO o DOMENICA.
If Weekday(dtAct, vbMonday) > WorkDays Then blFest = True
' Nel caso non sia già SABATO/DOMENICA controllo che non sia
' una FESTIVITA'.
If blFest = False Then blFest = Festivo(dtAct)
If blFest = False Then x = x + 1
Loop
GetWorkDaysNum = dtAct
End Function
' VERIFICA SE LA DATA E' UN GIORNO FESTIVO IN ITALIA
Private Function Festivo(myDate As Date) As Boolean
LR1 = Sheets(2).Cells(Rows.Count, "A").End(xlUp).Row
Festivo = False
For rr = 1 To LR1
If Sheets(2).Cells(rr, 1) = myDate Then
Festivo = True
Exit For
End If
Next
End Function [Modificato da patel45 12/01/2017 09:21]
----------
Win 10 - Excel 2010
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta |
| | Post: 9 | Registrato il: 25/11/2016
| Città: MILANO | Età: 46 | Utente Junior | 2007 e precedenti | | OFFLINE | |
|
12/01/2017 09:08 | |
non posso far altro che ringraziarti per la pazienza e lo splendido lavoro. Mi pare che con questa tutto funzioni a meraviglia. Grazie ancora.
|
| | Post: 3.615 | Registrato il: 13/03/2012
| Città: LIVORNO | Età: 78 | Utente Master | 2010 | | OFFLINE | |
|
16/01/2017 11:17 | |
se hai ancora problemi continua qui
----------
Win 10 - Excel 2010
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta |
| | Post: 10 | Registrato il: 25/11/2016
| Città: MILANO | Età: 46 | Utente Junior | 2007 e precedenti | | OFFLINE | |
|
16/01/2017 11:54 | |
ok patel. grazie ancora.
vorrei che nello stesso file quando nelle celle della colonna "AF" (di tutti i fogli esistenti) vi è una data, restituisca nella colonna "B" il valore "OK" e nella colonna "C" il mese scritto in lettere estrapolato dalla data della colonna AF.
Tale macro dovrebbe lavorare al variare di qualsiasi cella della colonna AF rielaborando l'intera colonna.
Come sempre vi ringrazio in anticipo
Nicola [Modificato da nicopedro 16/01/2017 11:56] |
| | Post: 3.616 | Registrato il: 13/03/2012
| Città: LIVORNO | Età: 78 | Utente Master | 2010 | | OFFLINE | |
|
16/01/2017 16:06 | |
allega un file significativo, detta così non capisco, chi fa variare la colonna F ?
----------
Win 10 - Excel 2010
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta |
| | Post: 11 | Registrato il: 25/11/2016
| Città: MILANO | Età: 46 | Utente Junior | 2007 e precedenti | | OFFLINE | |
|
21/01/2017 10:05 | |
ciao, scusa per il ritardo ma ero malato.
Ti allego il file
ci sono 2 fogli che ho copiato praticamente identici "VS" e "VL" ma che in realtà contengono dati diversi.
Vorrei che inserendo una data nella colonna "AF" di qualsiasi foglio del file, automaticamente cambiasse la colonna "B" in "OK" e la colonna "C" con il nome del mese in cui è stato prodotto.
Grazie ancora. |
| | Post: 3.637 | Registrato il: 13/03/2012
| Città: LIVORNO | Età: 78 | Utente Master | 2010 | | OFFLINE | |
|
21/01/2017 16:05 | |
quindi niente a che vedere col quesito precedente ?
----------
Win 10 - Excel 2010
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta |
| | Post: 12 | Registrato il: 25/11/2016
| Città: MILANO | Età: 46 | Utente Junior | 2007 e precedenti | | OFFLINE | |
|
23/01/2017 08:47 | |
nicopedro, 16/01/2017 11.54:
ok patel. grazie ancora.
vorrei che nello stesso file quando nelle celle della colonna "AF" (di tutti i fogli esistenti) vi è una data, restituisca nella colonna "B" il valore "OK" e nella colonna "C" il mese scritto in lettere estrapolato dalla data della colonna AF.
Tale macro dovrebbe lavorare al variare di qualsiasi cella della colonna AF rielaborando l'intera colonna.
Come sempre vi ringrazio in anticipo
Nicola
si patel, è lo stesso che avevo chiesto 2 post prima...
|
| | Post: 3.641 | Registrato il: 13/03/2012
| Città: LIVORNO | Età: 78 | Utente Master | 2010 | | OFFLINE | |
|
23/01/2017 09:50 | |
nella colonna D inserisci questa formula
=SE(AF6 <>"";TESTO(AF6;"mmmm");"")
e nel modulo ThisWorkbook questa macro
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Target.Column = 32 And Target <> "" Then
Sh.Cells(Target.Row, "B") = "OK"
End If
End Sub [Modificato da patel45 23/01/2017 10:00]
----------
Win 10 - Excel 2010
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta |
|
|