Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


3534 / 13645 ツリー ←次へ | 前へ→

【61565】マクロ実行中でのシート固定 たけ 09/5/18(月) 23:22 質問[未読]
【61566】Re:マクロ実行中でのシート固定 kanabun 09/5/19(火) 0:02 発言[未読]
【61567】Re:マクロ実行中でのシート固定 kanabun 09/5/19(火) 0:24 発言[未読]
【61568】Re:マクロ実行中でのシート固定 たけ 09/5/19(火) 10:01 発言[未読]
【61569】Re:マクロ実行中でのシート固定 もも 09/5/19(火) 10:26 発言[未読]
【61570】Re:マクロ実行中でのシート固定 kanabun 09/5/19(火) 11:12 発言[未読]
【61571】Re:マクロ実行中でのシート固定 もも 09/5/19(火) 13:17 発言[未読]
【61572】Re:マクロ実行中でのシート固定 たけ 09/5/19(火) 21:22 お礼[未読]

【61565】マクロ実行中でのシート固定
質問  たけ  - 09/5/18(月) 23:22 -

引用なし
パスワード
   度々お世話になります.

条件分岐でオートシェイプの塗りつぶしを行っているのですが,
条件分岐がたくさんあるため,その都度マクロ実行中に作業シートが
めまぐるしく動いてしまいます.

例えばですが,

--------------------------------------------
Application.ScreenUpdating = False

Worksheets("入力シート").Activate

  Select Case ActiveSheet.Cells(4, 48).value
    Case 1
      Sheets("反映シート").Select
      
      ActiveSheet.Shapes("pp001").Select
      Selection.ShapeRange.Fill.Visible = msoTrue
      Selection.ShapeRange.Fill.ForeColor.SchemeColor = 10
    
    Case Else
      Sheets("反映シート").Select
      
      ActiveSheet.Shapes("pp001").Select
      Selection.ShapeRange.Fill.Visible = msoFalse
    
  End Select

Application.ScreenUpdating = True
--------------------------------------------

こんな条件分岐が多々あります.

ScreenUpdatingが効かない理由として,色々と調べてみると,
どうもSelectが関係しているというところまでは理解できました.
(Selectにより,シート固定ができなくなるようですが)


このコードを変法して,Selectを使わない(めまぐるしいシート移動がない)
方法が可能でしょうか?

ヒントを頂ければと思います.

【61566】Re:マクロ実行中でのシート固定
発言  kanabun  - 09/5/19(火) 0:02 -

引用なし
パスワード
   ▼たけ さん:
こんばんは。

>条件分岐がたくさんあるため,その都度マクロ実行中に作業シートが
>めまぐるしく動いてしまいます.
>このコードを変法して,Selectを使わない(めまぐるしいシート移動がない)
>方法が可能でしょうか?

>例えばですが,
>--------------------------------------------
>Application.ScreenUpdating = False
>
  With Sheets("反映シート").Shapes("pp001").ShapeRange
    If Worksheets("入力シート").Cells(4, 48).value = 1 Then
      .Fill.Visible = msoTrue
      .Fill.ForeColor.SchemeColor = 10
    Else
      .Fill.Visible = msoFalse
    End If
  End With
>
>Application.ScreenUpdating = True
>--------------------------------------------
というふうにしたら、どうでしょう?
(試してませんが)

【61567】Re:マクロ実行中でのシート固定
発言  kanabun  - 09/5/19(火) 0:24 -

引用なし
パスワード
   原理的には
>
 Dim flag as boolean 'ブール型の変数を追加して ここにFlagを取得し
 flag = (Worksheets("入力シート").Cells(4, 48).value = 1)
 With Sheets("反映シート").Shapes("pp001").ShapeRange
   .Fill.Visible = flag      'msoTrue/またはmsoFalse をセットする
   .Fill.ForeColor.SchemeColor = 10
 End With
>
という書き方でもいいはずですね。

【61568】Re:マクロ実行中でのシート固定
発言  たけ  - 09/5/19(火) 10:01 -

引用なし
パスワード
   ▼kanabun さん:

> With Sheets("反映シート").Shapes("pp001").ShapeRange

この部分がエラーとなってしまいます.

また,質問前に,select caseにて
Select Case ActiveSheet.Shapes("pp001").ShapeRange

と定義して試しておりますが,同様に
「このオブジェクトはこのプロパティまたはメゾットをサポートしておりません」
のエラーが返ってきます.

【61569】Re:マクロ実行中でのシート固定
発言  もも  - 09/5/19(火) 10:26 -

引用なし
パスワード
   ▼たけ さん:

こうしてみては?

Application.ScreenUpdating = False

Select Case Worksheets("入力シート").Cells(4, 48).Value
 Case 1
  With Sheets("反映シート").Shapes("pp001")
   .Fill.Visible = msoTrue
   .Fill.ForeColor.SchemeColor = 10
  End With
 Case Else
  Sheets("反映シート").Shapes("pp001").Fill.Visible = msoFalse
End Select

Application.ScreenUpdating = True

【61570】Re:マクロ実行中でのシート固定
発言  kanabun  - 09/5/19(火) 11:12 -

引用なし
パスワード
   ▼たけ さん:

>> With Sheets("反映シート").Shapes("pp001").ShapeRange
>
>この部分がエラーとなってしまいます.
>「このオブジェクトはこのプロパティまたはメゾットをサポートしておりません」
>のエラーが返ってきます.

すみまっせん〜
すでに ももさんからフォローありますとおり、 ShapeRange は不要です。
やっぱり 試してなくてレスするとだめですね。

> Shapes("pp001").Select
> Selection.ShapeRange.Fill ...
と、セレクトしたときは ShapeRangeが要るのに、
Selectしないと なぜ ShapeRangeが不要なのかは、
 Shapeを Select したとき
 Selection は Shapeでなく Rectangle とか Oval とか Picture とかの
 Shapeとは別のDrawingObject に変わっているからです。

で、Selectしたときは
 それらのオブジェクトの ShapeRangeプロパティを使って 一度
 Shapeオブジェクトへの参照を得て Shapeのなかにある Fill プロパティを
 呼び出す、ということをしていたわけです。

ももさん、フォローありがとうございます。(^^

【61571】Re:マクロ実行中でのシート固定
発言  もも  - 09/5/19(火) 13:17 -

引用なし
パスワード
   ▼kanabun さん:

フォローはたいした事では無いので恐縮です。
それよりも、なぜそうなるのかの説明が勉強になりました。

私の方こそありがとうございます。

【61572】Re:マクロ実行中でのシート固定
お礼  たけ  - 09/5/19(火) 21:22 -

引用なし
パスワード
   ▼もも さん:
▼kanabun さん:

返答ありがとうございました.無事に問題なく動いております.

shapeの扱いについて,また一つ勉強になりました.

3534 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free