Una famiglia di software per fogli di calcolo Microsoft con strumenti per l'analisi, la creazione di grafici e la comunicazione dei dati.
Ciao Walter.
Ho una confessione grave da fare: pensando di aver pienamente capito la tua richiesta iniziale, ho postato il mio codice iniziale. Poi ad ogni risposta da te, ho cercato di rispondere al problema specifico sollevato da te. Di conseguenza, ho scritto modifiche ad hoc per il codice. Questo non è il modo di scrivere buon codice robusto! Piuttosto, si porta a codice ingiustificatamente complesso e poco resiliente del tipo cosiddetto codice spaghetti!
Perciò, prova invece il seguente codice che ha una struttura più semplice, più pulito e che credo sia più robusto e resistente. In ogni caso, mi sorprenderebbe se tu dovessi riscontrare alcun problema a causa del codice stesso:
'=========>>
Option Explicit
Public theCell As Range
'--------->>
Public Sub FindFirstBlank()
Dim WB As Workbook
Dim SH As Worksheet
Dim i As Long, Lrow As Long
Dim iRow As Long, jrow As Long
Dim V As Variant
Dim Rng As Range, Rng2 As Range, rCell As Range
Dim bIntervalloPieno As Boolean
Const sRange As String = "A1:A20" '<<=== Modifica
Set WB = ActiveWorkbook
V = ActiveCell.Value
If V = vbNullString Then
Call MsgBox(Prompt:="La cella attiva e' vuota! Riprova!", _
Buttons:=vbCritical, _
Title:="CONTROLLA CELLA ATTIVA")
Exit Sub
End If
For i = 2 To 4
Set SH = WB.Worksheets(i)
With SH
Lrow = .Cells(Rows.Count, "A").End(xlUp).Row
Set Rng = .Range("A1:A" & Lrow)
With .UsedRange.Columns(1)
iRow = .Cells(.Cells.Count).Row
End With
On Error Resume Next
Set Rng = .Range(sRange)
With Rng
jrow = .Cells(.Cells.Count).Row
End With
Set Rng2 = Rng.SpecialCells((xlCellTypeBlanks))
If Not Rng2 Is Nothing Then
Set rCell = Rng2.Cells(1)
Else
bIntervalloPieno = Lrow >= jrow
End If
If rCell Is Nothing Then
If Not bIntervalloPieno Then
Set rCell = Rng.Cells(iRow + 1).End(xlUp)(2)
End If
End If
End With
If Not rCell Is Nothing Then
rCell.Value = V
Set theCell = rCell
Exit For
End If
Next i
If Not rCell Is Nothing Then
Set theCell = rCell
Application.Goto rCell
Call SecondaMacro
Else
Call MsgBox(Prompt:="Non ci sono trovato una cella vuota " _
& "nell'intervallo " & sRange _
& " sui fogli interessati." _
& vbNewLine _
& "La seconda macro non e' stata avviata!", _
Buttons:=vbInformation, _
Title:="Controlla Intervalli!")
End If
End Sub
'--------->>
Public Sub SecondaMacro()
With theCell
Call MsgBox(Prompt:="La cella riepita si trova a: " _
& .Address(0, 0, , 1), _
Buttons:=vbInformation, _
Title:="DEMO")
.Interior.ColorIndex = 3 '\Rosso
End With
End Sub
'<<=========
Potresti scaricare il file aggiornato Bocolo20160216.xlsm a:
https://www.dropbox.com/s/mdabnyi0ullcfay/Bocolo20160216.xlsm?dl=0
===
Regards,
Norman