
いつも勉強させていただいております.どうぞよろしくお願いいたします.
とんちんかんな質問でしたらもうしわけございません.
多分オブジェクト定義あたりの問題だと思うのですが,
.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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- Visual Basic(VBA) VBAの繰り返し処理について教えてください。 3 2022/08/02 13:21
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) VBA This Workbookモジュールを別ファイルにコピーする方法 1 2022/09/14 01:51
- Excel(エクセル) エクセル VBA For Next 繰り返しの書き方を教えてください 6 2022/09/01 14:11
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
worksheetFunctionクラスのVloo...
-
Word VBAでStyle型の変数に空の...
-
「Columns("A:C")」の列文字を...
-
テキストボックス中の文字列の...
-
エクセルのVBAの標準モジュール...
-
オブジェクト変数またはWITHブ...
-
Excelでフィルタをかけると警告...
-
Excel VBAでWordの複数ファイル...
-
ExcelVBAでのNZ関数について
-
Excel VBA Collection.add で R...
-
エクセルのテキストボックスをV...
-
MSDEでオートメーションエラー
-
AccessVBAで「dim dbs as datab...
-
ExcelのVBAについて(グラフ操作)
-
上下の位置揃えについて
-
VBAで Set wb = Sheets(1).Cop...
-
Access VBAとExcel VBAとはどの...
-
エクセルVBAで2つの画像を比較...
-
エクセルマクロエラー「'Cells'...
-
EXCEL VBA オートシェイプナン...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
worksheetFunctionクラスのVloo...
-
「Columns("A:C")」の列文字を...
-
エクセルのVBAの標準モジュール...
-
Excelでフィルタをかけると警告...
-
実行時エラー 3265「要求された...
-
VBAで既に開いている別アプリケ...
-
テキストボックス中の文字列の...
-
ExcelVBAでのNZ関数について
-
[VBA]CDOメッセージ送信エラー
-
EXCEL VBA オートシェイプナン...
-
VBAで Set wb = Sheets(1).Cop...
-
エクセルマクロエラー「'Cells'...
-
AccessVBAで「dim dbs as datab...
-
Excel VBAでWordの複数ファイル...
-
オブジェクトが見つかりません
-
CreateObjectとGetObjectの違い
-
エクセルVBAで配列内に空白デー...
-
オブジェクト変数またはWITHブ...
-
VBScriptからDLL参照設定したい
-
エクセルVBAでcode128のバー...
おすすめ情報