前回の質問に続く内容なのですが、Excelの起動は
おかげ様でうまくいきました。
が、直後のコーディングが???
Excelを起動後にモーダルで終了を待ちたいのですが
どうすればよいのか分かりません、HELPをめくっている際にちらっと見た覚えはあるのですが、それがどこにあったのか探せなくなりました。
助けてください!

このQ&Aに関連する最新のQ&A

A 回答 (1件)

はいはい(笑)


#19166の続きってことですので、Excelを使うのに New Excel.Application で、Excelのインスタンスを作成しているわけですよね。
それでしたら、ExcelApp変数の Visibleプロパティを見れば動いてるかどうか分かるみたいです。

以下、プログラム例です。

'*-*-*-この部分はモジュールの先頭部分に記述*-*-*-
'寝る為のAPI Call SLEEP(寝るミリ秒数)
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
'*-*-*-ここまで*-*-*-

Private Sub Command2_Click()
  Dim ExcelApp As Excel.Application
  'Excelのインスタンスを作成して表示
  Set ExcelApp = New Excel.Application
  ExcelApp.Visible = True
  
  'Excelが終了されるとVisibleがFalseになる
  'ので、それまで待機
  Do
    Call Sleep(250) 'しばらく寝る
    DoEvents
  Loop While ExcelApp.Visible = True
  
  'Excel終了時の処理
  MsgBox "Excelが終わったよん"
  
  'インスタンスの開放
  Set ExcelApp = Nothing
End Sub


*****************************************
尚、Shellコマンドを使って起動した場合には、
Dim TaskID as long
TaskID=Shell("Excel.EXE …")
on error resume next
do
 Err.Clear
 AppActivate TaskID
Loop Until Err<>0
Msgbox "Excelが終わったよ"
みたいな感じで、アプリの起動を監視できます


返事は一回!
    • good
    • 0
この回答へのお礼

まっことおおきに!(土佐弁どえす)
うまくいきました。
非常に助かりました。
ARCさん、師匠と呼ばせてください(笑)

お礼日時:2000/12/19 09:49

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QExcel-VBAのコーディングを教えて下さい。

A列1行目から、2行目3行目・・・に「今日は」「とても」「天気です。」の様な文章が入っていて、「とても」「天気です。」は文字色が白になっています。
B列1行目に「今日は」と入力を完了したら、A2の「とても」が指定秒だけ黒色になりその後白色に戻ります。
B列2行目に「とても」を入力すると、A3の「天気です。」が指定秒だけ黒色になりその後白色に戻ります。
というようにしたいのですが、このようなマクロのコーディング例が欲しいのです。
何に使うかというと、もちろんキーボードレッスンです。
宜しくお願いします。

Aベストアンサー

こんばんは。

#3 で書いたWendy02 です。もう一度、タイミングについて考えてみました。DoEvents が、多少、誤動作をさせるようですが、これなら、入力と色消しのタイミングのズレが解消されているはずです。


'<ThisWorkbook>
Option Explicit
Public WithEvents mySh As Worksheet
Private Sub mySh_Change(ByVal Target As Range)
 With Target.Cells(1, 1)
  If .Offset(, -1).Value = .Value Then
    .Offset(1, -1).Font.ColorIndex = -4105
    CheckTime 1000
    .Offset(1, -1).Font.ColorIndex = 2
   ElseIf .Value <> Empty Then
    .Select
    Beep
    .Offset(, -1).Font.ColorIndex = 3
    CheckTime 1000
    .Offset(, -1).Font.ColorIndex = 2
  End If
  If .Row >= Range("A65536").End(xlUp).Row Then
     If .Value = .Offset(, -1).Value Then
     MsgBox "終了です。"
     Call ThisWorkbook.s_TestEnd
     End If
  End If
  End With
End Sub

Sub KeyBoardTest()
'ボタンの起動
With Worksheets("Sheet1")
 .Range("A1", Range("A65536").End(xlUp)).Font.ColorIndex = 2
 .Range("B1", Range("B65536").End(xlUp)).ClearContents
 .Range("B1").Select
 Beep
 .Range("A1").Font.ColorIndex = -4105
 CheckTime 1000 '1000分の1秒
 .Range("A1").Font.ColorIndex = 2
 .Range("B1").Activate
 Set mySh = Worksheets("Sheet1")
 Application.EnableEvents = True
End With
End Sub
Sub s_TestEnd()
 Set mySh = Nothing
End Sub
Sub CheckTime(argInterval As Integer)
Dim myStartTime As Double
Dim myTimer As Double
Dim myInterval As Integer
myStartTime = Timer()
myInterval = argInterval / 1000
 myTimer = Timer()
  While Timer() - myTimer < myInterval
   DoEvents
  Wend
End Sub

'<Sheetモジュール>
'コントロールツールボタン
Private Sub CommandButton1_Click()
 Call ThisWorkbook.KeyBoardTest
End Sub

こんばんは。

#3 で書いたWendy02 です。もう一度、タイミングについて考えてみました。DoEvents が、多少、誤動作をさせるようですが、これなら、入力と色消しのタイミングのズレが解消されているはずです。


'<ThisWorkbook>
Option Explicit
Public WithEvents mySh As Worksheet
Private Sub mySh_Change(ByVal Target As Range)
 With Target.Cells(1, 1)
  If .Offset(, -1).Value = .Value Then
    .Offset(1, -1).Font.ColorIndex = -4105
    CheckTime 1000
    .Offset(...続きを読む

QExcel出力後のExcelの起動について

Vb側からデータをExcelに出力し、その画面を表示させたまま
出力したExcelを確認しようと思ったところ、Excelは起動するものの
シートが表示されない現象が起こりました。
出力後のExcelの終了(解放?)のロジックは下記の通りです。

Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet

Set xlApp = New Excel.Application
Set xlBook = xlApp.Workbooks.Add
Set xlSheet = xlBook.Worksheets.Add


Sheetへの出力処理


Set xlApp = Nothing
Set xlBook = Nothing
Set xlSheet = Nothing

この現象の回避方法がありましたらご教授ください。

Windows2000
Vb6.0 SP5
Excel2000

Vb側からデータをExcelに出力し、その画面を表示させたまま
出力したExcelを確認しようと思ったところ、Excelは起動するものの
シートが表示されない現象が起こりました。
出力後のExcelの終了(解放?)のロジックは下記の通りです。

Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet

Set xlApp = New Excel.Application
Set xlBook = xlApp.Workbooks.Add
Set xlSheet = xlBook.Worksheets.Add


Sheetへの出力処理


Set x...続きを読む

Aベストアンサー

多分、もう解決されているかと思いますが・・・。
簡単に実験してみました。
ステップ実行して、1ステップごとにExcelの状態を確認しました。

Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet

Set xlApp = New Excel.Application
↑影でこっそりExcelが起動している様子です。。。

xlApp.Visible = True
↑Excelがシート無しの灰色の状態で表示されます。

Set xlBook = xlApp.Workbooks.Add
↑テンプレのとおりのシートが作成されます。
 (デフォルトだとBook1.xlsでシートが3枚)

Set xlSheet = xlBook.Worksheets.Add
↑シートが1枚追加されます(いいのかな・・・)

xlSheet.Range("A1").Value = "Test Data"
↑追加したシートのセルA1に"Test Data"が入力されます。

xlBook.SaveAs "test.xls"
↑デフォルトのパス上にtest.xlsが作成されます。

xlBook.Close
↑Excelがシート無しの灰色の状態に戻ります。

xlApp.Quit
↑Excelが終了します(Alt+Tabで表示されなくなります)

Set xlApp = Nothing
Set xlBook = Nothing
Set xlSheet = Nothing

1.上記を実行後、作成した"test.xls"を開くと、ちゃんと表示されました。。。
2.ためしにNothingを全部コメントにして実行しても、ちゃんと表示されました。
3."xlBook.Close"と"xlApp.Quit"だけをコメントにしたところ、Excel(test.xls)は表示されたままでした。

こんな感じでした。

私の場合、オバケが残る事象が出たら、面倒でもPCを再起動してからソースを修正し、再テストに臨みます。
何度ソースをいじってもオバケが解消されないとき、再起動したら直ったケースがあったので。。。

リンクはAccessに関してですが、Nothingについての考え方(?)が載ってます。

以上、ご参考まで。

参考URL:http://www7.big.or.jp/~pinball/discus/access/91106.html

多分、もう解決されているかと思いますが・・・。
簡単に実験してみました。
ステップ実行して、1ステップごとにExcelの状態を確認しました。

Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet

Set xlApp = New Excel.Application
↑影でこっそりExcelが起動している様子です。。。

xlApp.Visible = True
↑Excelがシート無しの灰色の状態で表示されます。

Set xlBook = xlApp.Workbooks.Add
↑テンプレのとおりのシートが作成されます。
 (デフォ...続きを読む

QNotepad起動のイベントでEXCELを起動したいのですが、

EXCEL VBAでBOOKを開くと、メモ帳を起動するには、
Private Sub Workbook_Open()
Dim rc As Long
rc = Shell("notepad.exe", vbMaximizedFocus)
End Sub
のようにbookを開くイベントでshell関数からNotepadを起動できますが、
notepad起動により、EXCELを立ち上げたいのですが、方法が解りません。
多分、メモ帳起動をWindowsがイベント検出する事でEXCELを起動するのでしょうが、
WindowsのAPIを勉強し始めたばかりなので、解決の糸口がつかめません。
ずるいようですが、
1)実行ステートメントを知りたい。(即、動かしたい。)
2)本格的に、自力で理解してステートメントを書くための勉強法を教えて欲しい。
例えば、参考書名などお教えいただけると助かります。
EXCEL VBAは昨年夏から勉強し始めて、今年に入ってからWin APIの勉強中です。
作業環境は、Windows10、EXCEL2016を使ってます。

EXCEL VBAでBOOKを開くと、メモ帳を起動するには、
Private Sub Workbook_Open()
Dim rc As Long
rc = Shell("notepad.exe", vbMaximizedFocus)
End Sub
のようにbookを開くイベントでshell関数からNotepadを起動できますが、
notepad起動により、EXCELを立ち上げたいのですが、方法が解りません。
多分、メモ帳起動をWindowsがイベント検出する事でEXCELを起動するのでしょうが、
WindowsのAPIを勉強し始めたばかりなの...続きを読む

Aベストアンサー

こんにちは。

実用に足るかどうかは分かりませんが、Microsoft Application Compatibility Tool Kits (ACT)の中に、一般のアプリに、ラッパーさせて他の機能を持たせるツールがありますね。早い話が、アプリの改造なのですが、特に、Resource Hacker などとは違い本体を改造させない所がミソだったりします。いわゆるハッキングをしたいとおっしゃっているようですが、それなりの書籍は、三省堂の本店などにも出ていた記憶があります。でも、VBAからの延長では話にならないと思います。私は、見よう見まねで、教わったものだけは可能にしていますが、それ以外は、うまく使えません。以下の場合は、なぜか、機能落ちしてしまいます。

http://www.atmarkit.co.jp/fwin2k/tutor/wcompat02/wcompat02_01.html
私は、このツールを今ひとつ使いこなせずに、成功していません。

Win APIで、WindowEvent にフックさせて起動させるっていうのは、SetWindowsEventHook でしょうけれども、それは使ったことはありませんね。
https://msdn.microsoft.com/en-us/library/windows/desktop/ms644990(v=vs.85).aspx

>デフォルトの無題 メモ帳が開いて、同時にEXCELを起動する方法が解りません。
具体的には、#1さんの話とまったく同じなのですが……。
実際、そういうお話なら、怖い話ですが、WScript で偽装させてしまえば済みます。他人の環境なら、アンチウィルスに引っかかってしまうとは思いますが。WScript の怖さっていうのは、その万能性です。単に、Script だけで治まってはいないのです。

しかし、あまり本気にはしないでほしいのですが、自分でメモ帳を作る方法もありますね。(^^;
プログラムの勉強の一つに、メモ帳の作成というものがありますし。

こんにちは。

実用に足るかどうかは分かりませんが、Microsoft Application Compatibility Tool Kits (ACT)の中に、一般のアプリに、ラッパーさせて他の機能を持たせるツールがありますね。早い話が、アプリの改造なのですが、特に、Resource Hacker などとは違い本体を改造させない所がミソだったりします。いわゆるハッキングをしたいとおっしゃっているようですが、それなりの書籍は、三省堂の本店などにも出ていた記憶があります。でも、VBAからの延長では話にならないと思います。私は、見よう見まねで、教...続きを読む

QExcel-VBAで新しいシート挿入直後にシートの名前を変更する。

お世話になります。
Excel-VBAで、Sheets.Addメソッドで、sheetを挿入すると、都度sheet1とかsheet2とか、何回目のシート挿入を実行したのかによって勝手にsheet番号を振ってワークシートが出来ると思いますが、挿入直後にシートの名前を変更するのはどういうコードを書けば良いのでしょうか?

Aベストアンサー

ActiveSheet.Name = "シート名"
でどうでしょう。

Q【HELP!!】Excelから保存したtxtデータに「改行コード」を入れない方法(VBA)

あるデータをExcelマクロを使って生成しています。

txtに保存するときに、120バイトで揃えたいのですが、データに改行コードが入る為120バイトを超えてしまうようです。

データは最大200行。

Excelのセルで生成されたデータはそのままに、改行コードのみをtxtの段階で削除する方法を教えてください!

とっても困っています・・・

ちなみに・・・
ActiveWorkbook.SaveAs Filename:="C:\MIKAZUKI.txt", FileFormat:=xlUnicodeText _
, CreateBackup:=False
が今のコードです。

不足な資料等があればジャンジャン送ります。

Aベストアンサー

固定長120バイトのデータを、改行コードなしで羅列するという意味ですか。COBOLプログラムで読み込むのでしょうか?

SaveASメソッドではFileFormatプロパティで「改行なし」を選択できないと思います(できたら不勉強ですが)。WIRTE命令かFSOオブジェクトを使用すれば可能です。

貼り付けたURLを参考になさってください。私がなまじマクロを書くより的確な例が掲載されています

参考URL:http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_110_055.html


このQ&Aを見た人がよく見るQ&A

このカテゴリの人気Q&Aランキング

おすすめ情報