OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

エクセルのテキストボックスをVBで操作できない

  • すぐに回答を!
  • 質問No.220251
  • 閲覧数2295
  • ありがとう数8
  • 気になる数0
  • 回答数5
  • コメント数0

お礼率 56% (26/46)

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

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

また、rangeオブジェクトか、shapeオブジェクトにsetしようと試みても、「型が一致しません」と言われてしまいます。
解決策があればお願いいたします。
通報する
  • 回答数5
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.5
レベル13

ベストアンサー率 59% (729/1235)

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

よく分からないけど、参考URLを見つけたので真似してみました。
お礼コメント
takaoPR

お礼率 56% (26/46)

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

その他の回答 (全4件)

  • 回答No.1
レベル12

ベストアンサー率 40% (230/562)

>二回目はなぜか~ どこでエラーになっているか特定できますか? マクロ関数の中のいちばん上でF9を押して、ブレークポイントを設定し、どの行でエラーになっているか特定してください。 その関数とエラー行を補足してくださると、原因が分かるかもしれません。 >また、rangeオブジェクト~ これらにはちゃんと型というものがあるので、同じ型の変数しかSetできません。 何をセットしようと ...続きを読む
>二回目はなぜか~
どこでエラーになっているか特定できますか?
マクロ関数の中のいちばん上でF9を押して、ブレークポイントを設定し、どの行でエラーになっているか特定してください。
その関数とエラー行を補足してくださると、原因が分かるかもしれません。

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

お礼率 56% (26/46)

ご返答ありがとうございます。
エラーがでている行は、マクロの二行目の、
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:38
  • 回答No.2
レベル12

ベストアンサー率 40% (230/562)

1行目はテキストボックスを選択する文であり、2行目の文と関係ないかと思われます。 それよりもSelectionというオブジェクト変数がどこで宣言されどこでSetされているか確認できませんか? または、g_sheetwk.Shapes.range.characters.textとか記述できませんか? Excel VBAは専門外のことなので、専門であるVBの知識の範囲でしか答えられていないのですが、 ...続きを読む
1行目はテキストボックスを選択する文であり、2行目の文と関係ないかと思われます。
それよりもSelectionというオブジェクト変数がどこで宣言されどこでSetされているか確認できませんか?
または、g_sheetwk.Shapes.range.characters.textとか記述できませんか?

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

お礼率 56% (26/46)

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

お礼率 56% (26/46)

無事解決しました。
原因は、excel.Applicationの多重起動にあった
ようです。
私自身が未熟者のため、ご迷惑をお掛けしてしまい
大変申し訳ございません。
しかし、色々と参考や勉強にはなりました。
ありがとうございました。
投稿日時 - 2002-02-19 15:45:54
  • 回答No.3
レベル5

ベストアンサー率 0% (0/2)

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

お礼率 56% (26/46)

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

お礼率 56% (26/46)

無事解決しました。
原因は、excel.Applicationの多重起動だったようです。2回目に二重起動している時があり、それが原因
でした。
ご迷惑をお掛けして本当に申し訳ありません。
貴重なアドバイス、ありがとうございました。
投稿日時 - 2002-02-19 15:48:14
  • 回答No.4
レベル13

ベストアンサー率 59% (729/1235)

こちらでは次のマクロは正常に動きます。 Sub Macro1() ActiveSheet.Shapes("Text Box 1").Select Selection.Characters.Text = "a" End Sub >二回目はなぜか「オブジェクト変数 または WITHブロック変数が設定されていま >せん」というエラーが出 ...続きを読む
こちらでは次のマクロは正常に動きます。

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

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

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

お礼率 56% (26/46)

アドバイスありがとうございます。
確認してみましたが、g_sheetwkは生きているようです。
試しに、
g_sheetwk.Cells(3, 3) = "test"
と記述してみましたが、正常に動作しています。(何回でもOK)
個人的にはselectionが怪しいと思っているのですが・・・。
投稿日時 - 2002-02-19 14:52:19
このQ&Aのテーマ
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ