Una famiglia di software per fogli di calcolo Microsoft con strumenti per l'analisi, la creazione di grafici e la comunicazione dei dati.
Ciao Mario,
mi chiedevo se ci sono limiti al n di righe.
Ho completato l'elenco che è di 2520 righe ho applicato la tua routine ma compare questo alert
dando ok il risultato è molto confuso e comunque diverso da quello ottenuto con poche righe.
Prova con questo che è compresso
L'errore che hai riscontrato è un errore generico ma, in questa istanza, credo che sia dovuto ad una mancanza di risorsi.
A questo proposito, non mi stupisce che hai riscontrato un errore visto che il file pesa 22 MB e comprende 2520 collegamenti ipertestuali e 630 foto!
Pertanto, vorrei suggerire di riavviare il tuo Mac e rieseguire il codice, dopo aver chiuso eventuali altri programmi.
Se dovessi ancora riscontrare lo stesso problema, prova a sostituire il codice precedente con la seguente versione:
'--------->>
Public Sub Tester()
Dim WB As Workbook
Dim SH As Worksheet
Dim Rng As Range
Dim LRow As Long, i As Long, j As Long
Dim CalcMode As Long
Const sFoglio As String = "Foglio1" '<<=== Modifica
Set WB = ThisWorkbook
Set SH = WB.Sheets(sFoglio)
With Application
CalcMode = .Calculation
.Calculation = xlCalculationManual
.ScreenUpdating = False
End With
With SH
.UsedRange.SpecialCells(xlCellTypeBlanks).Delete
LRow = LastRow(SH, .Columns("A:A"))
Set Rng = .Range("A1:A" & LRow)
.Rows(1).Resize(LRow / 3).RowHeight = .Pictures(1).Height + 4
End With
j = SH.Pictures.Count
With Rng
.Columns("A").EntireColumn.ColumnWidth = 14.75
.Columns("B:C").VerticalAlignment = xlCenter
For i = LRow To 1 Step -3
.Cells(i - 2).Resize(2).Copy
.Cells(i - 2, 2).PasteSpecial Paste:=xlPasteAll, Transpose:=True
.Cells(i - 1).Resize(2, 3).Delete Shift:=xlUp
Set oPic = SH.Pictures(j)
oPic.Top = .Cells(i - 2).Top
oPic.Left = .Cells(i - 2).Left
oPic.Placement = 2
j = j - 1
Next i
.Columns("A").Clear
With .Columns("B:C")
.EntireColumn.AutoFit
.VerticalAlignment = xlCenter
End With
End With
XIT:
With Application
.Calculation = CalcMode
.ScreenUpdating = True
End With
End Sub
'--------->>
Public Function LastRow(SH As Worksheet, _
Optional Rng As Range, _
Optional minRow As Long = 1, _
Optional sPassword As String)
Dim bProtected As Boolean
With SH
If Rng Is Nothing Then
Set Rng = .Cells
End If
bProtected = .ProtectContents = True
If bProtected Then
.Unprotect Password:=sPassword
End If
End With
On Error Resume Next
LastRow = Rng.Find(What:="*", _
after:=Rng.Cells(1), _
Lookat:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Row
On Error GoTo 0
If LastRow < minRow Then
LastRow = minRow
End If
If bProtected Then
SH.Protect Password:=sPassword, _
UserInterfaceOnly:=True
End If
End Function
'<<=========
Tuttavia, mi sembra possibile che il file ottenuto come risultato dell'esecuzione, senza problemi, del codice possa essere sufficiente per i tuoi scopi e, qualora questa ipotesi fosse vera, puoi scaricare il seguente file:
===
Regards,
Norman