解決済みの質問
こんにちわ。
VBからエクセルを開いて、帳票を出力したいのですが、
エクセルはフォーマットシートを用意して、そのシートをコピーして書き込むようにしています。
セル単位での書き込みでは問題ないのですが、図形描画のツールボックスにある、「テキストボックス」への書き込みの仕方がどうしてもわかりません。
エクセルのマクロ記録を使って、調べたのところその場合一回目はきちんと書き込んでくれますが、二回目はなぜか「オブジェクト変数 または WITHブロック変数が設定されていません」というエラーが出ます。
なにか開放しなければならないのでしょうか?
一応、実行したマクロを載せておきます。
g_sheetwk.Shapes("text1").select
Selection.Characters.Text = "aaaaaa"
また、rangeオブジェクトか、shapeオブジェクトにsetしようと試みても、「型が一致しません」と言われてしまいます。
解決策があればお願いいたします。
投稿日時 - 2002-02-18 16:49:14
Sub Macro1()
ActiveSheet.Shapes("Text Box 1").TextFrame.Characters.Text = "a"
End Sub
よく分からないけど、参考URLを見つけたので真似してみました。
参考URL:http://www.microsoft.com/japan/support/kb/articles/J027/0/77.asp
投稿日時 - 2002-02-19 15:33:11
お礼
色々と本当にありがとうございます。
一応、全く違う形ですが解決しました。
excel.Applicationの多重起動という大変お粗末な原因
で、自分の無知さを思い知りました。
申し訳ございません。
ですがその後、todo36様のアドバイスを見て、記述して
みると、正常に動作をしてくれました。
オブジェクトを直接操作しているので、こちらを使っていきたいと思います。
大変ありがとうございました。
投稿日時 - 2002-02-19 15:59:49
4人が「このQ&Aが役に立った」と投票しています
ベストアンサー以外の回答(4件中 1~4件目)
こちらでは次のマクロは正常に動きます。
Sub Macro1()
ActiveSheet.Shapes("Text Box 1").Select
Selection.Characters.Text = "a"
End Sub
>二回目はなぜか「オブジェクト変数 または WITHブロック変数が設定されていま
>せん」というエラーが出ます。
メッセージ通りに解釈すると
オブジェクト変数g_sheetwkが正しくセットされていないのでは?
投稿日時 - 2002-02-19 13:21:54
補足
アドバイスありがとうございます。
確認してみましたが、g_sheetwkは生きているようです。
試しに、
g_sheetwk.Cells(3, 3) = "test"
と記述してみましたが、正常に動作しています。(何回でもOK)
個人的にはselectionが怪しいと思っているのですが・・・。
投稿日時 - 2002-02-19 14:52:19
やっぱりhaporunの考えのように
g_sheetwk.Shapes("text1").Characters.Text = "aaaaa"
で良いと思いますよ。
選択したオブジェクトに対して処理するのでは無く
この場合はTextBoxオブジェクトに対して直接処理を行うのが妥当だと思います。
ちなみに私はSelectオブジェクトは画面遷移処理以外では絶対に使用しないようにしています。
やっぱり操作したいオブジェクトに対して直接、処理するほうがイイと思いますし…
投稿日時 - 2002-02-19 09:24:16
補足
アドバイスありがとうございます。
早速、試してみたのですがshapesには、Charactersメソッドはないようです。
私も、出来るだけselectは使いたくないので直接操作したいのですが・・・。
textboxオブジェクトに対してのアクセスの仕方が、調べても私の範囲ではわかりませんでした。
わざわざアドバイスありがとうございました。
投稿日時 - 2002-02-19 12:05:11
お礼
無事解決しました。
原因は、excel.Applicationの多重起動だったようです。2回目に二重起動している時があり、それが原因
でした。
ご迷惑をお掛けして本当に申し訳ありません。
貴重なアドバイス、ありがとうございました。
投稿日時 - 2002-02-19 15:48:14
1行目はテキストボックスを選択する文であり、2行目の文と関係ないかと思われます。
それよりもSelectionというオブジェクト変数がどこで宣言されどこでSetされているか確認できませんか?
または、g_sheetwk.Shapes.range.characters.textとか記述できませんか?
Excel VBAは専門外のことなので、専門であるVBの知識の範囲でしか答えられていないのですが、できる限りのことはサポートしたいと思います(それよりは専門の方が教えてくださるといいのですが、なかなか現れませんねぇ)。
投稿日時 - 2002-02-18 23:26:06
補足
お手数をおかけして申し訳ありません。
アドバイス通り、いろいろ試してみましたがそれらしきメソッドやプロパティが見つかりませんでした。
selectionオブジェクトは、現在選択されているオブジェクト、としか説明が無く特にSETはしていないようです。
こうやって色々アドバイスを頂けるのはありがたい限りです。
大変感謝しております。
投稿日時 - 2002-02-19 12:09:20
お礼
無事解決しました。
原因は、excel.Applicationの多重起動にあった
ようです。
私自身が未熟者のため、ご迷惑をお掛けしてしまい
大変申し訳ございません。
しかし、色々と参考や勉強にはなりました。
ありがとうございました。
投稿日時 - 2002-02-19 15:45:54
>二回目はなぜか~
どこでエラーになっているか特定できますか?
マクロ関数の中のいちばん上でF9を押して、ブレークポイントを設定し、どの行でエラーになっているか特定してください。
その関数とエラー行を補足してくださると、原因が分かるかもしれません。
>また、rangeオブジェクト~
これらにはちゃんと型というものがあるので、同じ型の変数しかSetできません。
何をセットしようとしたんですか?
投稿日時 - 2002-02-18 18:41:52
補足
ご返答ありがとうございます。
エラーがでている行は、マクロの二行目の、
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
OKWaveのオススメ
おすすめリンク