ミスチルの大名曲の数々が配信決定!! 31日間無料!!【PR】

まず現在の状況を説明します。

PCのOS:Windows 7
あるシステムからサーバーにCSVデータを飛ばしています。
そのデータに反応してExcelのマクロが自動起動するようなプログラムをPC上で組んであります。

マクロの内容は、データを読んでプリンターから印刷する というものです。

ここで問題になるのが、データが飛んでくると自動でマクロを起動するので
マクロが動いている間は他の操作ができなくなってしまうという点です。(数分程度)
Excelを非表示にはしているのですが、裏で動いているので他の操作がフリーズしてしまいます。

マクロ自体は裏で動いているが、それが他の操作に影響しない という方法はありますでしょうか?

何卒宜しくお願い致します。

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

A 回答 (3件)

こんばんは。



>マクロ自体は裏で動いているが、それが他の操作に影響しない という方法はありますでしょうか?
オートメーション・オブジェクトにすればいいのでは?

この用語で、ググってみてください。

例:
http://home.att.ne.jp/zeta/gen/excel/c04p44.htm

私は、タイマーを使って、為替レートの自動読み込みを、Excelをメインで使っている最中に、自動的に起動して、自動的に終了するというコードを使っていました。気をつける点は、ひとつだけ、必ず、オブジェクトを残さないことです。異常終了なんてなると、見えないオブジェクトがのこっているので、手動で、オブジェクトを削除しなければなりません。最初は、タスクマネージャーで確認しながら使ってください。

なお、COMでExcelを使うと、終了方法がややこしくなりますから、辞めたほうがよいです。
    • good
    • 2

「今使ってるエクセルが」動かなくなるご相談と思いました。


どこが(何が)問題なのか絞り込まれていないので,あてずっぽで思いつきを並べるしかありませんね。


>プリンタがネックかも

「印字する」の部分を全てコメントアウトして実行してみて,問題が解消されるようなら確かにそうかもしれません。

ほかにも例えば,「CSVを読み込む」で止まってるのかもしれません。印刷用に何か作成している作業が問題なのかもしれません。
具体的にどんなマクロを動かしている(細かくどんな処理を積み上げている)のかを一つずつ潰して,実際にどの部分で「動かなくなる」のか解明してから,改めて対応策をご相談投稿なさってみてください。
    • good
    • 1

>そのデータに反応してExcelのマクロが自動起動するようなプログラムをPC上で組んであります。



これをどのように実現しているのかはご質問の範疇じゃありませんが,この部分を細工して「マクロを含んだブックを開いてマクロを動かす」んじゃなく,「エクセルを起動して所定のマクロを実行する」ように仕込みます。


例:
excel.exeのショートカットを用意,所定のブックを同時に開かせるようにして,当該ブックにWorkbook_Openマクロを付けておく
http://office.microsoft.com/ja-jp/excel-help/HA0 …
既存の(今使ってる最中の)エクセルとは別のエクセルが起動するので,作業中のエクセルは影響を受けません。必要に応じて/eオプションを併用するなど。また自動起動マクロには,最後にはapplcationをquitするように仕込んでおきます

この回答への補足

説明が足りずに申し訳ありません。
すでにそのようになっており、新規でExcelが開きます。

ここで言う他の操作というのは、例えばブラウザ操作であったり、他のアプリの操作まで固まってしまうのです。
恐らく連続でいくつもの印刷処理をするので、プリンタードライバーとのやりとりがネックになっているのかもしれません。

補足日時:2014/05/22 17:42
    • good
    • 0

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

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

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

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

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

Qエクセルマクロをバックグラウンドで実行しているように見せたい

エクセルマクロでシートやブックを複数使い、
コピーやペースト、削除を何度もします。
その際に、他のシートやブックを何度も選択するので、
画面が絶え間なく動き、見ていることが出来ません。

こういったとき、どのようにして皆さんは対処しているのですか?

ひょっとして、どこかのシートを開いたままで、
バックグラウンドで実行しているように見せることって出来るのでしょうか?

Aベストアンサー

こんにちは
マクロの編集を選択し、構文の先頭行に
Application.ScreenUpdating = False
最終行に
Application.ScreenUpdating = True
を入れてみてはいかがでしょうか?
画面は、一つ一つ切り替わることなくマクロが終了しますよ。

QEXCELをバックグラウンドで実行するには

似たような質問は他にもあったのですが、
微妙に違うようだったので、
質問させていただきます。

あるフォルダに a.xls があるとして、
これをダブルクリックすると、
通常は目に見える状態で excel が起動しますが、
これを目に見えないように起動するにはどうすればよいでしょう?

Application.Visible = False
Application.WindowState = xlMinimized
のようにして非表示で起動することはできたのですが、
この場合、別エクセルファイルのb.xls をダブルクリックすると、
a.xls が可視状態となって b.xls と一緒に表示されてしまいます。

あくまで a.xls はバックグラウンドで実行させ、
他のエクセルファイルに影響しないようにするには、
どのようにすればよいでしょうか。

よろしくお願いします。

Aベストアンサー

エクセルのバージョンはいくつでしょうか。
例えば2003と2007では全く操作方法が違う場合がありますから、
バージョンを明記されると良いですよ。


開くときに見えなく・・と言うか、最小化で起動する方法は探し当てられたようですから
これはそのまま使うことにします。
つまり、a.xlsのThisWorkbookモジュールに
Private Sub Workbook_Open()
  Application.WindowState = xlMinimized
End Sub
を指定してやります。



ここからが問題ですね。
> 別エクセルファイルのb.xls をダブルクリックすると、
> a.xls が可視状態となって b.xls と一緒に表示されてしまいます。
この状態がイカンという事は
「a.xlsは常に非表示にしたい」
という事だとの理解で話を進めます。

まずは準備のために、a.xlsを開きます。
このa.xlsがアクティブな状態で
2003以前の場合・・(メニューの)ウィンドウ→表示しない
2007以降の場合・・(リボンの)表示タブ→表示しない
をクリックし、一度閉じます。
このとき、保存するかどうか聞いてくるので、必ず保存してください。
再度、このa.xlsを開くと、最小化・非表示の状態でコッソリエクセルが動きます。
その状態で他のブックを開いても、a.xlsが表示されないところまで確認下さい。


a.xlsの中身をいじりたいときは、
2003以前・・ウィンドウ→再表示
2007以降・・表示タブ→再表示
で再表示できます。
変更した後は、非表示の設定も外れますから、再度設定が必要です。

エクセルのバージョンはいくつでしょうか。
例えば2003と2007では全く操作方法が違う場合がありますから、
バージョンを明記されると良いですよ。


開くときに見えなく・・と言うか、最小化で起動する方法は探し当てられたようですから
これはそのまま使うことにします。
つまり、a.xlsのThisWorkbookモジュールに
Private Sub Workbook_Open()
  Application.WindowState = xlMinimized
End Sub
を指定してやります。



ここからが問題ですね。
> 別エクセルファイルのb.xls をダブルクリックすると...続きを読む

Qエクセルで別ブックをバックグラウンドでオープンする方法

最初にメニュー画面となるブックを開いた後、データブックをバックグランドのみで開きたいのですが、エクセルVBAで単純にOPENを行うと画面上にデータブックが表示されてしまいます。操作作業者に画面が次々入れ替わることを見せたくないのですが、ブックをバックグラウンドだけで開く方法はあるのでしょうか。VBAについては素人で宜しくお願いします。

Aベストアンサー

ごめんなさい。解決済みと思って見ていませんでした。 まだですか?

後で開いた3つのブックは、VBAで操作しないのですか。
操作するのでしたら、ブックをオブジェクト変数に入れておいた方が操作しやすい
と思うのですが・・・ 一応何処でどのように使うのか判りませんので・・・

こんな感じで如何でしょうか。

ブックを開いてから非表示にするまでの瞬時の画面のことですね。
それなら、その間、ScreenUpdating = False でどうでしょうか。

Public Bk1 As Workbook
Public Bk2 As Workbook
Public Bk3 As Workbook
Dim PathName As String

Sub Auto_Open()
PathName = ThisWorkbook.Sheets("メニュー").Range("C28").Value
ファイル読込 "初期値.xls", Bk1
ファイル読込 "データ1.xls", Bk2
ファイル読込 "データ2.xls", Bk3
End Sub

Sub ファイル読込(BkName, ObjBk)
Application.ScreenUpdating = False
Set ObjBk = Workbooks.Open(Filename:=PathName & "\" & BkName)
Windows(BkName).Visible = False
Application.ScreenUpdating = True
End Sub

ごめんなさい。解決済みと思って見ていませんでした。 まだですか?

後で開いた3つのブックは、VBAで操作しないのですか。
操作するのでしたら、ブックをオブジェクト変数に入れておいた方が操作しやすい
と思うのですが・・・ 一応何処でどのように使うのか判りませんので・・・

こんな感じで如何でしょうか。

ブックを開いてから非表示にするまでの瞬時の画面のことですね。
それなら、その間、ScreenUpdating = False でどうでしょうか。

Public Bk1 As Workbook
Public Bk2 As Workbook
P...続きを読む

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

QExcelのVBマクロを、バックグラウンドで動かしたいのです。

ExcelのVBマクロを、バックグラウンドで動かしたいのです。


sheet1のセルに対して操作を行うマクロをMaacroAとします。このマクロをsheet2やsheet3など複数のsheetから呼び出してsheet1を操作したいのですが、どうしても画面がsheet1に移ってしまいます。

Application.ScreenUpdating を使ってもマクロ終了時にsheet1の画面になってしまいます。

どのようにしたらいいのでしょうか?

Aベストアンサー

>Worksheets("sheet1").Range("A4:W144").Select

上記、補足で提示したコードの直前には、
Worksheets("Sheett1").Select(Activate)がありますよね。
そうでないと
Worksheets("sheet1").Range("A4:W144").Select
こんなことはできませんから。

で、回答。

Worksheets("Sheet1").Select 
Worksheets("sheet1").Range("A4:W144").Select
の2行を削除して以下のようにSortだけにする

'----------------------------------------------------
Worksheets("sheet1").Range("A4:W144").Sort _
  Key1:=Worksheets("sheet1").Range("a4"), _
  Order1:=xlAscending, Header:=xlGuess, _
  OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
  SortMethod:=xlPinYin, DataOption1:=xlSortNormal
'-----------------------------------------------------

●点要点●
1.Sortの範囲をシートを明示して直接指定
2.Keyもどのシートのセルなのか分かるようにシート名を付加する

ソートに限らず他のシートから、Sheet1を扱う場合は、
Selectはしないで、シート名を付加すればいいということです。

以上です。

>Worksheets("sheet1").Range("A4:W144").Select

上記、補足で提示したコードの直前には、
Worksheets("Sheett1").Select(Activate)がありますよね。
そうでないと
Worksheets("sheet1").Range("A4:W144").Select
こんなことはできませんから。

で、回答。

Worksheets("Sheet1").Select 
Worksheets("sheet1").Range("A4:W144").Select
の2行を削除して以下のようにSortだけにする

'----------------------------------------------------
Worksheets("sheet1").Range("A4:W144").Sort _
  Key1:=Worksh...続きを読む

QDoEvents関数って何?

こんにちは。

VBAやプログラミングに詳しい皆様に
教えていただきたい質問があります。

cells(1,1)からcells(5000,1)までの値を消去するときに
処理の進行状況を表示するためにuserform上にプログレスバーを表示したいと思います。

そこで下記のようなコードを入力しました。

userform1.show
for i =1 to 5000
cells(i,1)=""
userform1.progressbar1.value=i/5000*100
next i
unload userform1

しかしこれだとuserformの背景が真っ白になってしまい
ラベルの文字も消えてしまいます。
そこで「EXCEL VBA パーフェクトマスター」という本を見たら

for i =1 to 5000
cells(i,1)=""
userform1.progressbar1.value=i/5000*100
DoEvents
next i
unload userform1
と入力すれば解決することがわかりました。

しかし「DoEvents」についてあまり詳しく書いていなかったのでDoEvents関数をヘルプで見ると、
「発生したイベントがオペレーティング システムによって処理されるように、プログラムで占有していた制御をオペレーティング システムに渡すフロー制御関数です。」

と書いてあるのですが正直、書いてあることがよくわかりません。

どなたかDoEvents関数について、
もう少しわかりやすく教えていただけませんか。
それから、最初に書いたコードで実行すると
ユーザーフォームの背景が真っ白になってしまう原因も
教えていただけませんか?

よろしくお願いいたします。

こんにちは。

VBAやプログラミングに詳しい皆様に
教えていただきたい質問があります。

cells(1,1)からcells(5000,1)までの値を消去するときに
処理の進行状況を表示するためにuserform上にプログレスバーを表示したいと思います。

そこで下記のようなコードを入力しました。

userform1.show
for i =1 to 5000
cells(i,1)=""
userform1.progressbar1.value=i/5000*100
next i
unload userform1

しかしこれだとuserformの背景が真っ白になってしまい
ラベルの文字も消えてしまいます。
そ...続きを読む

Aベストアンサー

簡単に言うと、
OS に制御を渡すってことです。(ヘルプそのまんま)
時間が掛かるループ処理などの場合、ループが終わるまで制御は独占されてしまいます。
ですのでループ中は OS や Excel そのものにも再描画をさせる暇さえ与えません。
途中に DoEvents を入れると制御が OS に渡るので、OS は溜まっていた処理をそこで行うことができます。
結果、フォームの再描画などが行われることになります。

注意点ですが、
Private Sub CommandButton1_Click()
  Dim i As Long

  For i = 1 To 50000
    DoEvents
    Cells(i,1) = ""
  Next i
End Sub

Private Sub CommandButton2_Click()
  MsgBox "hoge"
End Sub

っていうフォームのコードがあった場合、
DoEvents を入れることによって、ループ中にユーザーがCommandButton2 を押すことによって CommandButton2 のクリック イベントも動いちゃいます。
CommandButton1 のクリック イベントではループの前に
CommandButton1.Enabled = False
CommandButton2.Enabled = False
を書いてフォーム上の CommandButton を無効にしておき、ループが終わったら
CommandButton1.Enabled = True
CommandButton2.Enabled = True
と書いて CommandButton を有効に戻してください。

これを工夫すれば、CommandButton2 で CommandButton1 のループを途中キャンセルする処理もすることができます。

Private Canceled As Boolean

Private Sub CommandButton1_Click()

  CommandButton2.Enabled = False

  Dim i As Long
  For i = 1 To 50000
    DoEvents

    If Canceled = True Then
      MsgBox "キャンセルしました"
      Exit Sub
    End If

    Cells(i, 1).Value = ""
  Next i
End Sub

Private CommandButton2_Click()
  Canceled = True
End Sub



コードの行頭にあるスペースは見易さのために全角スペースで作成していますので、これをこのままコピペするとエラーになるかもしれません。
コピペするなら行頭の全角スペースを半角スペースに直してください。

簡単に言うと、
OS に制御を渡すってことです。(ヘルプそのまんま)
時間が掛かるループ処理などの場合、ループが終わるまで制御は独占されてしまいます。
ですのでループ中は OS や Excel そのものにも再描画をさせる暇さえ与えません。
途中に DoEvents を入れると制御が OS に渡るので、OS は溜まっていた処理をそこで行うことができます。
結果、フォームの再描画などが行われることになります。

注意点ですが、
Private Sub CommandButton1_Click()
  Dim i As Long

  For i = 1 To 50000
...続きを読む

QEXCELファイルのカレントフォルダを取得するには?

EXCELファイルのカレントフォルダを取得するには?

C:\経理\予算.xls

D:\2005年度\予算.xls

EXCEL97ファイルがあります。

VBAで
  カレントフォルダ名
(C:\経理\,D:\2005年度\)
を取得する事は可能でしょうか?

CURDIRでは上手い方法が見つかりませんでした。

Aベストアンサー

こんばんは。
Excel97 でも、同じですね。以下で試してみてください。

Sub test()
'このブックのパス
a = ThisWorkbook.Path
'アクティブブックのパス
b = ActiveWorkbook.Path
'Excelで設定されたデフォルトパス
c = Application.DefaultFilePath
'カレントディレクトリ
d = CurDir
MsgBox "このブックのパス   : " & a & Chr(13) & _
   "アクティブブックのパス: " & b & Chr(13) & _
   "デフォルトパス    : " & c & Chr(13) & _
   "カレントディレクトリ : " & d & Chr(13)
End Sub

Q【Excel VBA】マクロでExcel自体を終了させたい

環境:WindowsXP、Excel2003

マクロでエクセルを終了(ブックを閉じて、アプリケーション自体も終了)させたいのですが、以下のコードではアプリケーションが閉じてくれません。

ThisWorkbook.Close
ExcObj.Quit
Application.Quit

どこか悪いところはありますでしょうか?

よろしくお願いします。

Aベストアンサー

普通に考えれば質問者のコードで上手くいきそうですが
hana-hana3さんの回答にもあるようにThisWorkBook.Closeでコード終了となりますので
Application.QuitをThisWorkBook.Closeの前にもってこないといけません。
Application.Quitはそれがあるプロシージャのコードが全て終わるまで
その実行を保留するちょと特別動作をします。

'-------------------------------------
 Application.Quit
 ThisWorkbook.Close
'-------------------------------------
 
 

Qエクセルのマクロをバックグラウンドで動作させたい

どうか教えてください。
エクセルのマクロをバックグラウンドで動作させたいのですが(マクロ実行中のエクセルを画面に表示させたくない&マクロ動作中に別のアプリを使いたい)、どのようにしたら良いのでしょうか?

Aベストアンサー

タスクバーにも表示しない、というわけではないですよね。
マクロの最初に
Application.WindowState = xlMinimized
と入れておくと、ウィンドウが最小化した状態でマクロが実行されます。

マクロの最後に
Application.WindowState = xlNormal
と入れておくと、マクロが終了したら自動的に元のサイズに戻ります。

QEXCEL2000 VBA マクロ実行中に他の作業ができないか

いつもお世話になっております。

EXCEL2000 VBAでマクロ実行中にEXCELで別の作業(表計算したり、別のマクロを実行したり)がやりたいんですが、可能でしょうか。

よろしくお願いいたします。

Aベストアンサー

標準モジュールに
Sub test02()
For i = 1 To 1000000
Cells(1, 1) = "A"
Next i
End Sub
を入れて実行し、終らない間に、デスクトップを表示して、エクセルのアイコンをクリックして、別ブックを開いたり出来ます。
上記は確認後CTRL+Breakキーで中断のこと。
上記は#2のお答えのことと思います。
====
質問内容は、そんなことじゃないなら補足しては。


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

人気Q&Aランキング