
こんにちわ。
VBからエクセルを開いて、帳票を出力したいのですが、
エクセルはフォーマットシートを用意して、そのシートをコピーして書き込むようにしています。
セル単位での書き込みでは問題ないのですが、図形描画のツールボックスにある、「テキストボックス」への書き込みの仕方がどうしてもわかりません。
エクセルのマクロ記録を使って、調べたのところその場合一回目はきちんと書き込んでくれますが、二回目はなぜか「オブジェクト変数 または WITHブロック変数が設定されていません」というエラーが出ます。
なにか開放しなければならないのでしょうか?
一応、実行したマクロを載せておきます。
g_sheetwk.Shapes("text1").select
Selection.Characters.Text = "aaaaaa"
また、rangeオブジェクトか、shapeオブジェクトにsetしようと試みても、「型が一致しません」と言われてしまいます。
解決策があればお願いいたします。
No.5ベストアンサー
- 回答日時:
Sub Macro1()
ActiveSheet.Shapes("Text Box 1").TextFrame.Characters.Text = "a"
End Sub
よく分からないけど、参考URLを見つけたので真似してみました。
参考URL:http://www.microsoft.com/japan/support/kb/articl …
色々と本当にありがとうございます。
一応、全く違う形ですが解決しました。
excel.Applicationの多重起動という大変お粗末な原因
で、自分の無知さを思い知りました。
申し訳ございません。
ですがその後、todo36様のアドバイスを見て、記述して
みると、正常に動作をしてくれました。
オブジェクトを直接操作しているので、こちらを使っていきたいと思います。
大変ありがとうございました。
No.4
- 回答日時:
こちらでは次のマクロは正常に動きます。
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が怪しいと思っているのですが・・・。
No.3
- 回答日時:
やっぱりhaporunの考えのように
g_sheetwk.Shapes("text1").Characters.Text = "aaaaa"
で良いと思いますよ。
選択したオブジェクトに対して処理するのでは無く
この場合はTextBoxオブジェクトに対して直接処理を行うのが妥当だと思います。
ちなみに私はSelectオブジェクトは画面遷移処理以外では絶対に使用しないようにしています。
やっぱり操作したいオブジェクトに対して直接、処理するほうがイイと思いますし…
この回答への補足
アドバイスありがとうございます。
早速、試してみたのですがshapesには、Charactersメソッドはないようです。
私も、出来るだけselectは使いたくないので直接操作したいのですが・・・。
textboxオブジェクトに対してのアクセスの仕方が、調べても私の範囲ではわかりませんでした。
わざわざアドバイスありがとうございました。
無事解決しました。
原因は、excel.Applicationの多重起動だったようです。2回目に二重起動している時があり、それが原因
でした。
ご迷惑をお掛けして本当に申し訳ありません。
貴重なアドバイス、ありがとうございました。
No.2
- 回答日時:
1行目はテキストボックスを選択する文であり、2行目の文と関係ないかと思われます。
それよりもSelectionというオブジェクト変数がどこで宣言されどこでSetされているか確認できませんか?
または、g_sheetwk.Shapes.range.characters.textとか記述できませんか?
Excel VBAは専門外のことなので、専門であるVBの知識の範囲でしか答えられていないのですが、できる限りのことはサポートしたいと思います(それよりは専門の方が教えてくださるといいのですが、なかなか現れませんねぇ)。
この回答への補足
お手数をおかけして申し訳ありません。
アドバイス通り、いろいろ試してみましたがそれらしきメソッドやプロパティが見つかりませんでした。
selectionオブジェクトは、現在選択されているオブジェクト、としか説明が無く特にSETはしていないようです。
こうやって色々アドバイスを頂けるのはありがたい限りです。
大変感謝しております。
無事解決しました。
原因は、excel.Applicationの多重起動にあった
ようです。
私自身が未熟者のため、ご迷惑をお掛けしてしまい
大変申し訳ございません。
しかし、色々と参考や勉強にはなりました。
ありがとうございました。
No.1
- 回答日時:
>二回目はなぜか~
どこでエラーになっているか特定できますか?
マクロ関数の中のいちばん上でF9を押して、ブレークポイントを設定し、どの行でエラーになっているか特定してください。
その関数とエラー行を補足してくださると、原因が分かるかもしれません。
>また、rangeオブジェクト~
これらにはちゃんと型というものがあるので、同じ型の変数しかSetできません。
何をセットしようとしたんですか?
この回答への補足
ご返答ありがとうございます。
エラーがでている行は、マクロの二行目の、
Selection.Characters.Text = "aaaaaa"
の部分です。
書き忘れましたが、マクロ一行目
g_sheetwk.Shapes("text1").Select
のあとに、
call msgbox(typename(selection))
で型を見てみたところ、「range」と表示されたので
rangeならばSET可能かと思いました。
selectionを使用すると、以前にも同じような現象でエラーが出て困った事があり、その時は一旦rangeにセットしそこから処理を行い、最後にrangeを開放すれば回避ができました。
今回も同じような方法で回避できないかと思ったのですが、どの型にSETしたらいいのかがわかりません。
一回selectで指定したものを開放できる方法とかがあるのでしょうか?
ヘルプを見回してもよく分かりませんでした・・・。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルのVBAの標準モジュール...
-
エクセルVBAでcode128のバー...
-
worksheetFunctionクラスのVloo...
-
Excelでフィルタをかけると警告...
-
sheetsメソッドの失敗
-
VBAについてです。 初心者です...
-
「Columns("A:C")」の列文字を...
-
テキストボックスが読み取り専...
-
VBAで作成するメール(開封確認...
-
ある文字列が全て数字であるか...
-
VBAからPDFファイルにパスワー...
-
データバインドされたDatagridv...
-
VBAで既に開いている別アプリケ...
-
Excel VBAでIEにアクセスするプ...
-
「オブジェクト変数または With...
-
ACCESS activeXコンポーネント...
-
PowerShellで、連想配列の値の...
-
VBからExcelのセルの書式設定を...
-
USBのグループ ポリシー オブジ...
-
PowerPointVBAでスライドマスタ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
worksheetFunctionクラスのVloo...
-
「Columns("A:C")」の列文字を...
-
PowerPointVBAでスライドマスタ...
-
エクセルのVBAの標準モジュール...
-
Excelでフィルタをかけると警告...
-
実行時エラー 3265「要求された...
-
テキストボックス中の文字列の...
-
VBAからPDFファイルにパスワー...
-
VBAで既に開いている別アプリケ...
-
Excel VBAでIEにアクセスするプ...
-
オブジェクトが見つかりません
-
ExcelVBAでのNZ関数について
-
エクセルVBAでcode128のバー...
-
WordにOLEで埋め込んだExcelでW...
-
AccessVBAで「dim dbs as datab...
-
エクセルマクロエラー「'Cells'...
-
エクセル エラー438
-
[VBA]CDOメッセージ送信エラー
-
VBAで作成するメール(開封確認...
-
VBScriptでファイルの日時順(降...
おすすめ情報