A ChartObject
のPlacement
プロパティは、その下にあるセルに取り付けられている方法を制御します。 XlPlacement Enumerationを参照してください。残りのチャートオブジェクト(完全に削除された列が削除された後)は、おそらくPlacement = xlFreeFloating
です。
ここでは、このような状況を処理するためのサブステップを示します。最初にPlacement
の値をバッファしてから列の削除を実行し、元のPlacement
の値を再設定します。
Public Sub DeleteColumnsAndCharts(ByVal pColumnsToDelete As Excel.Range)
On Error GoTo errHandler
Dim PlacementByChartName As Object 'Scripting.Dictionary
Dim chartsWorksheet As Excel.Worksheet
Dim chart As Excel.ChartObject
Set PlacementByChartName = CreateObject("Scripting.Dictionary")
Set chartsWorksheet = pColumnsToDelete.Worksheet
'Keep the original Placement values before changing them.
For Each chart In chartsWorksheet.ChartObjects
PlacementByChartName(chart.Name) = chart.Placement
chart.Placement = xlMoveAndSize
Next
'Should the Delete method below fail, the Recover section will leave the worksheet intact.
pColumnsToDelete.EntireColumn.Delete
Recover:
On Error Resume Next
'Restore the original Placement values on the remaining chart objects.
For Each chart In chartsWorksheet.ChartObjects
chart.Placement = PlacementByChartName(chart.Name)
Next
Set chart = Nothing
Set chartsWorksheet = Nothing
Set PlacementByChartName = Nothing
Exit Sub
errHandler:
MsgBox Err.Description, vbExclamation + vbOKOnly, "Error"
Resume Recover
End Sub
あなたはこのようにそれを呼び出すことができます。
DeleteColumnsAndCharts wtemp.Sheets("Graphs").Range("A:X")
Excelのグラフがオブジェクトである、彼らはセルの内容ではありません。それらを '.Charts'コレクションから削除します。 – AlexP
何も起こっていないかのようにチャートがそのまま表示されるのですか、移動/サイズ変更されますか?それらがそのまま残っている場合は、「移動しないでサイズを変更する」オプションがあります。彼らが動いてばかげて小さくなると、あなたが削除する列よりも大きいだけです。 – Excelosaurus
@AlexPはい。それらは.chartsから削除することができますが、私の場合は、他の範囲の削除後にそれらの上のテーブルで移動することを望みます。また、私は行ごとにそれを実行すると、すべてがうまく動作している理由も私は不思議です。 –