いつも勉強させていただいております.どうぞよろしくお願いいたします.
とんちんかんな質問でしたらもうしわけございません.
多分オブジェクト定義あたりの問題だと思うのですが,
.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も見ています
-
「どうして捨てられないの?」前妻の物を捨てられない男性の心理って?
前妻の物を捨てられない理由に加え、捨てるための手段はあるのかを専門家に聞いてみた!
-
オブジェクト変数またはWITHブロックが設定されていません
Visual Basic(VBA)
-
String"から型'Double'への変換は無効です。 とエラーが出ます。
Visual Basic(VBA)
-
VBで、String型のデータが、全角か、半角かを判断する関数は・・・
Visual Basic(VBA)
-
-
4
エラー91 オブジェクト変数またはブロック変数が設定されてません
Visual Basic(VBA)
-
5
【VB】タブ切り替え時のイベント
Visual Basic(VBA)
-
6
VBで既存エクセルシートを新規ブックにコピー
Visual Basic(VBA)
-
7
Designer.vbは直接コードをいじってはだめ?
Visual Basic(VBA)
-
8
VBのReturnの使い方
Visual Basic(VBA)
-
9
配列の重複する値とその個数を取得したい
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
worksheetFunctionクラスのVloo...
-
「Columns("A:C")」の列文字を...
-
実行時エラー 3265「要求された...
-
エクセルのVBAの標準モジュール...
-
VBAで作成するメール(開封確認...
-
VBScriptでファイルの日時順(降...
-
オブジェクト変数またはWITHブ...
-
VBS 指定のフォルダ内の最新の...
-
AccessVBAで「dim dbs as datab...
-
テキストボックス中の文字列の...
-
横軸ラベルの追加に関するエラ...
-
オートメーションエラーについて
-
VBAで既に開いている別アプリケ...
-
マクロ初心者です。 インデック...
-
ExcelのVBAについて(グラフ操作)
-
Excelでフィルタをかけると警告...
-
オブジェクトが見つかりません
-
エクセルマクロエラー「'Cells'...
-
エクセルVBAでFor each文
-
アクセスにてオブジェクト名変...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
worksheetFunctionクラスのVloo...
-
「Columns("A:C")」の列文字を...
-
エクセルのVBAの標準モジュール...
-
実行時エラー 3265「要求された...
-
Excelでフィルタをかけると警告...
-
VBAで既に開いている別アプリケ...
-
エクセルマクロエラー「'Cells'...
-
テキストボックス中の文字列の...
-
VBAで Set wb = Sheets(1).Cop...
-
ある文字列が全て数字であるか...
-
VBAからPDFファイルにパスワー...
-
VBScriptでファイルの日時順(降...
-
EXCEL VBA オートシェイプナン...
-
[VBA]CDOメッセージ送信エラー
-
エクセルVBAで2つの画像を比較...
-
PowerPointVBAでスライドマスタ...
-
UserForm1.Showでエラーになり...
-
上下の位置揃えについて
-
VBAについてです。 初心者です...
-
VBAで作成するメール(開封確認...
おすすめ情報