質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

解決済

2回答

532閲覧

アクティブではないシートに丸付けをするマクロ

MKHALFMOON

総合スコア27

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

0クリップ

投稿2017/08/22 05:49

編集2017/08/22 05:50

・やりたいこと
sheet1がアクティブな状態でマクロを実行させて、sheet2の選択セルの範囲にAddShapeで生成したオートシェイプに対して塗りつぶしなし(輪郭線は黒色)の丸付け処理をさせたい。
Selection以外に何かエラーを解決できる方法があればお教え頂きたいです。

・現状
sheet2がアクティブな状態であればマクロが正常に動作する段階ではある。

・前提
変数typeは別のサブプロシージャにて定義済
type_Check()は別のサブプロシージャ内でCallされる

実行時エラー '438'

オブジェクトは、このプロパティまたはメソッドをサポートしていません。

VBA

1' 選択されているセルに丸を付けるマクロ 2Sub type_Check() 3Application.ScreenUpdating = False 4 5If Not type = "" Then 6 7 If type = "A" Then 8 With ThisWorkbook.Worksheets("sheet2").Range("C6:D6") 9 Worksheets("sheet2").Shapes.AddShape _ 10 (msoShapeOval, Left:=.Left, Top:=.Top, Width:=.Width, Height:=.Height).Select 11 Selection.ShapeRange.Fill.Visible = msoFalse 'この行でエラー 12 End With 13 14 ElseIf type = "B" Then 15 With ThisWorkbook.Worksheets("sheet2").Range("E6:F6") 16 Worksheets("sheet2").Shapes.AddShape _ 17 (msoShapeOval, Left:=.Left, Top:=.Top, Width:=.Width, Height:=.Height).Select 18 Selection.ShapeRange.Fill.Visible = msoFalse 'この行でエラー 19 End With 20 21 End If 22 23 'オートシェイプの線を黒くする 24 With Selection.ShapeRange.Line 25 .Visible = msoTrue 26 .ForeColor.ObjectThemeColor = msoThemeColorText1 27 .ForeColor.TintAndShade = 0 28 .ForeColor.Brightness = 0 29 .Transparency = 0 30 End With 31Else 32 MsgBox ("データが存在しないか間違っています。") 33End If 34 35End Sub

以上、よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

AddShapeメソッドは戻り値に生成したShapeオブジェクトを返却しますので、それを受け取って使えばよろしいかと思います。
https://msdn.microsoft.com/ja-jp/library/office/ff821384.aspx

VBA

1' 選択されているセルに丸を付けるマクロ 2Sub type_Check() 3Dim sh as Shape 4Application.ScreenUpdating = False 5 6If Not type = "" Then 7 8 If type = "A" Then 9 With ThisWorkbook.Worksheets("sheet2").Range("C6:D6") 10 Set sh = Worksheets("sheet2").Shapes.AddShape _ 11 (msoShapeOval, Left:=.Left, Top:=.Top, Width:=.Width, Height:=.Height) 12 sh.Fill.Visible = msoFalse 13 End With 14 15~以下省略~

投稿2017/08/22 06:20

ttyp03

総合スコア16996

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

AddShape の戻り値として Shape オブジェクトが得られますので、これを変数にとって置くことで Selection を使わずに済みます。
これにより、Sheet2 がアクティブでなくても、円が作成できます。

以下、Excel 2013 で動作したコードです。

vba

1Option Explicit 2 3 4' 選択されているセルに丸を付けるマクロ 5' type の宣言がなかったので、引数に「shape_type」を追加。 6' 使い方: 7' type_Check "A" 8Sub type_Check(shape_type As String) 9Application.ScreenUpdating = False 10 11' 作成したシェイプオブジェクトを保存する変数 12Dim sh As Shape 13 14' シート名。定数で定義。 15Const wsName As String = "Sheet2" 16'ThisWorkbook.Worksheets(wsName).Activate 17 18If Not shape_type = "" Then 19 20 If shape_type = "A" Then 21 With ThisWorkbook.Worksheets(wsName).Range("C6:D6") 22 ' 作成したシェイプオブジェクトを取得。B も同じ。 23 Set sh = Worksheets(wsName).Shapes.AddShape _ 24 (msoShapeOval, Left:=.Left, Top:=.Top, Width:=.Width, Height:=.Height) 25 26 ' 以下の通り訂正。Bも同じ。 27 'Selection.ShapeRange.Fill.Visible = msoFalse 28 sh.Fill.Visible = msoFalse 'この行でエラー 29 End With 30 31 ElseIf shape_type = "B" Then 32 With ThisWorkbook.Worksheets(wsName).Range("E6:F6") 33 Set sh = Worksheets(wsName).Shapes.AddShape _ 34 (msoShapeOval, Left:=.Left, Top:=.Top, Width:=.Width, Height:=.Height) 35 sh.Fill.Visible = msoFalse 'この行でエラー 36 End With 37 38 End If 39 40 'オートシェイプの線を黒くする 41 ' Selection から、sh オブジェクトに変更。 42 ' With Selection.ShapeRange.Line 43 With sh.Line 44 .Visible = msoTrue 45 .ForeColor.ObjectThemeColor = msoThemeColorText1 46 .ForeColor.TintAndShade = 0 47 .ForeColor.Brightness = 0 48 .Transparency = 0 49 End With 50Else 51 MsgBox ("データが存在しないか間違っています。") 52End If 53 54End Sub 55

Shapes.AddShape メソッド (Excel)

ご参考になれば幸いです。

投稿2017/08/22 06:23

tukuroku

総合スコア234

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

MKHALFMOON

2017/08/22 07:08

コメント文も付けていただき、とても分かり易かったです。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問