こんにちわ。
VBからエクセルを開いて、帳票を出力したいのですが、
エクセルはフォーマットシートを用意して、そのシートをコピーして書き込むようにしています。
セル単位での書き込みでは問題ないのですが、図形描画のツールボックスにある、「テキストボックス」への書き込みの仕方がどうしてもわかりません。
エクセルのマクロ記録を使って、調べたのところその場合一回目はきちんと書き込んでくれますが、二回目はなぜか「オブジェクト変数 または WITHブロック変数が設定されていません」というエラーが出ます。
なにか開放しなければならないのでしょうか?

一応、実行したマクロを載せておきます。
g_sheetwk.Shapes("text1").select
Selection.Characters.Text = "aaaaaa"

また、rangeオブジェクトか、shapeオブジェクトにsetしようと試みても、「型が一致しません」と言われてしまいます。
解決策があればお願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (5件)

Sub Macro1()


ActiveSheet.Shapes("Text Box 1").TextFrame.Characters.Text = "a"
End Sub

よく分からないけど、参考URLを見つけたので真似してみました。

参考URL:http://www.microsoft.com/japan/support/kb/articl …
    • good
    • 0
この回答へのお礼

色々と本当にありがとうございます。
一応、全く違う形ですが解決しました。
excel.Applicationの多重起動という大変お粗末な原因
で、自分の無知さを思い知りました。
申し訳ございません。
ですがその後、todo36様のアドバイスを見て、記述して
みると、正常に動作をしてくれました。
オブジェクトを直接操作しているので、こちらを使っていきたいと思います。
大変ありがとうございました。

お礼日時:2002/02/19 15:59

こちらでは次のマクロは正常に動きます。



Sub Macro1()
ActiveSheet.Shapes("Text Box 1").Select
Selection.Characters.Text = "a"
End Sub

>二回目はなぜか「オブジェクト変数 または WITHブロック変数が設定されていま
>せん」というエラーが出ます。

メッセージ通りに解釈すると
オブジェクト変数g_sheetwkが正しくセットされていないのでは?

この回答への補足

アドバイスありがとうございます。
確認してみましたが、g_sheetwkは生きているようです。
試しに、
g_sheetwk.Cells(3, 3) = "test"
と記述してみましたが、正常に動作しています。(何回でもOK)
個人的にはselectionが怪しいと思っているのですが・・・。

補足日時:2002/02/19 14:52
    • good
    • 0

やっぱりhaporunの考えのように


g_sheetwk.Shapes("text1").Characters.Text = "aaaaa"
で良いと思いますよ。
選択したオブジェクトに対して処理するのでは無く
この場合はTextBoxオブジェクトに対して直接処理を行うのが妥当だと思います。
ちなみに私はSelectオブジェクトは画面遷移処理以外では絶対に使用しないようにしています。
やっぱり操作したいオブジェクトに対して直接、処理するほうがイイと思いますし…

この回答への補足

アドバイスありがとうございます。
早速、試してみたのですがshapesには、Charactersメソッドはないようです。
私も、出来るだけselectは使いたくないので直接操作したいのですが・・・。
textboxオブジェクトに対してのアクセスの仕方が、調べても私の範囲ではわかりませんでした。
わざわざアドバイスありがとうございました。

補足日時:2002/02/19 12:05
    • good
    • 0
この回答へのお礼

無事解決しました。
原因は、excel.Applicationの多重起動だったようです。2回目に二重起動している時があり、それが原因
でした。
ご迷惑をお掛けして本当に申し訳ありません。
貴重なアドバイス、ありがとうございました。

お礼日時:2002/02/19 15:48

1行目はテキストボックスを選択する文であり、2行目の文と関係ないかと思われます。


それよりもSelectionというオブジェクト変数がどこで宣言されどこでSetされているか確認できませんか?
または、g_sheetwk.Shapes.range.characters.textとか記述できませんか?

Excel VBAは専門外のことなので、専門であるVBの知識の範囲でしか答えられていないのですが、できる限りのことはサポートしたいと思います(それよりは専門の方が教えてくださるといいのですが、なかなか現れませんねぇ)。

この回答への補足

お手数をおかけして申し訳ありません。
アドバイス通り、いろいろ試してみましたがそれらしきメソッドやプロパティが見つかりませんでした。
selectionオブジェクトは、現在選択されているオブジェクト、としか説明が無く特にSETはしていないようです。
こうやって色々アドバイスを頂けるのはありがたい限りです。
大変感謝しております。

補足日時:2002/02/19 12:09
    • good
    • 0
この回答へのお礼

無事解決しました。
原因は、excel.Applicationの多重起動にあった
ようです。
私自身が未熟者のため、ご迷惑をお掛けしてしまい
大変申し訳ございません。
しかし、色々と参考や勉強にはなりました。
ありがとうございました。

お礼日時:2002/02/19 15:45

>二回目はなぜか~


どこでエラーになっているか特定できますか?
マクロ関数の中のいちばん上でF9を押して、ブレークポイントを設定し、どの行でエラーになっているか特定してください。
その関数とエラー行を補足してくださると、原因が分かるかもしれません。

>また、rangeオブジェクト~
これらにはちゃんと型というものがあるので、同じ型の変数しかSetできません。
何をセットしようとしたんですか?

この回答への補足

ご返答ありがとうございます。
エラーがでている行は、マクロの二行目の、
Selection.Characters.Text = "aaaaaa"
の部分です。

書き忘れましたが、マクロ一行目
g_sheetwk.Shapes("text1").Select
のあとに、
call msgbox(typename(selection))
で型を見てみたところ、「range」と表示されたので
rangeならばSET可能かと思いました。

selectionを使用すると、以前にも同じような現象でエラーが出て困った事があり、その時は一旦rangeにセットしそこから処理を行い、最後にrangeを開放すれば回避ができました。
今回も同じような方法で回避できないかと思ったのですが、どの型にSETしたらいいのかがわかりません。

一回selectで指定したものを開放できる方法とかがあるのでしょうか?
ヘルプを見回してもよく分かりませんでした・・・。

補足日時:2002/02/18 20:01
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QWordのテキストボックスの行間をつめたいのです

Wordのテキストボックスの行間をつめたいのです。

他者からもらった印刷物がありますが、
文字の高さが3.3mmで行間が3.6mm程度です。
Wordでやろうとしていますがなかなかできません。
テキストボックスの中に文字を入れればテキストボックスの上との行間が縮まりますが
テクストボックス内の行間が縮まりません。
どうしたらできますか?

Aベストアンサー

こんばんは!
↓の画像でテキストボックス内の行間を12ptでやってみました。
当方使用のWord2003の場合です。

左側のテキストボックスはデフォルト(ページ設定)の1行の行間そのままです。

(1)テキストボックス内の文字を範囲指定 → メニュー → 書式 → 段落
(2)「インデントと行間隔」タブ → 間隔の「行間」の下向き▼を選択 → 「固定値」を選択(自動で12ptになると思います)
このポイント数で好みの行間に設定できます。

※ 行間とは文字の上端~次の行の文字の上端までですので、行ピッチと言った方が判りやすいかもしれません。

すなわち、フォントサイズよりも小さいpt数を設定してしまうと文字が重なってしまいます。

以上、参考になれば良いのですが
的外れならごめんなさいね。m(_ _)m

Q複数該当の検索処理でエラーになる(オブジェクト変数または With ブロック変数が設定されていません)

ある複数のチーム単位の名簿をに毎月作成してします。チーム異動のあった人は旧チームファイルを探してあるデータを抽出したいです。
以下のようなコードで異動者がわかるコメントを検索し該当者のある限り処理を続けたいのですが、該当データが複数ある場合、1つ目だけ該当して、2件目以降を検索する結果セルには該当があってもなくてもNothingが返ってきてしまいます。

Workbooks.Open Filename:="000" & intNendo & strHanki,UpdateLinks:=0
Range("A1").Select
With Range("A1:A37")
Set 結果セル = .Find("異動者", LookIn:=xlValues, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
If Not 結果セル Is Nothing Then
最初アドレス = 結果セル.Address
Do
strIdousyaName = Cells(結果セル.Row, 5).Value
For intteamName2 = 2 To LastTeam
Windows(strBookname).Activate
Sheets("名簿").Select
TeamName2 = Cells(intteamName2, 2).Value
'異動先チーム名簿は飛ばす
If TeamName2 <> TeamName1 Then
Workbooks.Open Filename:=mypath & "チーム名簿\" & TeamName2 & "000" & intNendo & strHanki, UpdateLinks:=0
With Worksheets(1).Range("A6:A37")
Set Status = .Find(What:=strIdousyaName, LookIn:=xlValues, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
'異動者の名前があればoooをセットする
If Not Status Is Nothing Then
strStatusRow = Range(Status.Address).Row
Dataooo1 = Cells(strStatusRow, 26).Value
strFileCloseFLG = "1"
Else
With Worksheets(1).Range("E6:E37")
Set Status = .Find(What:=strIdousyaName, LookIn:=xlValues, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False)
'異動者の名前がある&Dataがゼロの時 oooをセットする
If Not Status Is Nothing Then
If Cells(strStatusRow, 35).Value = 0 Then
strStatusRow = Range(Status.Address).Row
Dataooo1 = Cells(strStatusRow, 26).Value
strFileCloseFLG = "1"
End If
End If
End With
End If
End With
'該当があったら ループから抜ける
If strFileCloseFLG = "1" Then
ActiveWindow.Close
Windows(TeamName1 & "000" & intNendo & strHanki & ".xls").Activate
Cells(結果セル.Row, 44) = Dataooo1
Exit For
End If
Else
End If
Next intteamName2
Set 結果セル = .FindNext(結果セル)   ←(1)次の検索該当セルが存在しても結果セルにNothingが返ってきてしまいます
Loop While Not 結果セル Is Nothing And 結果セル.Address <> 最初アドレス   ←(2)ここでエラーがでます
End If
End With

(1)次の該当があってもなくても結果セルはnothingです。以前テストしていたときは、該当セルがある場合のみ正常に値が返ってきていたのですが。。(特にコードをかえた記憶もありません)
(2)では「オブジェクト変数または With ブロック変数が設定されていません(Error 91)」とでます。
<質問>
・次の検索がうまくヒットするにはどうすればよいでしょうか?
・もし(1)で該当セルがある場合のみ値がかえるようになれば
 (2)を『Loop While Not 結果セル Is Nothing』にしかえてエラーを回避しても問題ないでしょうか?

見よう見真似のコーディングで
とてもみにくいかと思いますが、期限が迫っていてとても困っています。どうかよろしくお願いします。

ある複数のチーム単位の名簿をに毎月作成してします。チーム異動のあった人は旧チームファイルを探してあるデータを抽出したいです。
以下のようなコードで異動者がわかるコメントを検索し該当者のある限り処理を続けたいのですが、該当データが複数ある場合、1つ目だけ該当して、2件目以降を検索する結果セルには該当があってもなくてもNothingが返ってきてしまいます。

Workbooks.Open Filename:="000" & intNendo & strHanki,UpdateLinks:=0
Range("A1").Select
With Range("A1:A37")
...続きを読む

Aベストアンサー

はずしてるかもしれませんが・・・

最初の
Set 結果セル = .Find("異動者", LookIn:=xlValues, LookAt :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
以後に、別の.Findしてるので、最後の
Set 結果セル = .FindNext(結果セル) ←(1)次の検索該当セルが存在しても結果セルにNothingが返ってきてしまいます
の検索条件が変わってしまっているのだと思います。
という訳で、最初に範囲を取得してしまうか、.Find以外の方法でチェックするといいと思います。
一番簡単な回避方法は(あまりお勧めではありませんが)、
Set 結果セル = .FindNext(結果セル)
の前に、最初の検索と同じ条件のダミーの検索を入れる方法です。
Set dmy = .Find("異動者", LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
を入れると、たぶん回避できると思います。

p.s.
このプログラムが最初の"異動者"を探したシートのモジュール部にあるならいいのですが、標準モジュールにある場合は・・・
ダミーの検索の前にActiveSheetを設定する必要があるかもしれません

はずしてるかもしれませんが・・・

最初の
Set 結果セル = .Find("異動者", LookIn:=xlValues, LookAt :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
以後に、別の.Findしてるので、最後の
Set 結果セル = .FindNext(結果セル) ←(1)次の検索該当セルが存在しても結果セルにNothingが返ってきてしまいます
の検索条件が変わってしまっているのだと思います。
という訳で、最初に範囲を取得してしまうか、.Find以外の方法でチェックするといいと思います。
一番簡...続きを読む

Qエクセル2002/テキストボックス内の文章の行間?

エクセル2002です。
テキストボックス内に書いた文章の行間を任意に変えることが可能ですか?

普通に書くとくっつきつぎで、一行あけると開きすぎなので、一行の半分くらいの行間にしたいのです。
テキストボックスの書式設定は見てみましたが、方法を見つけられませんでした。

Aベストアンサー

あまり良い方法と言えないかもしれませんが。

テキストボックス内に文字を入力します。
そしてテキストボックスの書式設定を出して、配置のタブを開きます。
文字の配置の縦位置を「均等割付」に設定します。
これでテキストボックスの縦の高さに合わせて、行間が広がります。
ちょうど良い行間にテキストボックスの高さを調節します。

Q「オブジェクト変数または With ブロック変数が設定されていません。」の修正方法が分かりません

 いつも勉強させていただいております.どうぞよろしくお願いいたします.
 とんちんかんな質問でしたらもうしわけございません.

 多分オブジェクト定義あたりの問題だと思うのですが,
.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.php?topic=29246&forum=7

 objSelection As Objectで宣言しているからOK.というわけでは
ないのでしょうか??
 とんちんかんな質問かもしれませんが,なんでもアドバイスいただけれると
うれしいです.どうぞよろしくお願いいたします.

 いつも勉強させていただいております.どうぞよろしくお願いいたします.
 とんちんかんな質問でしたらもうしわけございません.

 多分オブジェクト定義あたりの問題だと思うのですが,
.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()
...続きを読む

Aベストアンサー

#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を見ただけの推測回答ですが、ご参考になれば。

#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...続きを読む

Qパワポのテキストボックスの行間のデフォルト値の設定

パワポ2000を使っています。
テキストボックスを作ると必ず行間が9.99行となっているので、毎回1行に変更しています。作った時点に1行になるように、変更する方法がわかりません。
つまり、パワポのテキストボックスの行間のデフォルトを、現在の9.99行から1行に変更したらよいのですが、変更する方法がわかりません。

Aベストアンサー

行間を1行にしたテキストボックスを選択し、右クリックで「オートシェープの規定値」選択すると次からのテキストボックスは開業行になりませんか?

QFOR文でtext1,text2,text3...などとどうやって処理させればいいのですか

超初心者な質問ですみません。
たとえばFOR文を使ってtext1~10まで連続に処理させるには
どういったコードを記述すればよいのでしょうか?
初心者用の本やHPを探しても見当たりませんでした。
お願いします。

Aベストアンサー

textエリアをインデックス配列にすればいいです。
Text1のエリアをファーム上でコピーし、貼り付けると
Text1(0)~ Text1(9) の配列になります。
それを
 
(例)

i =0
for i=0 to 9
text1(i) = x
next

のようにすればいいです。

Qテキストボックス内の行間の変え方

Microsoft Wordでテキストボックス内の行間を変えるにはどうしたらよいですか。
文字サイズを大きくすると、伴って行間も広くなってしまうのですが、行間だけを指定することができるでしょうか。教えて下さい。

Aベストアンサー

テキストボックス内のテキストを選択して右クリック
「段落」を選択してください。
行間の変更ができます。

Qオブジェクト変数またはWithブロック変数が設定されていません

はじめまして質問させていただきます。

Webページからコピー&ペーストしたものを必要な情報だけ
抜き出すものを作成中です。
1ページ目は成功していますが
2ページ目の objIE.Navigate url の行で
実行時エラー'91' オブジェクト変数またはwithブロック変数が設定されていません。とでてしまします。
解決策をご教授お願いします。
Dim objIE As Object
Dim url As String
Dim tai As String
Dim aku As String
Dim uot As String
Dim i As Integer
Set objIE = CreateObject("InternetExplorer.application")
objIE.Visible = True
x = 1
For i = 1 To 20
url = Worksheets("データ").Range("E" & i)
objIE.Navigate url
Do
If objIE.Busy = False And objIE.readyState = 4 Then Exit Do
Loop
objIE.ExecWB 17, 0
objIE.ExecWB 12, 0
Sheets.Add
ActiveSheet.Name = "1"
Range("A1").Select
ActiveSheet.PasteSpecial Format:="テキスト"
objIE.Quit: Set objIE = Nothing
tai = Worksheets("1").Range("A13")
aku = Worksheets("1").Range("A63")
uot = Worksheets("1").Range("A64")
Worksheets("データ").Select
Range("A" & i) = tai
Range("B" & i) = aku
Range("C" & i) = uot
Application.DisplayAlerts = False
Worksheets("1").Delete
Application.DisplayAlerts = True
Next i

はじめまして質問させていただきます。

Webページからコピー&ペーストしたものを必要な情報だけ
抜き出すものを作成中です。
1ページ目は成功していますが
2ページ目の objIE.Navigate url の行で
実行時エラー'91' オブジェクト変数またはwithブロック変数が設定されていません。とでてしまします。
解決策をご教授お願いします。
Dim objIE As Object
Dim url As String
Dim tai As String
Dim aku As String
Dim uot As String
Dim i As Integer
Set objIE = C...続きを読む

Aベストアンサー

> Set objIE = Nothing

これが何を意味するかが解れば解決かも。

QPPTのVBA 全てのテキストボックスの行間を最小

【PPTのVBA 全てのテキストボックスの行間を最小に】

 今晩は、質問させていただきます。どうぞよろしくお願いいたします。
PPT2007でございます。

 手元に大量にあるPPTファイル群のテキストボックスの行間が全て広いため、
全て一括で小さくしてしまいたい次第でございます。
もしこれを手作業でやりますと、テキストボックスをアクティブにする→右クリック
→「段落」→「段落前」を0に。
となり時間がかかりますため、VBAでどうにかしたい次第でございます。

 しかしネットで検索しても出てこず、
また上記操作を自動記録しようといたしましても記入されません。
(PPT2007には自動記録が無いため、excel、wordでトライいたしましたが、無理でございました。。。)

一個のテキストボックスの操作方法さえ分かれば後は、
For each スライド
  For each テキストボックス
  :
  :
  Next
Next
みたいな感じで出来ると思うのでございますが。。

 もしお詳しい方がいらっしゃいましたら,お教えいただけないでしょうか。
どうぞよろしくお願いいたします。

【PPTのVBA 全てのテキストボックスの行間を最小に】

 今晩は、質問させていただきます。どうぞよろしくお願いいたします。
PPT2007でございます。

 手元に大量にあるPPTファイル群のテキストボックスの行間が全て広いため、
全て一括で小さくしてしまいたい次第でございます。
もしこれを手作業でやりますと、テキストボックスをアクティブにする→右クリック
→「段落」→「段落前」を0に。
となり時間がかかりますため、VBAでどうにかしたい次第でございます。

 しかしネットで検索しても出てこず、
また...続きを読む

Aベストアンサー

MKT_さん
こんにちは。

下記のコードでできると思います。
※PPT2003での対応ですが…

Sub 行間変更()
 Dim I  As Long
 Dim J  As Long
 For I = 1 To ActivePresentation.Slides.Count
  With ActivePresentation.Slides(I)
   For J = 1 To .Shapes.Count
    If .Shapes(J).HasTextFrame = msoTrue Then
     .Shapes(J).TextFrame.TextRange.ParagraphFormat.SpaceBefore = 0
    End If
   Next J
  End With
 Next I
End Sub

QExcelのグラフをshapeオブジェクトと指定すること

こんばんは,助けてください。

Excelで大量にグラフを作成しています。
この時,グラフはグラフシートではなく,ワークシート上にオブジェクトとして貼り付けています。

このようにすると,Shapes(index)のようにして,indexのところにグラフの名前を入れて,Shapeオブジェクトを取得すると,グラフの位置や拡大縮小ができるようになりますよね。

これは,便利と思って,大量のグラフを整形して整列させようと思っています。グラフを作った順番がめちゃくちゃだったり,その他いろいろな事情で,インデックス番号を指定するのではなくて,名前を指定してやりたいと思います。

そこで,
Activechart.Name = "問1-(1)"
の様に指定してみたのですが,

Activesheets.shapes("問1-(1)").・・・
のように指定して,縮小や移動をしようとしても,うまくいきませんでした。

このような場合に,グラフに名前を付けるにはどうしたらよいのでしょうか。教えてください。

また,ついでで申し訳ないのですが,グラフを移動させる位置を,相対的に指定するのではなくて,絶対的な位置に指定する方法はないものでしょうか?こちらも,もしよかったら教えてください。

ちなみに,Excelは2003です。よろしくお願いします。

こんばんは,助けてください。

Excelで大量にグラフを作成しています。
この時,グラフはグラフシートではなく,ワークシート上にオブジェクトとして貼り付けています。

このようにすると,Shapes(index)のようにして,indexのところにグラフの名前を入れて,Shapeオブジェクトを取得すると,グラフの位置や拡大縮小ができるようになりますよね。

これは,便利と思って,大量のグラフを整形して整列させようと思っています。グラフを作った順番がめちゃくちゃだったり,その他いろいろな事情で,インデ...続きを読む

Aベストアンサー

面白そうなのでちょっと試してみました結果、
名前の付け方に問題があるみたいで、
ハイフン、カッコを外し、"問1の1" とかにすると
上手くいくみたいです。

'試しに簡単なグラフを3つ作り下記のコードを実行してみてください。


Sub Test()
Dim Gf As Shape
Dim N As Integer
For Each Gf In ActiveSheet.Shapes
N = N + 1
Gf.Name = "問1の" & N
Next Gf
End Sub



グラフの移動等の位置大きさ等に関することですが
セルのTop,Leftを利用したらどうでしょうか。

グラフ(問1の3)を B5の左上隅へ移動する場合

Sub Test5()
Dim N As Integer
N = 3
With ActiveSheet.Shapes("問1の" & N)
.Top = Range("B5").Top
.Left = Range("B5").Left
End With
End Sub


セルのTop , Leftを利用した方が移動も
大きさの設定(セルの20個分の大きさにするとか)も
簡単ですし汎用性があると思います。
以上です。
 

面白そうなのでちょっと試してみました結果、
名前の付け方に問題があるみたいで、
ハイフン、カッコを外し、"問1の1" とかにすると
上手くいくみたいです。

'試しに簡単なグラフを3つ作り下記のコードを実行してみてください。


Sub Test()
Dim Gf As Shape
Dim N As Integer
For Each Gf In ActiveSheet.Shapes
N = N + 1
Gf.Name = "問1の" & N
Next Gf
End Sub



グラフの移動等の位置大きさ等に関することですが
セルのTop,Leftを利用したらどう...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報