• ベストアンサー

マクロで、次のコードへ行く前に時間をおくにはどうしたらいいのでしょうか?

いつもお世話になっております。 早速質問なのですが、ADOで一旦データベースの内容を取り出した後、別のワークブックへコピーするというマクロを作っています。 問題は、データベースの内容を取り終わる前に別のワークブックへコピーする処理が始まってしまい困っています。 マクロの処理だけを一定時間止める方法、またはADOの処理が終わるのを待って次の処理へ進む方法はないものでしょうか? ご存知の方がいましたら、アドバイスをお願いします。

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

  • ベストアンサー
  • _Kyle
  • ベストアンサー率78% (109/139)
回答No.4

>ADOの処理が終わるのを待って次の処理へ進む方法はないものでしょうか? 【クエリの更新が終わるまで次の処理に移行しない】 ということであれば、  .Refresh BackgroundQuery:=True としている部分を、  .Refresh BackgroundQuery:=False とすれば良さそうに思うのですが…? ご参考まで。

wise123
質問者

お礼

ありがとうございました。 .Refresh BackgroundQuery:=False で、クエリの更新を待つようになりました。 今後のこともあるので、ADOで作り直してみようと思います。

その他の回答 (3)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 ソースを見る限りは、ADO ではなくて、QueryTable から、ODBCをお使いのようですが、Table を作った後に、Cells.Copy では、かなり無理があるようです。 最初の行で、↓を宣言しているようですが、False では? Application.ScreenUpdating = True この部分もへんですね。 Cells.Select Selection.Delete Shift:=xlUp 単に、 Cells.Clear で良いように思います。 >データベースの内容を取り終わる前に別のワークブックへコピーする処理が始まってしまい困っています。 今の段階で、終了を確認していないから、時間差を置いたり止めたりする方法は、感心しません。QueryTable 自体の問題ではないでしょうか。本格的に、ADOでやってみたらいかがですか? 当面、 Application.Wait Now + TimeSerial(0, 0, 30) '30秒間、ウェイトする こんなコマンドもありますが……。

wise123
質問者

補足

ご指摘ありがとうございました。 WEBでADOのサンプルを見つけてそれを参考に作っていたのですが、そもそもADOではなかったのですね。すみませんでした。 まだわからないことだらけなもので、もう1度ADOのやり方を勉強してみます>< ウェイトの方法まで載せていただきありがとうございました^^

  • sykt1217
  • ベストアンサー率34% (277/798)
回答No.2

うーん・・・肝心の処理進行のステートメント(もしくは処理中枢部分)が書かれていないような・・・^^; ・データ抽出処理 ・コピー処理 この二つはステートメントを分けていますか? _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ sub 処理実行ステートメント() Call データ抽出処理ステートメント Call コピー処理ステートメント end sub sub データ抽出処理ステートメント() ~データ抽出処理~ end sub sub コピー処理ステートメント() ~コピー処理~ end sub のようになっていますか? _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

wise123
質問者

補足

ご指摘ありがとうございました。 データ抽出処理とコピー処理の二つにステートメントを分けていませんでした。処理中枢部分といっても先ほど載せたものしかありません。あとはコピー後に保存するとかそれくらいなのですが・・・。 ステートメントを分けて以下のようにしてみましたが、やはりデータ取り出し中の状態でコピー処理が始まってしまいました。 何度も申し訳ありませんが、見ていただければ幸いです。 sub 処理実行ステートメント call データ抽出処理ステートメント call データコピー処理ステートメント end sub Sub データ抽出処理ステートメント() Application.ScreenUpdating = True Application.DisplayAlerts = True Sheets("得意先マスター").Select Cells.Select Selection.Delete Shift:=xlUp Range("A1").Select ' With ActiveSheet.QueryTables.Add(Connection:= _ "ODBC;DSN=AAADSN;APP=MicrosoftR Query;Trusted_Connection=Yes" _ , Destination:=Range("A1")) .CommandText = Array( _ "SELECT *" & Chr(10) & "FROM AAA" & "DB.dbo.得意先M 得意先M") .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .BackgroundQuery = True .RefreshStyle = xlInsertDeleteCells .SavePassword = True .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .PreserveColumnInfo = True .Refresh BackgroundQuery:=True End With end sub sub データコピー処理ステートメント() Sheets("得意先マスター").Select Cells.Select Selection.Copy Workbooks.Open Filename:="C:\得意先M.xls" Windows("得意先M.xls").Activate Sheets("得意先M").Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False end sub 

  • sykt1217
  • ベストアンサー率34% (277/798)
回答No.1

通常、プログラムは並行して二つの処理、ということはしません。 恐らくコーディングの問題だと思いますので、「時間をおく」よりも「ソースを書き直す」ことを強くお勧めします。 恐らく差し支えない程度にソースを載せて頂いた方が話が早いと思いますが、転記は可能でしょうか?

wise123
質問者

補足

さっそくのご回答ありがとうございました。 ソースを載せますので、気づいたことがあればご指摘下さい。 Sub toku() Application.ScreenUpdating = True Application.DisplayAlerts = True Sheets("得意先マスター").Select Cells.Select Selection.Delete Shift:=xlUp Range("A1").Select ' With ActiveSheet.QueryTables.Add(Connection:= _ "ODBC;DSN=AAADSN;APP=MicrosoftR Query;Trusted_Connection=Yes" _ , Destination:=Range("A1")) .CommandText = Array( _ "SELECT *" & Chr(10) & "FROM AAA" & "DB.dbo.得意先M 得意先M") .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .BackgroundQuery = True .RefreshStyle = xlInsertDeleteCells .SavePassword = True .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .PreserveColumnInfo = True .Refresh BackgroundQuery:=True End With '(※ Sheets("得意先マスター").Select Cells.Select Selection.Copy     ・     ・     ・ ※ここで、データ取得が完了するまで待ちたいのですが・・・。

関連するQ&A

  • EXCELマクロが正常に動作したりしなかったりする

    Office2007でEXCELのマクロを使用して、マクロ付のEXCELを開くと、決まった位置にあるDATファイルを読込、その内容を基に計算等を行い、結果をEXCELのシートの決まった位置に転記して、そのシートを新規のワークブックにコピーするという処理を行っています。 複数のPCで正常に動作するのですか、一部のPCで正常に動作せず、マクロ自体は起動しているみたいなのですが、DATファイルの内容がそのままEXCELに転記され、新規のワークブックにコピーされます。ワークブックやシートの名前もDATファイル名になってしまっています。ただし、10回に1回くらいの割合で正常に動作します。 また、11月位まで正常に動作していたのに、12月位から突然正常に動作しなくなったPCもあります。 マクロのセキュリティ設定を疑いましたが、「すべて有効」になっており、なにが原因でこのような状態になっているのか皆目見当がつきません。 原因及び対処方法をご存じの方、ご教授ねがえないでしょうか。 よろしくお願いします。

  • エクセルのブック間のコピペのマクロ構文を教えて下さい

    はじめまして。 マクロは初心者なので、ご教授いただけるとありがたいです。 エクセルのワークブック1のシート1をコピーして、ワークブックAのシートaにペーストをする構文をお願いします。 マクロの記録で作って実行してみましたが、コピーするファイルが開いているときはうまくいって、開いていないとないとうまくいきませんでした。 コピーするファイルが開いていない状態でもコピーできる方法はないのでしょうか… よろしくお願いいたします。

  • Excelマクロ が重いときと重くないときがある

    ボタンをクリックすると、 1、新しいブックを作成して、 2、ボタンのあるブック(元ブック)のデータの必要なものだけをコピペして、 3、オフセットを使用して、一定間隔で罫線を引く。 というマクロが組んであります。 その、元ブックのみが開いているときは瞬間で終わる処理が、 別ブックが開いていると、処理がとても遅くなります。 しかもその別ブックというのが、 特に元ブックとは関係のないもので、 マクロも組んでないものなんです。 また、その別ブック以外のブックは、 開いていても問題なく、早く処理してくれるのですが、 その別ブックが開いているときだけ処理が遅くなります。 マクロを実行しているファイルとまったく関係のないブックでも 開いていると、マクロの実行速度が遅くなることがあるのでしょうか。 ご存知のかた、みえましたら、 ご教授願います。

  • SQLサーバーのデータをマクロで読み込むにはどうしたら?

    いつもお世話になってます。 マクロを使って、データベースの特定のテーブルの内容をすべてエクセルへコピーさせたいのですが、 その場合どのようなコーディングにすればいいのでしょうか? 質問ばかりで申し訳ありませんが、アドバイスをお願いします。 SQLはMicrosoft SQLServer2005を使用しています。

  • 一定時間ごとにカウントアップする方法

    お世話になります。 PHPにて、簡単なミニゲームを作ろうと思っています。 時間の経過ごとに、経験値が加算されたり、減ってしまった体力が 回復したりさせたいのですが、この『一定時間ごとに処理を行う方法』を 教えていただきたいのです。 もちろん、これはオフラインのときも行われている処理になります。 ひょっとすると、これはPHPではなく、データベース側の問題かも しれませんので、その時はデータベースの方法を教えていただきたいと 思います。 初心者で申し訳ありません。 何卒よろしくお願いいたします。

    • 締切済み
    • PHP
  • Accessのマクロ。

    Access(テーブル クエリーのみ フォーム、レポートは持ってません) のデータベース(入力は別ソフトから行っています)で、 テーブルの内容が更新時にテキストファイルを書き出すようにしたく、 マクロを使ってどうにかならないか考えているのですが、 「条件」がうまくつけられません。別にマクロでなくAccessVBAでも いいのですが・・・・。 ご存知でしたら是非お教えください。

  • エクセルマクロ 空白行の削除ですが、コピー時の問題

    いつもお世話になっております。 エクセルのマクロですが、指定したシートの指定した行にデータが 入っていない場合に削除するマクロなんですが、行くつか試してみ ましたが、削除したものをコピーして張り付けると、削除された行も コピーされてしまいます。完全に削除するにはどのようにしたらよい のでしょうか。 空白行のあるデータを、空白を無くしてデータベースにコピーする 作業を行いたいのですが、他によい方法はありますでしょうか。 よろしくお願いします。

  • エクセル2007で複数ファイル間コピーマクロ

    エクセルでマクロを組もうとしていますが、初歩的なことでつまづいており、ぜひ助けを頂けたらと思います。 VBA言語はほとんどわかりませんが、エクセルでマクロを組んでいます。 一つのワークブック内での登録は問題なく行えるのですが、ワークブック間のコピペをマクロに登録するとうまくいかず困っています。 やりたいことは以下のようなことです。 file.Aのsheet1のA1セル ⇒ file.AAのsheet1のA1セル へコピー file.Bのsheet1のA1セル ⇒ file.BBのsheet1のA1セル へコピー     ・     ・     ・     ・ file.Zのsheet1のA1セル ⇒ file.ZZのsheet1のA1セル へコピー VBAを確認すると、ワークブック名が指定されているため、うまく次のファイルに移行できずにいるようです。 以下が黄色でハイライトされます。 Windows("file.A").Activate 初歩的なことだとは思うのですが、なかなか検索で答えが引っ張りだせないので、A-Zのファイルをコピペできるマクロにするにはどのようにしたら可能なのか教えてください。 よろしくお願いします。

  • Excel2010でマクロが止まる

    Excel2003で作成したマクロがExcel2010で使えません。 内容は任意のフォルダ内にある同じフォーマットの複数のファイルを1ファイルづつ開いては別の1つのファイルのシート毎にコピーしていくマクロなんですが、21個目のファイルを開こうとした際にループが止まってしまいます。 どなたか解決方法をご存知でしたらご教授願います。

  • エクセルのマクロと関数について

    お世話になります。 1)マクロの方法で以下のようにしたいのですが可能でしょうか? 1行目にオートフィルタがかかっていればAAの処理をし、もしオートフィルタがかかっていないのであればBBの処理をしなさい。 というようなマクロです。if~then~else をつかってすると思うのですが、どうもうまくいきません。 2)関数もしくは式を使って以下のようにしたいのですが可能でしょうか?(ほかに方法があるのであれば関数、式にこだわりません) エクセルのデータベース(A1:E100のデータとし、A1:E1は項目が入っており、A1:E1にオートフィルタをかける)からオートフィルタをかけて項目を絞るのですが、出てきた結果の1番上、つまりA2:E2にあるB2とD2の結果を別のシートにある結果欄それぞれ2箇所にコピーする。多分別シートにある結果欄に何らかの関数とか式を入れればいいのかなと思いますが・・・ ちなみに上記2つの質問は関連性はありません。 わかりにくい質問で申し訳ありませんが、必要ならば補足いたします。 かなり困ってますのでよろしくお願いします。

専門家に質問してみよう