こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

excel vba inputbox

初心者です。質問させて下さい。
inputboxでhelpを参照すると、typeの指定は以下ですが、
値 意味
0 数式
1 数値
2 文字列 (テキスト)
4 論理値 (True または False)
8 セル参照 (Range オブジェクト)
16 #N/A などのエラー値
64 数値配列

やはり、図形を選択させる事は不可能でしょうか?

具体的には、
マクロ実行中にinputboxを表示させて、図形を選択させ、図形名を表示させて、その図形を既定の図形に設定させたいと思っています。

図形を一つ選択した状態ならば、その図形の名前は以下のコードのように取得できるのですが、inputboxでは図形がなぜか選択できないです。

そもそも、inputboxを使用しようと思ったのは、他のコマンドやツール等が非選択状態になること、またマクロ実行の途中で一時中断することができ、これらの条件は便利だし必要だと思ったからです。

inputboxは何かで設定を変える等で図形を選択できるのでしょうか?無理でしょうか?
また、代替的なものは他にあるのでしょうか?

Sub testA()
Dim Def As Object
Set Def = Excel.Selection
If TypeOf Def Is Excel.Rectangle Then
MsgBox (Def.Name)
End If
End Sub

無理な質問かもしれませんが、どなたか御教授お願い致します!

投稿日時 - 2009-05-08 22:17:19

QNo.4942612

すぐに回答ほしいです

質問者が選んだベストアンサー

オブジェクト選択ツールをユーザーフォームで自作するのは、かなりたいへんでしょうねぇ。

マクロ実行の途中で一時中断して何かさせる、という観点で、
オフィスアシスタントを使う手もあります。

Sub Sample()
With Assistant
.On = True
.Visible = True
'.Sounds = True
.Filename = "saeko.acs"
With .NewBalloon 'bln
.BalloonType = msoBalloonTypeButtons 'Numbers
.Button = msoButtonSetOK
.animation = msoAnimationWorkingAtSomething
.Labels(1).Text = "図形を選択してOKをクリックしましょう。"
.Mode = msoModeModeless
.Callback = "test00"
.Show
End With
End With
End Sub

Sub test00(bln As Balloon, lbtn As Long, lPriv As Long)
Dim Def As Object
Set Def = Excel.Selection
If TypeOf Def Is Excel.Rectangle Then
MsgBox (Def.Name)
End If
bln.Close
'Assistant.On = False
End Sub

Sampleマクロは終了して、バルーンのボタンクリックで
イベントプロシージャのように、test00が走ります。
まあ、こんなことも出来る、という程度の情報ですが。
本格的にバルーンをたくさん用意して作りこんでいけば、
ウィザード形式のものを作成できるようです。

投稿日時 - 2009-05-13 01:41:12

補足

御回答ありがとうございます!
オフィスアシスタントというのは初めて聞きました!
ウィザード形式までできてしまうとは、すごいですね!!
折角コードまで描いて頂いたのですが、
Assistant.On = True がどうも実行できないようです。
PCの設定の問題でしょうか?(winXp sp3 excel2007)
(msconfigで若干何かをoffにした記憶あり・・・)
まずはNNAQさんが描いてくれたコード自体を、理解できるように、頑張ってみます!!

投稿日時 - 2009-05-13 14:38:01

ANo.3

このQ&Aは役に立ちましたか?

3人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

Officeアシスタントは、excel2007では廃止になりました。
http://officetanaka.net/excel/excel2007/041.htm
無駄な回答ですいませんでした。

さて、図形の操作はよく分からないので、簡単に。
フリーフォームの形状はこんなふうに、取得できるのではないでしょうか。
With Selection.ShapeRange
MsgBox .Type = msoFreeform
MsgBox .Nodes.Count
With .Nodes(1)
MsgBox .EditingType
MsgBox .SegmentType
End With
End With
節点の数だけループさせることになると思いますけど。

オートシェイプの規定値がどうなっているのかは、取得方法が分かりませんでした。

投稿日時 - 2009-05-14 04:05:51

お礼

NNAQさん御回答どうもありがとうございます!!
返答が遅れてすいません。
おぉ!!フリーフォームの形状も取れるのですね!!
そうですか、Officeアシスタントに期待しましたが、なくなったのですか。。。
しかし、Excel2007は図形に関しては結構仕様が変わったというか、自動マクロ記録もできないし、textframe2なんか出来てしまったし、前からVBAをされてた方からすると不便でしょうね。。。始めたばかりなのでただただ難解だと思うばかりですが。。。
オートシェイプの規定値調べてくれてありがとうございます!
NNAQさんでも分からなければ、無理な気がしますが、
これは気になるのでもう一度、質問しなおしてみます。すいません。
またどうぞ宜しくお願い致します!!

投稿日時 - 2009-05-15 18:41:51

ANo.2

こんにちは。

> 発想を転換してユーザーフォームで頑張る以外ないという事でしょうか?
「オートシェイプを規定値に設定」って
一般機能で図形を右クリックして処理できますよね。
ユーザーフォームまで持ち出してマクロを組む必要があるのか
私にはわかりません。

投稿日時 - 2009-05-10 18:12:30

補足

御回答ありがとうございます!返答が遅れてすいません。
はじめはそれで良いと思っていたのですが、
右クリックに出てくる「既定の図形に設定」ではなくいわゆるフォーマットとして定めたいのです。説明が不完全でした。すいません。
そもそも「既定の図形に設定」の情報は取得できるのでしょうか?
SetShapesDefaultProperties メソッドだと、図形の書式の設定だけで、読み取りできるのでしょうか?
また、TypeName や MsoShapeType や MsoAutoShapeType 等、フリーフォームの形状の情報までは取得しないのではないか思い、代案の現在に至りました。
OtenkiAmeさんのおっしゃる通りですが、もう少し頑張りたいと思います。

投稿日時 - 2009-05-13 14:32:34

お礼

OtenkiAmeさん御回答どうもありがとうございました!
「オートシェイプを規定値に設定」の情報取得という質問のテーマが絞れました!
御指導頂きどうもありがとうございます!!

投稿日時 - 2009-05-15 18:44:40

ANo.1

こんにちは。

> また、代替的なものは他にあるのでしょうか?
選択したセル範囲と各図形のセル範囲をIntersectで調べて設定するようにしたら如何でしょうか?

Dim Sentaku As Range
Dim Zukei As Shape

On Error Resume Next
Set Sentaku = Application.InputBox( _
  Prompt:="規定値にしたい図形を描いたセルを選択" & vbCr & _
    "(図形にかかっていればOK!)", Type:=8)
On Error GoTo 0
If Sentaku Is Nothing Then Exit Sub

For Each Zukei In ActiveSheet.Shapes
  If Not Application.Intersect( _
    Sentaku, Range(Zukei.TopLeftCell, Zukei.BottomRightCell)) Is Nothing Then
    MsgBox Zukei.Name
    'Zukei.SetShapesDefaultProperties
    Exit Sub
  End If
Next Zukei

Set Sentaku = Nothing

投稿日時 - 2009-05-09 11:00:40

補足

御回答ありがとうございます!
実際に使った事はなかったのですが、
Intersect と TopLeftCell と BottomRightCell で図形を絞り込んで行く方法は、色々調べて拝見した事がありました。
この方法も有効だと思っています。
なので、具体的にコードを記述して頂き、ありがとうございます!
(初心者なので、よくわからないミスや勘違いでコードを通すのは思った以上に進まないものなので。。。)
しかし inputbox がどうしてもセル選択用であるなら、発想を転換してユーザーフォームで頑張る以外ないという事でしょうか?
ユーザー定義のツール?等も候補でしょうか?
セル範囲の選択よりもオブジェクトの選択ツールの方がより確実に図形を選択できると思っているので、inputbox が残念でなりません。

投稿日時 - 2009-05-10 01:52:21

あなたにオススメの質問