こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

投稿日時 - 2009-04-17 17:08:15

QNo.4886837

困ってます

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

>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にならず、保存もせず閉じてしまっていますが、
これだと、何が起きているか分からないのでは?

投稿日時 - 2009-04-17 17:31:35

お礼

回答ありがとう御座いました。
プロシージャ内ではなくDeclareへ記述
他上記も含め参考になりました。
ExcelをTrueで表示しないのは、これを立ち上げてからでないと
他のExcelで使用出来なくなってしまっていたからです。
VBからではなく直接開いたExcelの選択セルを変換したいため仕方なく
こうなってしまいました。

投稿日時 - 2009-04-20 08:50:06

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

ロードの所で
ブックの数でif文きって
1個だったらxlApp.Quit
複数だったらブック単体でクローズしたらいいんじゃないですか?
質問自体がよくわからないし
あんまり自身ないんで、間違ってたすみあせん

投稿日時 - 2009-04-17 21:05:12

お礼

回答ありがとう御座いました。
>1個だったらxlApp.Quit
>複数だったらブック単体でクローズ
なるほど、単体でクローズする方法も有るんですね。
調べてやってみようと思います。
確かに質問の内容がこれだと分かりにくいですね、失礼しました。

投稿日時 - 2009-04-20 08:54:14