
こんにちわ。
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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) エクセルVBA Workbook変数に変数を使ったファイル名を格納したい 5 2023/06/13 14:46
- Excel(エクセル) エクセルの自動更新のタイミングについて 1 2022/07/20 16:12
- Excel(エクセル) シート名を簡単に書く方法があれば教えてください。 4 2023/08/24 12:40
- Excel(エクセル) 【マクロ】スクショ印刷がうまく動かない件 5 2022/12/06 17:37
- Excel(エクセル) 【マクロ】マクロが保存されているエクセルとは、別のエクセルブックの全シートの非表示列を再表示したい 1 2022/12/24 20:48
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/03 11:27
- Excel(エクセル) 【マクロ】マクロが保存されているエクセルとは、別のエクセルのオートフィルターのしぼりをクリアーしたい 2 2022/12/24 08:36
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
worksheetFunctionクラスのVloo...
-
「Columns("A:C")」の列文字を...
-
エクセルのVBAの標準モジュール...
-
VBAで Set wb = Sheets(1).Cop...
-
Excelでフィルタをかけると警告...
-
sheetsメソッドの失敗
-
VBAでWebページにセルの値を入力
-
VBAで既に開いている別アプリケ...
-
オブジェクトが見つかりません
-
VBからPDFファイル自動生成...
-
エクセルマクロの行選択
-
vb.netアプリケーションで発生...
-
findメソッドの変数について
-
Excel VBAでWordの複数ファイル...
-
ASPからSELECT文を複数発行する...
-
エクセル/保護したシート上の埋...
-
実行時エラー 3265「要求された...
-
エクセルマクロエラー「'Cells'...
-
エクセルVBAでcode128のバー...
-
Excel2007 VBA ラジオボタン Ca...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
worksheetFunctionクラスのVloo...
-
「Columns("A:C")」の列文字を...
-
エクセルのVBAの標準モジュール...
-
Excelでフィルタをかけると警告...
-
実行時エラー 3265「要求された...
-
VBAで既に開いている別アプリケ...
-
テキストボックス中の文字列の...
-
ExcelVBAでのNZ関数について
-
[VBA]CDOメッセージ送信エラー
-
EXCEL VBA オートシェイプナン...
-
VBAで Set wb = Sheets(1).Cop...
-
エクセルマクロエラー「'Cells'...
-
AccessVBAで「dim dbs as datab...
-
Excel VBAでWordの複数ファイル...
-
オブジェクトが見つかりません
-
CreateObjectとGetObjectの違い
-
エクセルVBAで配列内に空白デー...
-
オブジェクト変数またはWITHブ...
-
エクセルVBAでcode128のバー...
-
VBScriptからDLL参照設定したい
おすすめ情報