私は、どの形状が配置されているかを確認したい範囲があります。Excel 2003では、範囲の左上と右下を取得する方法は?
私はオンラインスクリプト(http://www.mrexcel.com/forum/excel-questions/317711-visual-basic-applications-identify-top-left-cell-selected-range.html)を見つけましたが、それは、Excel 2003のために、私がこれまでに見つかったスクリプトからadapatedされているコードは動作しません。
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とobjBotRightは両方とも何もありませんCOLUMN_HEADINGSには範囲の名前が含まれます。
デバッガでintFirstCol、intFirstRow、intLastCol、およびintLastRowをチェックしていますが、正しいです。
編集... .Addressがコメントアウトされていて、topleftとbotrightの両方の範囲が返されますが、.Address inの場合は両方ともNothingです。返される範囲は、正しい場所のものではないようです。供給された範囲については、例えば
:
intFirstCol = 3
intFirstRow = 11
intLastCol = 3
intLastRow = 186
上記しかし、正しい:
objTopLeft.Column = 5
objTopLeft.Row = 21
objBotRight.Column = 5
objBotRight.Row = 196
があなたは、上記の正しくない、カラムは+2であり、行は+10でありますどうして?
関連する位置/スクリーンショットをExcelの範囲/シェイプを投稿 – user3598756