
No.8ベストアンサー
- 回答日時:
#4(misatoanna)です。
> このマクロでは、最後のオブジェクト選択状態でマクロを実行すると
> エラーになります。
ごめんなさい。こちらではエラーを再現できません。
> Select Case Odr
> Case Is = Ttl 'A
> Nxt = 1
> Case Else 'B
> Nxt = Odr + 1
> End Select
この部分ですが、
A)選択したオブジェクトの順番が最前面(順位番号がオブジェクト数と
一致)なら、次に選択するのは最背面のオブジェクト。
B)それ以外ならひとつ前面のオブジェクト。
という処理です。
こちらでは、モジュールどおりに、最後のオブジェクトを選択した状態で
実行すると最初のオブジェクトに戻り、何回でも循環できるのですが。
エラーが起きたときに VisualBasicEditor を開いてみてください。
どこでエラーが起きて、どのようなメッセージが出ますか?
#4(misatoanna)さん、ご連絡ありがとうございます。
私のやり方が悪かったのか、今度は何週でも循環でき、当初やりたいとイメージしていた通りの結果になりました。辛抱強くお付き合い頂き感謝します。
No.7
- 回答日時:
>選択したい最後のオブジェクトが1度で選択され、
>何度実行してもそれ以外のオブジェクトがアクティブになりません。
そのまま、Tabキーを操作してみてください。
TabIndex(実際にはありません)が、1の図形から順にTab移動しないでしょうか?
Tab移動の順番は、シートに貼り付けられた順になります。
従って、Cutして、PasteすることでTab移動順が最後に変更なります。
吹き出し以外に図形がある場合、それらの図形の後に、吹き出しのTab順がくることになります。
>それをテキストボックスの最初の2数字(01~)の順にtabを飛ばして>1つずつ書いてあるコメントを確認していく
で、本当にやりたいことはこれですね。
下記に差し替えてください。
If stxt = i Then
MsgBox shp.TextFrame.Characters.Text
' shpleft = shp.Left
' shptop = shp.Top
' shp.Cut
' ActiveSheet.Paste
' Selection.ShapeRange.Left = shpleft
' Selection.ShapeRange.Top = shptop
Exit For
End If
xls88さん、マクロ実行できました。メッセージボックスにコメントを表示できるようにして頂いたんですね。この機能はとても重宝します。辛抱強くお付き合い頂きありがとうございました。
No.6
- 回答日時:
>テキストボックスの最初の2文字が、
>01から始まる2桁の半角数字で、
>この数字が選択したい順番に昇順になっています。
上記内容を手掛かりに対象オブジェクトを操作します。
従って、今度のマクロはオブジェクトを選択しておく必要がありません。
Sub test3()
Dim shp As Shape
Dim shpleft As Double
Dim shptop As Double
Dim stxt As String
Dim i As Long
Application.ScreenUpdating = False
For i = 1 To ActiveSheet.Shapes.Count
For Each shp In ActiveSheet.Shapes
On Error Resume Next
stxt = val(Left(shp.TextFrame.Characters.Text, 2))
On Error GoTo 0
If stxt = i Then
shpleft = shp.Left
shptop = shp.Top
shp.Cut
ActiveSheet.Paste
Selection.ShapeRange.Left = shpleft
Selection.ShapeRange.Top = shptop
Exit For
End If
Next shp
Next i
Application.ScreenUpdating = True
End Sub
xls88さん、度々ありがとうございます。
今回のマクロを実行すると、選択したい最後のオブジェクトが1度で選択され、何度実行してもそれ以外のオブジェクトがアクティブになりません。やりたいことは、1画面に収まりきらない数の吹出しがシートの中に散らばっていて、それをテキストボックスの最初の2数字(01~)の順にtabを飛ばして1つずつ書いてあるコメントを確認していく、ということです。よろしくお願いします。
No.5
- 回答日時:
これも雑ですが、同じシート内で処理するようにしてみました。
Tag移動順に、オブジェクトを選択しておいて、マクロを実行してください。
マクロは大丈夫ですか?
Tag移動順の規則とか何か手掛かりになるものはありますか?
例えば、オブジェクトの左上角がかかっているセル番地に規則性があるとか、もし、あれば教えてください。
Sub test2()
Dim shp As Object
Dim shpleft As Double
Dim shptop As Double
For Each shp In Selection
shpleft = shp.Left
shptop = shp.Top
shp.Cut
ActiveSheet.Paste
Selection.ShapeRange.Left = shpleft
Selection.ShapeRange.Top = shptop
Next
End Sub
この回答への補足
短時間に2度もご回答頂きありがとうございます。vbaはあまり詳しくありませんが、ご指定のvbaを実行してみました。
やり方が的を射ていないのか、オブジェクトを選択したい順にshiftを押しながら選択した後、vbaを実行したところ、選択した5つのオブジェクトの最後のものがアクティブになりました。もう一度実行すると、「オブジェクトは、このプロパティまたはメソッドをサポートしていません」というエラーメッセージが表示されました。
なお、オブジェクトの位置に規則性はなく、強いて言えば、吹出し(オブジェクトは全て吹出し)の中テキストボックスの最初の2文字が、01から始まる2桁の半角数字で、この数字が選択したい順番に昇順になっています。
No.4
- 回答日時:
#2さまのご回答のように、選択順は「上から下。
同じ上位置なら左から右」で、この順番は一般機能では変えられないのではないでしょうか。
次のようなマクロを記述してみました。
1.オブジェクトの順番を入れ換えるマクロ。
[Shift]を併用して選択したい順にオブジェクトを選択して実行します。
オブジェクトの数が多い場合は、数回に分けて操作してもOKです。
Sub SetOrder()
Dim shp
For Each shp In Selection
shp.ShapeRange.ZOrder msoBringToFront
Next
End Sub
2.オブジェクトを順に選択するマクロ
選択されているオブジェクトの、ひとつ前面にあるオブジェクトを選択します。
Sub SelectNext()
Dim Ttl, Odr, Nxt
Ttl = ActiveSheet.Shapes.Count
Odr = Selection.ShapeRange.ZOrderPosition
Select Case Odr
Case Is = Ttl
Nxt = 1
Case Else
Nxt = Odr + 1
End Select
ActiveSheet.Shapes(Nxt).Select
End Sub
3.[Tab]キーにマクロ(SelectNext)を割当てるマクロ
実行後、[Tab]キーを押すたびに上記マクロ(SelectNext)が実行されます。
Sub SetKey()
Application.OnKey "{Tab}", "SelectNext"
End Sub
4.[Tab]キーの機能をデフォルトに戻すマクロ。
Sub ResetKey()
Application.OnKey "{Tab}"
End Sub
新規ツールバーにユーザー設定ボタンを幾つか置いて、必要なマクロを登録して
おくとラクですね。
ご返信ありがとうございました。
マクロ1,2を実行し、選択したい順にオブジェクトを選択することができました。もしお時間があればもう一つ教えていただきたいのですが、このマクロでは、最後のオブジェクト選択状態でマクロを実行するとエラーになります。これを、最初のオブジェクトに戻って何回転でも循環できるようにすることはできるでしょうか。よろしくお願いします。
No.3
- 回答日時:
試しに大雑把ですが、マクロを組んでみました。
Sheet1のオブジェクトをSheet2に選択順にコピーします。
Tab移動順で、オブジェクトを選択しておいて、マクロを実行してください。
Sheet2に貼り付けられたオブジェクトは
Sheet1のオブジェクトを選択した順番でTab移動します。
Sub test1()
Dim shp As Object
Dim saddress As String
Application.ScreenUpdating = False
For Each shp In Selection
Worksheets("Sheet1").Select
saddress = shp.TopLeftCell.Address
shp.Copy
Worksheets("Sheet2").Select
Range(saddress).Select
ActiveSheet.Paste
Next
Application.ScreenUpdating = True
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Illustrator(イラストレーター) Illustrator アンカーポイント選択について 3 2023/01/30 12:31
- その他(パソコン・スマホ・電化製品) エクセル初心者です。 仕事でエクセルを使っていて、普段は素人でもできる簡単な関数を使ったことがある程 1 2022/05/25 11:17
- Excel(エクセル) テキストの背後にあるオブジェクトとは 3 2023/01/03 20:22
- Excel(エクセル) オフィスをLibreOfficeからmicrosoft 2013に変えました。 1 2022/05/09 00:28
- Visual Basic(VBA) Excel VBA 複数選択したリストボックスからテキストボックスに転記したいです。 3 2023/03/19 18:31
- 大学・短大 卒業するのに問題ないか 3 2023/02/13 17:41
- 計算機科学 アルゴリズムについて 1 2023/01/01 19:43
- Visual Basic(VBA) VBAコードを張り付け後のエクセルの進め方 2 2023/02/07 18:24
- Excel(エクセル) エクセルの大きなシートでグラフを見つける 4 2022/07/28 10:07
- Excel(エクセル) エクセルのワークシートを簡単に別ファイルにする方法は? 5 2023/01/11 14:50
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
パワーポイントの画面がずれる
-
Excelで隠れてしまった図...
-
パワーポイントにエクセルの表...
-
Illustrator9.0<前面オブジェ...
-
この雲のような感じはどのよう...
-
Excelにメールを添付する
-
Excelで…
-
Excelの表をPowerPointに貼付る際
-
LightWave3D5.5
-
Adobe IllustratorとCorel DRAW...
-
イラレで同じ位置に移動する方法
-
illustratorCS2でクリッピング...
-
pdf xchange viewer オブジェク...
-
イラストレーターCSでWEB...
-
フォトショップでのイラストレ...
-
ドラマ「フリーター、家を買う...
-
イラストレーターでアピアラン...
-
ワードで数学的な表記をしたい...
-
ipod touch用のソフトを作るに...
-
オブジェクトの複数選択について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
パワーポイントの画面がずれる
-
Excelで隠れてしまった図...
-
パワーポイントにエクセルの表...
-
excelでチェックボックスが表示...
-
ExcelでB5をA4にしたい。
-
Excelにメールを添付する
-
オートシェイプが消えたり出た...
-
pdf xchange viewer オブジェク...
-
テキストボックスがないのに、...
-
オブジェクトがシートからはみ...
-
エクセルに入力しようとすると...
-
イラストレーターの面積を求める
-
【エクセル】列を挿入しようと...
-
エクセルに任意のページのワー...
-
Wordのツールバーに常に数...
-
文字の特定箇所に背景色をつけ...
-
Excelでフィルタをかけると、セ...
-
Adobe IllustratorとCorel DRAW...
-
EXCELのグラフのオブジェクト変...
-
Illustrator CS2 不透明100%な...
おすすめ情報