Sviluppare funzionalita su Microsoft Office con VBA Application.WorksheetFunction.NetworkDays_Intl

LoginRegistrati
Stai vedendo 4 articoli - dal 1 a 4 (di 4 totali)
  • Autore
    Articoli
  • #22732 Risposta

    Vincenzo

      Salve avrei un quesito da porvi. Non riesco a capire perchè, utilizzando la formula in oggetto in una macro ottengo due valori diversi a seconda se faccio riferimento ad una cella o se lo stesso valore riportato in cella lo riporto in una variabile. Al fine di far meglio comprendere quanto sopra allego il codice vba. Nella colonna "A" ho inserito una serie di giorni festivi oltre quello calendariali, a partire dalla cella "C2" fino alla "C13" ho messo il primo giorno di ogni mese, mentre nelle celle D2:d13 l'ultimo giorno di ogni mese.  Ho necessità di mettere i valori all'interno di due variabili in quanto devo ripetere lo stesso calcolo su centinaia di voci. Grazie a quanti vorranno aiutarmi

      Sub test()
      Range("c2").Select
      numero = 2
      a = Range("c" & numero)
      b = Range("d" & numero)
      Z = 2
      Do While Z < 13
      gg = Application.WorksheetFunction.NetworkDays_Intl(ActiveCell, ActiveCell.Offset(0, 1), , Sheets("giornifestivi").Columns("A:A"))
      ActiveCell.Offset(0, 3) = gg
      gg2 = Application.WorksheetFunction.NetworkDays_Intl(a, b, , Sheets("giornifestivi").Columns("A:A"))
      ActiveCell.Offset(0, 4) = gg2
      ActiveCell.Offset(1, 0).Select
      Z = Z + 1
      numero = numero + 1
      a = Range("c" & numero)
      b = Range("d" & numero)
      
      Loop
      End Sub
      
      #22741 Risposta
      patel
      patel
      Moderatore
      • Sfida #6
        36 pts

        allega un file di esempio con le 2 macro

        #22742 Risposta
        scossa
        scossa
        Partecipante
        • Sfida #5
          2 pts

          Ciao,

          intanto non ho capito se, nel tuo file originale, il risultato corretto è quello ottenuto con Activecell o con a, b (cioè 19, 20, 22, 21 .. o 22, 20, 23, 22).

          Comunque anche il tuo codice originale potrebbe restituire il risultato corretto, il punto cruciale e direi "bizzarro" è che, al contrario di quanto ci si aspetterebbe, nella chiamata
          ws.NetworkDays_Intl(ActiveCell, ActiveCell.Offset(0, 1), , Range("ggvacanza"))
          i due oggetti ActiveCell e ActiveCell.Offset(0, 1) restituiscono la proprietà .Value2 anziché la proprietà .Value, che è quella restituita di default e restituita infatti nelle chiamate
          a = Range("e" & numero)
          b = Range("f" & numero)

          Quindi, per ottenere le stesse date col tuo codice hai due possibilità: modificare l'assegnazione ad a e b in:

          a = Range("e" & numero).Value2 b = Range("f" & numero).Value2

          sia all'inizio che nelle righe prima di Loop
          oppure modificare la riga
          gg = ws.NetworkDays_Intl(ActiveCell, ActiveCell.Offset(0, 1), , Range("ggvacanza"))
          in
          gg = ws.NetworkDays_Intl(ActiveCell.Value, ActiveCell.Offset(0, 1).Value, , Range("ggvacanza"))

          PS.: perché riproponi lo stesso quesito che hai appena dato per risolto?

          #22743 Risposta
          patel
          patel
          Moderatore
          • Sfida #6
            36 pts

            Vincenzo, decidi quale discussione vuoi continuare perché così c'è troppa confusione, una la elimino.

          LoginRegistrati
          Stai vedendo 4 articoli - dal 1 a 4 (di 4 totali)
          Rispondi a: Application.WorksheetFunction.NetworkDays_Intl
          Gli allegati sono permessi solo ad utenti REGISTRATI
          Le tue informazioni:



          vecchio frac - 2750 risposte

          albatros54
          albatros54 - 833 risposte

          patel
          patel - 724 risposte

          Marius44
          Marius44 - 634 risposte

          Luca73
          Luca73 - 587 risposte