- ベストアンサー
VBからExcelを操作
VisualBasic6.0(初心者) VBを始めたばかりで、Excelの入力文字をVBで変換しようと考えています。 様々な保管場所にあるExcelを開いて選択セルの文字をコマンドボタンで変換しようと下記コードを考えました。(一部) 問題は、Load時にすでに開いているExcelを閉じてまいます。 何か良い方法は無いでしょうか?(アクティブなExcelを操作したい) また、下記コードで不適切なところがありましたら御教授願います。 Private Sub Form_Load() Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Add Set xlSheet = xlBook.Worksheets(1) Set xlApp = GetObject(, "Excel.Application") With xlApp.Selection Cells(1, 1).Value = "" End With xlApp.DisplayAlerts = False xlApp.Quit Set xlSheet = Nothing Set xlBook = Nothing Set xlApp = Nothing End Sub '----------------------(大文字変換) Private Sub CB2_Click() On Error Resume Next If ActiveCell.Row = Null Then MsgBox "Excel が見つかりません" Else Dim xlApp As Excel.Application Set xlApp = GetObject(, "Excel.Application") If Err.Number Then MsgBox "Excel が起動されていません" Else Dim X As Long Dim Y As Long Dim Hmae As String Dim Hgo As String X = 0 Y = 0 With xlApp.Selection Do Do Hmae = Cells(ActiveCell.Row + X, ActiveCell.Column + Y).Value Hgo = StrConv(Hmae, 1) Cells(ActiveCell.Row + X, ActiveCell.Column + Y).Value = Hgo X = X + 1 Loop Until X >= .Rows(.Rows.Count).Row - .Row + 1 X = 0 Y = Y + 1 Loop Until Y >= .Columns(.Columns.Count).Column - .Columns(1).Column + 1 End With End If xlApp.DisplayAlerts = False Set xlApp = Nothing End If End Sub
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>Set xlApp = GetObject(, "Excel.Application") これ、止めましょう。 >Dim xlApp As Excel.Application プロシージャ内の変数だと、プロシージャを抜けた時に消えてしまいます。 Declareの所に記述してください。ブックやシートも同じです。 >With xlApp.Selection ターゲットは分かっているんでしょ? xlSheet.Cells(~ としましょう。 >If ActiveCell.Row = Null Then ActiveCellはExcel.VBA固有のオブジェクトなので、VB6環境では xlApp.ActiveCell のように記述します。 ところで、一回もVisibleにならず、保存もせず閉じてしまっていますが、 これだと、何が起きているか分からないのでは?
その他の回答 (1)
- tarinko_06
- ベストアンサー率24% (15/62)
ロードの所で ブックの数でif文きって 1個だったらxlApp.Quit 複数だったらブック単体でクローズしたらいいんじゃないですか? 質問自体がよくわからないし あんまり自身ないんで、間違ってたすみあせん
お礼
回答ありがとう御座いました。 >1個だったらxlApp.Quit >複数だったらブック単体でクローズ なるほど、単体でクローズする方法も有るんですね。 調べてやってみようと思います。 確かに質問の内容がこれだと分かりにくいですね、失礼しました。
お礼
回答ありがとう御座いました。 プロシージャ内ではなくDeclareへ記述 他上記も含め参考になりました。 ExcelをTrueで表示しないのは、これを立ち上げてからでないと 他のExcelで使用出来なくなってしまっていたからです。 VBからではなく直接開いたExcelの選択セルを変換したいため仕方なく こうなってしまいました。