Intervalli di tempo...
 
Notifiche
Cancella tutti

La consultazione del forum è libera per tutti.

Per poter porre un quesito è invece necessario essere un utente registrato (clicca qui se non lo sei).

Tutti gli utenti che richiedono un supporto, come da REGOLAMENTO, sono caldamente invitati ad allegare un file di esempio con l'indicazione di quello che si desidera ottenere.

[Risolto] Intervalli di tempo lavorato in coppia

27 Post
2 Utenti
2 Reactions
1,557 Visualizzazioni
Forum 1
(@davide)
Post: 0
New Member
Avviatore di Topic
 

Buongiorno,

ho notato che in alcune condizioni il calcolo è sbagliato, in allegato ci sono delle note con lo sfondo colorato che sono di esempio.

se volesi aggiungere delle colonne a sinistra e sopra i dati, come modifico il VBA per "spostare" il range di calcolo?

 

Grazie.

 

 
Postato : 13/02/2021 13:19
cromagno
(@cromagno)
Post: 174
Moderatore
 
Postato da: @davide

se volesi aggiungere delle colonne a sinistra e sopra i dati, come modifico il VBA per "spostare" il range di calcolo?

Prima di guardare il file.... hai almeno una base di VBA?
Senza quella è inutile andare avanti, devi essere un minimo in grado di poter modificare il codice all'esigenza (è per questo motivo che ti ho chiesto da subito se c'erano altre cose da fare oltre ad ottenere i risultati nelle colonne E e F).

"Sono le persone che nessuno immagina che possano fare certe cose, quelle che fanno cose che nessuno può immaginare."

 
Postato : 13/02/2021 13:27
cromagno
(@cromagno)
Post: 174
Moderatore
 
Postato da: @davide

ho notato che in alcune condizioni il calcolo è sbagliato, in allegato ci sono delle note con lo sfondo colorato che sono di esempio.

In effetti c'era qualcosa da correggere.
Sostituisci il codice direttamente con questo modificato:

Sub CheckOperators()
    Dim LRow As Long
    Dim ArrOrigin
    Dim i As Long
    Dim j As Long
    Dim k As Double
    Dim OrdDataOper
    Dim AppSplit
    Dim NrOrder As Variant
    Dim Operators As String
    Dim ActData As String
    Dim StartHour As Double
    Dim EndHour As Double
    Dim AppArray()
    
    LRow = Range("A" & Rows.Count).End(xlUp).Row
    If LRow > 2 Then
        Application.ScreenUpdating = False
        ArrOrigin = Range("A3:C" & LRow)
        ReDim AppArray(1 To UBound(ArrOrigin, 1), 1 To 2)
        For i = 1 To UBound(ArrOrigin, 1)
            OrdDataOper = Split(ArrOrigin(i, 1), "-")
            NrOrder = OrdDataOper(0)
            ActData = OrdDataOper(1)
            Operators = OrdDataOper(2)
            StartHour = ArrOrigin(i, 2)
            EndHour = ArrOrigin(i, 3)
            If i Mod 200 = 0 Then DoEvents
            
            If i + 1 < UBound(ArrOrigin, 1) Then
                For j = i + 1 To UBound(ArrOrigin, 1)
                    If Len(AppArray(j, 2)) = 0 Then
                        AppSplit = Split(ArrOrigin(j, 1), "-")
                        If AppSplit(0) = NrOrder Then
                            If (ArrOrigin(j, 2) <= StartHour And ArrOrigin(j, 3) >= StartHour _
                                And ArrOrigin(j, 3) <= EndHour) Then
                                AppArray(j, 2) = ArrOrigin(j, 3) - StartHour
                            ElseIf (ArrOrigin(j, 2) >= StartHour And ArrOrigin(j, 3) <= EndHour) Then
                                AppArray(j, 2) = ArrOrigin(j, 3) - ArrOrigin(j, 2)
                            ElseIf (ArrOrigin(j, 2) >= StartHour And ArrOrigin(j, 2) <= EndHour And ArrOrigin(j, 3) >= EndHour) Then
                                AppArray(j, 2) = EndHour - ArrOrigin(j, 2)
                            ElseIf (ArrOrigin(j, 2) <= StartHour And ArrOrigin(j, 3) >= EndHour) Then
                                AppArray(j, 2) = EndHour - StartHour
                            End If
                        End If
                        
                        If Len(AppArray(j, 2)) > 0 Then
                            AppArray(j, 1) = Operators & "-" & AppSplit(2)
                        End If
                    End If
                Next j
            End If
        Next i
        ArrOrigin = AppArray
        Range("E3").Resize(UBound(ArrOrigin, 1), 2).Value = ArrOrigin
        Application.ScreenUpdating = True
        MsgBox "Controllo eseguito.", vbInformation + vbOKOnly, "OPERAZIONE COMPLETATA"
    End If
End Sub

"Sono le persone che nessuno immagina che possano fare certe cose, quelle che fanno cose che nessuno può immaginare."

 
Postato : 13/02/2021 14:13
Forum 1
(@davide)
Post: 0
New Member
Avviatore di Topic
 

@cromagno

se mi dicessero che conosco il VBA come una capra, mi farebbero un complimento.

 
Postato : 13/02/2021 15:54
Forum 1
(@davide)
Post: 0
New Member
Avviatore di Topic
 

@cromagno

ora va meglio. grazie

 
Postato : 13/02/2021 16:02
cromagno
(@cromagno)
Post: 174
Moderatore
 

Ricorda di segnare la discussione come RISOLTA, per altri problemi/modfiche apri un nuovo thread.

"Sono le persone che nessuno immagina che possano fare certe cose, quelle che fanno cose che nessuno può immaginare."

 
Postato : 14/02/2021 14:59
Forum 1
(@davide)
Post: 0
New Member
Avviatore di Topic
 

@cromagno

certamente, stamattina ho fatto altre prove e il file prodotto dà i risultati attesi.

 

Grazie.

 
Postato : 14/02/2021 16:25
Forum 1
(@davide)
Post: 0
New Member
Avviatore di Topic
 

sì può mettere la discussione risolta, ti ringrazio ancora per l'ottimo lavoro. Grazie.

 
Postato : 14/02/2021 16:35
cromagno
(@cromagno)
Post: 174
Moderatore
 
Postato da: @davide

sì può mettere la discussione risolta,

puoi farlo tu, in cima alla discussione (prima pagina - sopra il Topic, cioè il primo post) c'è il pulsante apposito:

"Sono le persone che nessuno immagina che possano fare certe cose, quelle che fanno cose che nessuno può immaginare."

 
Postato : 14/02/2021 17:06
Forum 1
(@davide)
Post: 0
New Member
Avviatore di Topic
 

@cromagno

Buonasera, ho riaperto la discussione perchè si verifica un messaggio di errore al momento del lancio del VBA, la stranezza stà nel fatto che il programma ha funzionato ma ora compare un messaggio di errore che allego.

 

 

Grazie.

 

 
Postato : 15/02/2021 19:53
cromagno
(@cromagno)
Post: 174
Moderatore
 
 
 
Postato da: @davide

la stranezza stà nel fatto che il programma ha funzionato ma ora compare un messaggio di errore

come puoi bene immaginare, se il codice prima funzionava e adesso no vuol dire che è stato modificato qualcosa nella struttura del foglio.
Solo con le immagini si può fare ben poco, serve il file... potrei solo azzardare l'ipotesi che la lista contiene delle celle vuote in colonna A (o comunque non con la sintassi Ordine-Data-Operatore prevista nel codice) o in altre colonne controllate dal codice.

La cosa più "immediata" che si può fare è far proseguire il codice anche in caso di errore con:

On Error Resume Next
'codice...
On Error GoTo 0

anche se non è certo l'approccio migliore!

L'intero codice diventerebbe:

Sub CheckOperators()
    Dim LRow As Long
    Dim ArrOrigin
    Dim i As Long
    Dim j As Long
    Dim k As Double
    Dim OrdDataOper
    Dim AppSplit
    Dim NrOrder As Variant
    Dim Operators As String
    Dim ActData As String
    Dim StartHour As Double
    Dim EndHour As Double
    Dim AppArray()
    
    LRow = Range("A" & Rows.Count).End(xlUp).Row
    If LRow > 2 Then
        On Error Resume Next
        Application.ScreenUpdating = False
        ArrOrigin = Range("A3:C" & LRow)
        ReDim AppArray(1 To UBound(ArrOrigin, 1), 1 To 2)
        For i = 1 To UBound(ArrOrigin, 1)
            OrdDataOper = Split(ArrOrigin(i, 1), "-")
            NrOrder = OrdDataOper(0)
            ActData = OrdDataOper(1)
            Operators = OrdDataOper(2)
            StartHour = ArrOrigin(i, 2)
            EndHour = ArrOrigin(i, 3)
            If i Mod 200 = 0 Then DoEvents
            
            If i + 1 < UBound(ArrOrigin, 1) Then
                For j = i + 1 To UBound(ArrOrigin, 1)
                    If Len(AppArray(j, 2)) = 0 Then
                        AppSplit = Split(ArrOrigin(j, 1), "-")
                        If AppSplit(0) = NrOrder Then
                            If (ArrOrigin(j, 2) <= StartHour And ArrOrigin(j, 3) >= StartHour _
                                And ArrOrigin(j, 3) <= EndHour) Then
                                AppArray(j, 2) = ArrOrigin(j, 3) - StartHour
                            ElseIf (ArrOrigin(j, 2) >= StartHour And ArrOrigin(j, 3) <= EndHour) Then
                                AppArray(j, 2) = ArrOrigin(j, 3) - ArrOrigin(j, 2)
                            ElseIf (ArrOrigin(j, 2) >= StartHour And ArrOrigin(j, 2) <= EndHour And ArrOrigin(j, 3) >= EndHour) Then
                                AppArray(j, 2) = EndHour - ArrOrigin(j, 2)
                            ElseIf (ArrOrigin(j, 2) <= StartHour And ArrOrigin(j, 3) >= EndHour) Then
                                AppArray(j, 2) = EndHour - StartHour
                            End If
                        End If
                        
                        If Len(AppArray(j, 2)) > 0 Then
                            AppArray(j, 1) = Operators & "-" & AppSplit(2)
                        End If
                    End If
                Next j
            End If
        Next i
        ArrOrigin = AppArray
        Range("E3").Resize(UBound(ArrOrigin, 1), 2).Value = ArrOrigin
        Application.ScreenUpdating = True
        MsgBox "Controllo eseguito.", vbInformation + vbOKOnly, "OPERAZIONE COMPLETATA"
        On Error GoTo 0
    End If
End Sub

Come ti avevo già chiesto in precedenza... per nuovi "problemi" apri una nuova discussione visto che il problema per cui è stato aperto questo thread è stato risolto ed eventuali futuri problemi possono dipendere solo da una struttura non conforme al file postato come esempio.
Da questo ti sarà anche più chiara la necessità di approfondire almeno le basi del VBA per poter gestire ulteriori "intoppi".

"Sono le persone che nessuno immagina che possano fare certe cose, quelle che fanno cose che nessuno può immaginare."

 
Postato : 16/02/2021 08:50
Forum 1
(@davide)
Post: 0
New Member
Avviatore di Topic
 

@cromagno

Buonasera, sì hai ragione, se avessi altre cose da chiedere aprirò un'altra discussione, al momento ho risolto il problema che avevo segnalato.

 

Grazie.

 
Postato : 16/02/2021 19:48
Pagina 2 / 2
Condividi:
My Agile Privacy
Questo sito utilizza cookie tecnici e di profilazione. Cliccando su accetta si autorizzano tutti i cookie di profilazione. Cliccando su rifiuta o la X si rifiutano tutti i cookie di profilazione. Cliccando su personalizza è possibile selezionare quali cookie di profilazione attivare.
Attenzione: alcune funzionalità di questa pagina potrebbero essere bloccate a seguito delle tue scelte privacy
     Scarica il nostro ebook gratuito     

Unisciti a oltre 35.000 professionisti
che hanno già scelto di semplificare il proprio lavoro
e aumentare la produttività con la nostra newsletter!

Scarica l’ebook con i
migliori trucchi e suggerimenti per Excel
selezionati per te da Excel Academy

Download