Impedire la mancata esecuzione di una function di sorting quando non è disponibile alcun text per ordinare

Quindi ho due problemi con il codice riportto di seguito. Il primo problema che sto avendo è il fatto che se sono in "Sheet1" e l'esecuzione del codice ottengo un errore di tempo di esecuzione "Scegli il metodo della class Range non è riuscito". L'esecuzione del codice da "Sheet2" funziona bene. Sono abbastanza nuovo per la VBA e dalla mia comprensione ho definito i fogli da select, quindi non so where sia l'errore.

Il secondo problema che sto avendo è con la function di sorting. Se la selezione di origine non ha alcun text, la function di sorting non riesce perché non c'è nulla da ordinare (ha senso). Non so come aggiungere una function per ordinare la selezione se c'è un text e basta passarlo se non lo fa.

So che il codice fornito è probabilmente abbastanza mediocre e ci sono probabilmente modi migliori per gestire lo stesso insieme di dati. Accolgo con favore tutti i suggerimenti per semplificare e gestire meglio questo codice.

Sub DaysCalc() 'Day 1 ToColumn Sheets("Sheet1").Range("B4:AD22"), _ Sheets("Sheet2").Range("A2") Sheets("Sheet2").Range("A2:A552").Select Selection.sort Key1:=Sheets("Sheet2").Range("A2"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ DataOption1:=xlSortNormal Application.DisplayAlerts = False Sheets("Sheet2").Range("A2:A552").Select Selection.TextToColumns Destination:=Sheets("Sheet2").Range("B2"), DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=False, _ Semicolon:=False, Comma:=False, Space:=True, Other:=False, FieldInfo _ :=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), _ Array(7, 1)) End Sub Sub ToColumn(rngIn As Range, topCell As Range) Dim rv() As Variant, n As Long, d, r As Long, c As Long Dim nR As Long, nC As Long, i As Long d = rngIn.Value nR = UBound(d, 1) nC = UBound(d, 2) n = nR * nC ReDim rv(1 To n, 1 To 1) i = 0 For r = 1 To nR For c = 1 To nC i = i + 1 rv(i, 1) = d(r, c) Next c Next r topCell.Resize(n, 1).Value = rv End Sub 

L'errore "Seleziona metodo della class di intervallo non è riuscito". quando si esegue questa operazione su Sheet1 è a causa della linea Sheets("Sheet2").Range("A2:A552").Select che sta cercando di select un intervallo non presente nel foglio di lavoro attivo. Non è necessario effettivamente select l'area per eseguire il sorting e utilizzare i Sheets("Sheet2").Range("A2:A552").Sort Key1:=Sheets("Sheet2").Range("A2"), Order1:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal

Non riceve un errore quando cerco di ordinare un intervallo vuoto, tuttavia lo riceve quando cerco di utilizzare la function Text to Columns. Vorrei suggerire di aggiungere l' On Error Resume Next immediato immediatamente prima di esso per evitare il problema.