
いつも勉強させていただいております.どうぞよろしくお願いいたします.
とんちんかんな質問でしたらもうしわけございません.
多分オブジェクト定義あたりの問題だと思うのですが,
.NETでエクセルのオートシェイプ文字をいじる際,
Dim objShape As Object
Dim objSelection As Object
For i = 1 To WB.Worksheets(N_s).Shapes.count
objShape = WB.Worksheets(N_s).Shapes(i)
If objShape.Type = 6 Then
objSelection = objShape.Select()
For Each tbox In objShape.Ungroup()
If TypeName(tbox) = "TextBox" Then
tbox.Text = Replace(tbox.Text, OldStr, NewStr)
End If
Next
objSelection.ShapeRange.Regroup() '←ここでエラーが出ます
Else
End If
Next
ずっと調べておりますと,同じような質問があり,解決しているようなのですが,
理解できませんでした...
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.ph …
objSelection As Objectで宣言しているからOK.というわけでは
ないのでしょうか??
とんちんかんな質問かもしれませんが,なんでもアドバイスいただけれると
うれしいです.どうぞよろしくお願いいたします.
No.2ベストアンサー
- 回答日時:
#1 redfox63さんの回答について
.NETなので、Setステートメントは必要ないです。
MSDNで調べてみただけですが、ShapeオブジェクトのSelectメソッドは「Subプロシージャ」なので戻り値はないようです。
なので、objSelectionに何も値が入っていないのではないかと。
MSDNでは、Shape.UngroupメソッドでShapeRageを返しているので、
> objSelection = objShape.Select()
> For Each tbox In objShape.Ungroup()
この2行が次のようになるのではないかと推測。
objShape.Select()
objSelection = objShape.Ungroup() 'objSelectionにShapeRangeが入る
For Each tbox In objSelection
こうしておいて、再グループ化するときは、
> objSelection.ShapeRange.Regroup()
ではなく
objSelection.Regroup()
とすればよいような気がします。
ご提示されたコードとMSDNを見ただけの推測回答ですが、ご参考になれば。
どうもありがとうございます!!
おっしゃるとおりでした!一瞬で自分のやりたかったことができました.
>ShapeオブジェクトのSelectメソッドは「Subプロシージャ」なので戻り値はないようです。
>なので、objSelectionに何も値が入っていないのではないかと。
>MSDNでは、Shape.UngroupメソッドでShapeRageを返しているので
MSDNというとあの赤いページですよね...検索中にしょっちゅう
ひっかかるのですが,いつも理解できず...
どういう理由でそうなるか,までご丁寧に説明いただき
どうもありがとうございます.
ご説明いただいた戻り値の部分を今日の夜から勉強します.
今回Wizard_Zero様からいただいたような,今の自分が何を理解しておらず
どのへんを勉強すればよさそうなのかが分かりやすいご回答は
非常にうれしいです.
夜遅い時間にかかわらずご回答いただき本当にありがとうございました!!
No.1
- 回答日時:
オブジェクトの代入には Setという特別な命令が必要になります
If objShape.Type = 6 Then
' 行頭に Setを追加します
Set objSelection = objShape.Select()
For Each tbox In objShape.Ungroup()
If TypeName(tbox) = "TextBox" Then
tbox.Text = Replace(tbox.Text, OldStr, NewStr)
End If
Next
objSelection.ShapeRange.Regroup() '←ここでエラーが出ます
Else
End If
どうもありがとうございます!
試してみましたが,入力するとSetが消えてしまいます..
もう少しべんきょうしてみます.アドバイスいただきどうも
ありがとうございました!!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
worksheetFunctionクラスのVloo...
-
VBAからPDFファイルにパスワー...
-
エクセルのVBAの標準モジュール...
-
「Columns("A:C")」の列文字を...
-
Excelでフィルタをかけると警告...
-
実行時エラー 3265「要求された...
-
VBA:オートシェイプの線の長...
-
VBA msoShapeBlockArcで扇形の...
-
上下の位置揃えについて
-
エクセル エラー438
-
Word2007数式でIMEオン/オフを...
-
VBA オブジェクトが空かどうか...
-
VBAでエクセルに入力された複数...
-
ある文字列が全て数字であるか...
-
VBAでWebページにセルの値を入力
-
VBでPDFファイルを編集する
-
エクセルマクロエラー「'Cells'...
-
Excel VBA オブジェクトマクロ ...
-
AccessVBAで「dim dbs as datab...
-
Excel VBA Collection.add で R...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
worksheetFunctionクラスのVloo...
-
「Columns("A:C")」の列文字を...
-
PowerPointVBAでスライドマスタ...
-
エクセルのVBAの標準モジュール...
-
Excelでフィルタをかけると警告...
-
実行時エラー 3265「要求された...
-
テキストボックス中の文字列の...
-
VBAからPDFファイルにパスワー...
-
VBAで既に開いている別アプリケ...
-
Excel VBAでIEにアクセスするプ...
-
オブジェクトが見つかりません
-
ExcelVBAでのNZ関数について
-
エクセルVBAでcode128のバー...
-
WordにOLEで埋め込んだExcelでW...
-
AccessVBAで「dim dbs as datab...
-
エクセルマクロエラー「'Cells'...
-
エクセル エラー438
-
[VBA]CDOメッセージ送信エラー
-
VBAで作成するメール(開封確認...
-
VBScriptでファイルの日時順(降...
おすすめ情報