J'ai une gamme que je voudrais vérifier pour voir si des formes sont placées sur elle.Excel 2003, comment obtenir en haut à gauche et en bas à droite de la plage?
J'ai trouvé un script en ligne (http://www.mrexcel.com/forum/excel-questions/317711-visual-basic-applications-identify-top-left-cell-selected-range.html), mais il ne fonctionne pas pour Excel 2003. Le code que je l'ai à ce jour qui est adapated à partir du script trouvé:
Public Function removeOLEtypesOfType() As Boolean
On Error Resume Next
Dim objTopLeft As Range, objBotRight As Range _
, objRange As Range, objShape As Shape
Set objRange = Sheet1.Range(COLUMN_HEADINGS)
objRange.Select
With Selection
Dim intFirstCol As Integer, intFirstRow As Integer _
, intLastCol As Integer, intLastRow As Integer
intFirstCol = .Column
intFirstRow = .Row
Set objTopLeft = .Cells(intFirstRow, intFirstCol) '.Address(0, 0)
intLastCol = .Columns.Count + .Column - 1
intLastRow = .Rows.Count + .Row - 1
Set objBotRight = .Cells(intLastRow, intLastCol) '.Address(0, 0)
If objTopLeft Is Nothing Or objBotRight Is Nothing Then
MsgBox "Cannot get topleft or bottom right of range!", vbExclamation
removeOLEtypesOfType = False
Exit Function
End If
For Each objShape In ActiveSheet.Shapes
Dim objTLis As Range
Set objTLis = Intersect(objTopLeft, objShape.TopLeftCell)
If Not objTLis Is Nothing Then
Dim objBRis As Range
Set objBRis = Intersect(objBotRight, objShape.BottomRightCell)
If Not objBRis Is Nothing Then
objShape.Delete
End If
End If
Next
End With
Sheet1.Cells(1, 1).Select
removeOLEtypesOfType = True
End Function
objTopLeft et objBotRight sont à la fois rien , COLUMN_HEADINGS contient le nom de la plage.
J'ai vérifié intFirstCol, intFirstRow, intLastCol et intLastRow dans le débogueur et ils sont corrects.
Modifier ... Avec .Address commenté à la fois les plages de topleft et de botright sont renvoyées mais avec .Address in, les deux sont Nothing. Les plages retournées ne semblent pas correspondre aux emplacements corrects.
Par exemple, pour la gamme fournie:
intFirstCol = 3
intFirstRow = 11
intLastCol = 3
intLastRow = 186
ci-dessus sont corrects, cependant:
objTopLeft.Column = 5
objTopLeft.Row = 21
objBotRight.Column = 5
objBotRight.Row = 196
te sont au-dessus pas correct, les colonnes sont 2 et les lignes sont 10, Pourquoi?
poster vos gamme Excel/formes/screenshots positions pertinentes – user3598756