Kelly ha una cartella di lavoro che contiene centinaia di fogli di lavoro. Ogni foglio di lavoro rappresenta un progetto individuale per la sua azienda. La cella C4 di ogni foglio di lavoro contiene il numero di progetto per quel particolare progetto.

Trovare progetti individuali tra tutte le centinaia nella cartella di lavoro è complicato, nella migliore delle ipotesi. Si chiede se sia possibile creare una macro che consentirebbe a tutti gli utenti di inserire un numero di lavoro, trovare il foglio di lavoro con quel numero di lavoro nella cella C4 e quindi visualizzare quel foglio di lavoro.

Prima di affrontare come farlo in una macro, dovresti capire che potresti essere in grado di trovare il progetto desiderato utilizzando gli strumenti nativi di Excel.

Tutto quello che devi fare è seguire questi passaggi:

  1. Premi Ctrl + F. Excel visualizza la scheda Trova della finestra di dialogo Trova e sostituisci.

  2. Fare clic sul pulsante Opzioni per espandere la finestra di dialogo. (Vedi figura 1.)

  3. Utilizzando l’elenco a discesa All’interno, scegliere Cartella di lavoro.

  4. Se la cella C4 in ogni foglio di lavoro contiene solo il numero del progetto, selezionare la casella di controllo Abbina contenuto intero cella.

  5. Fare clic su Trova successivo.

Questo è tutto; dovresti essere portato alla prima istanza della cella che contiene il numero del tuo progetto. Se la cartella di lavoro contiene numeri di progetto in più celle (oltre alla cella C4), l’utilizzo dello strumento Trova può essere un po ‘noioso; dovrai continuare a fare clic su Trova successivo fino a individuare il foglio di lavoro corretto. In una situazione del genere, una macro può essere la soluzione migliore perché ti consente di guardare specificamente la cella C4 e ignorare tutto ciò che si trova in qualsiasi altra cella.

La seguente macro richiede all’utente di inserire un numero di progetto. Quindi cerca in ogni foglio di lavoro nella cartella di lavoro il primo foglio di lavoro in cui la cella C4 contiene quel numero di progetto. Se trovata, la macro visualizza il foglio di lavoro e attiva la cella. Se non trovato, viene visualizzato un messaggio che lo indica.

Sub FindProject1()

Dim wks As Worksheet     Dim sCell As String     Dim sProj As String

sCell = "C4" 'cell with Project number     sProj = InputBox("What Project are you looking for?")

For Each wks In Worksheets         If wks.Range(sCell) = sProj Then             wks.Activate             wks.Range(sCell).Activate             MsgBox ("Project '" & sProj & "' is in:" & vbCrLf & wks.Name)

Exit Sub         End If     Next wks     MsgBox ("Project is not found")

End Sub

Esistono due potenziali problemi con questa macro. Innanzitutto, se il numero del progetto è effettivamente un numero, la macro potrebbe non trovarlo mentre cerca stringhe di testo. In secondo luogo, se sono presenti più fogli di lavoro che utilizzano lo stesso numero di progetto, non lo saprai mai perché la macro si ferma sempre al foglio di lavoro con il primo numero di progetto corrispondente nella cella C4. Puoi superare entrambi questi problemi apportando un paio di modifiche alla macro.

Sub FindProject2()

Dim wks As Worksheet     Dim sCell As String     Dim sProj As String     Dim vSheets As New Collection     Dim sTemp As String

sCell = "C4" 'cell with Project number     sProj = InputBox("What Project are you looking for?")

For Each wks In Worksheets         If wks.Range(sCell).Value = sProj Or _           wks.Range(sCell).Value = Val(sProj) Or _           wks.Range(sCell).Text = sProj Then             vSheets.Add wks         End If     Next wks

Select Case vSheets.Count         Case 0             sTemp = "Project " & sProj & " was not found "

sTemp = sTemp & "in this workbook."

MsgBox sTemp         Case 1             wks.Activate             wks.Range(sCell).Activate         Case Else             sTemp = "Project " & sProj & " was found on more "

sTemp = sTemp & "than one sheet:" & vbCrLf             For Each wks In vSheets                 sTemp = sTemp & wks.Name & vbCrLf             Next wks             MsgBox sTemp     End Select End Sub

Con questa versione della macro, il foglio di lavoro del progetto viene visualizzato solo se il numero del progetto è univoco tra tutti i fogli di lavoro. Se sono presenti più istanze in cui il numero di progetto è lo stesso, viene notificato il nome di quei fogli di lavoro, ma non è selezionato alcun foglio di lavoro.

Se lo desideri, potresti rendere la macro molto più semplice rinominando tutti i tuoi fogli di lavoro con il numero del progetto. Ciò avrebbe anche l’ulteriore vantaggio di garantire che nessun progetto utilizzi effettivamente due fogli di lavoro. (Tutti i nomi dei fogli di lavoro devono essere univoci, quindi se ogni foglio di lavoro utilizza un numero di progetto come nome, potresti avere un solo foglio di lavoro per numero di progetto.) Se adotti questo approccio, potresti usare una macro simile alla seguente per trovare e saltare al foglio di lavoro desiderato:

Sub FindProject3()

On Error GoTo ErrorHandler     Sheets(InputBox("Enter Project Number:")).Activate     Exit Sub ErrorHandler: MsgBox "No such Project"

End Sub

ExcelTips è la tua fonte di formazione economica su Microsoft Excel.

Questo suggerimento (13489) si applica a Microsoft Excel 2007, 2010, 2013 e 2016.