質問: ガントチャート、バーの変更 vbaでガントチャートを作っています。 今時刻を入力しなおすと、「今ある バーを消してから再度バーを生成する」という処理を 行っています。 '削除処理 bar.delete '挿画処理 set bar(~) といった感じです。これを、一度消してから 生成するのではなく、時刻が変わったら既存のバーを 「変更する」、といった形で行いたいと思っています。 詳しい回答をしていただきたいです。 よろしくお願いします。
回答: barとは何のobjectか、 時刻を入力する事によってbarがどう変動するのか、 現状の描画処理のコードはどういうコードか、 が書いてないのに『詳しい』回答はできないと思いますよ? 考え方としては、bar 作成時に、一意の名前を付ければ済む話です。 『標準モジュール』に以下を置いて実行してください。 sub pre() sheets.add.range("a1:c3").value = [{"item","start","finish";"a",200,300;"b",400,500}] end sub 新規シートが追加されます。 できた新規シートの『シートモジュール』に以下を置いてください。 option explicit private sub worksheet_change(byval target as range) dim r as range 'targetが範囲の場合のloop用 dim rect as rectangle 'shapeの四角形 dim x as long '変更セルの行 with me set target = intersect(target, .range("b2:c3")) if not target is nothing then for each r in target select case r.column case 2 'startを変更した時の処理(割愛) case 3 'finishを変更した時の処理 x = r.row on error resume next set rect = .rectangles("rect" & x) on error goto 0 '名前 "rect" & x の四角形がない時は追加する。 if rect is nothing then set rect = .rectangles.add(0, r.top + 2, 0, 5) rect.name = "rect" & x end if rect.left = r.offset(, -1).value rect.width = r.value - r.offset(, -1).value case else end select next end if end with set rect = nothing end sub c2 or c3を変更してみてください。 [win2000/xl2000]の環境で動作確認。2007では試していません。 ちなみに bar が shapeの四角形の事だとして、既存のshapeの名前を変更するには sub rname() dim rect as rectangle for each rect in activesheet.rectangles rect.name = "rect" & rect.topleftcell.row next end sub こんな感じです。"rect" & 行no.にしています。 >vbaでガントチャートを作っています。 (以上は、excel vba と仮定した上でのアドバイスです)