エクセルでは動くのですがアクセスで
Application.Wait (Now + TimeValue("00:00:01"))
を実行すると
「Wait」メソッドまたはデータ メンバが見つかりません。 (Error 461)
となってしまいます。
「Wait」にかわる何かがあるのでしょうか?
宜しくお願い致します。

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

A 回答 (1件)

time関数またはtimer関数をループの中で使い、


必要な秒数だけ待機させることができます。

Windows APIのSleepでもできると思います。
    • good
    • 0
この回答へのお礼

わかりました。調べてみます。ありがとうございます。

お礼日時:2009/05/23 21:09

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

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

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

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

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

QエクセルVBAでファイルを連続して処理する方法は

エクセルVBAで、エクセルファイルを開いた状態で特定処理を行う仕組みを作りました。
ただ、複数のファイルを処理したいのですが、いちいちファイルを開いてから処理しなければならないため効率が今ひとつです。
ファイル名称をテーブル化するなどして、一気に連続して処理するようにしたいのですが、どのように行えばいいでしょうか。

また、処理したいのは、更新日付が一定日以降のエクセルファイルです。
更新日付と対象ファイルのフォルダーを指定すれば、更新日がそれ以降のファイルを検索し、それが順次処理されていくようなVBAをつくりたいと考えています。

部分的にでもよいので、どなたか分かる方、教えてください。
ちなみにエクセルのバージョンは2000です。
よろしくお願いします。

Aベストアンサー

> 選択フォルダのサブフォルダをのものも含むようにはできないでしょうか。

再帰処理すればできますよ。

Microsoft Scripting Runtime を参照してから、次のコードを試してみて
下さい。
取り急ぎで書いたので、エラーがあるかもしれませんが。。。

まあ、環境によっては使えませんし、推奨はできないのですが、FileSearch
を使ってもサブフォルダを含めた検索はできます。調べればサンプルはすぐ
でてくると思いますよ。

ご参考までに。

Private mDateFilter As Date

Sub フォルダ内のXLSファイル順次処理()

  Dim fso As FileSystemObject
  Dim sDir As String
  
  ' // 日付のフィルタ条件設定 例)10日前の 0:00 以降更新のファイルを対象とする場合
  mDateFilter = DateAdd("d", -10, Date) + TimeValue("00:00:00")

  ' // 対象ファイルのあるフォルダを指定
  sDir = BrowseForFolder()
  If Len(sDir) = 0 Then
    Exit Sub
  End If

  Set fso = CreateObject("Scripting.FileSystemObject")
  
  Dim fld As Folder
  Dim iRes As Integer
  
  If fso.FolderExists(sDir) Then
    Set fld = fso.GetFolder(sDir)
    iRes = 0
    If fld.SubFolders.Count > 0 Then
      iRes = MsgBox("サブフォルダも検索しますか?", _
             vbYesNoCancel Or vbInformation)
    End If
    Select Case iRes
      Case vbYes:  Call FindFiles(fld, True)
      Case vbNo, 0: Call FindFiles(fld, False)
      Case Else:  ' // User Cancel
    End Select
  End If
  
  Set fld = Nothing
  Set fso = Nothing


End Sub

' // XLS ファイルを検索するサブプロシージャ
Private Sub FindFiles( _
  ByRef fld As Folder, _
  ByVal fCheckSubfolders As Boolean _
)

  ' // ファイルへの処理
  Dim f   As Object
  For Each f In fld.Files
    If f.Name Like "*.xls" And f.Name <> ThisWorkbook.Name Then
      If f.DateLastModified >= mDateFilter Then
        ' // 処理例
        Call MainProc(f)
      End If
    End If
  Next

  ' // サブフォルダ検索オプション
  Dim subFolder As folder
  If fCheckSubfolders Then
    ' // 再帰呼び出し
    For Each subFolder In fld.SubFolders
      Call FindFiles(subFolder, True)
    Next
  End If

End Sub

' // メイン処理 -- FindFiles から順次呼び出されます
Sub MainProc(ByRef f As file)

  ' // ここにご自分で書いたプロシージャを
  ' // とりあえず、セルにでも書き出してみます
  Dim i As Long
  i = Cells(Rows.Count, "A").End(xlUp).Row + 1
  Cells(i, "A").Value = f.Name
  Cells(i, "B").Value = f.DateLastModified

End Sub

' // フォルダ選択ダイアログ
Private Function BrowseForFolder() As String

  Const BIF_RETURNONLYFSDIRS = &H1

  Dim fld As Object
  Set fld = CreateObject("Shell.Application") _
       .BrowseForFolder(0&, "選択します", BIF_RETURNONLYFSDIRS)
  If Not fld Is Nothing Then
    BrowseForFolder = fld.Self.Path
  End If
  Set fld = Nothing

End Function

> 選択フォルダのサブフォルダをのものも含むようにはできないでしょうか。

再帰処理すればできますよ。

Microsoft Scripting Runtime を参照してから、次のコードを試してみて
下さい。
取り急ぎで書いたので、エラーがあるかもしれませんが。。。

まあ、環境によっては使えませんし、推奨はできないのですが、FileSearch
を使ってもサブフォルダを含めた検索はできます。調べればサンプルはすぐ
でてくると思いますよ。

ご参考までに。

Private mDateFilter As Date

Sub フォルダ内のXLS...続きを読む

Q(アクセス)「1:00:00」を「60」もしくは「1:00」と表示させたい

アクセスのクエリなのですが
デザインビューでフィールドに
「時間: CDate(0.041672)」と入力して
データシートビューで見ると
「1:00:00」(1時間)と表示されます。
これを
「60」もしくは「1:00」と表示するにはどうすればいいでしょう?

Aベストアンサー

フィールドプロパティの「書式」に
「h:nn」 でいかが?

QエクセルVBA 2千万行のCSVファイルを開きたい

上から順に読み込み、順次処理していき最終的には全部処理します。CSVファイルは読むだけです。

やり方はいくつか考えられます。
1
100万行ずつシートに読み込み、終わったら次を読み込む。CSVファイルは開きっぱなし。

2
100万行ずつのエクセルファイルに分割し、順次開いて処理。ファイル開閉に時間がかかる

3
2千万行の巨大な配列に代入し、順次処理。
CSVファイルは閉じることが出来る。

3がいいように思えますが、どうでしょうか?使用メモリは1と同じですか?

Aベストアンサー

> 懸念点は、最初から最後まで巨大なCSVファイルを開いたまま処理することです。

それに関しては問題ないです。VBAのOpenでファイルを開いた場合、実は一切読んでいません。今何行目を読んでいるかを示すカウンタを用意するだけです。またLine Inputで読み込む場合も、今操作している一行しか相手にしません。

だからこそ、実装している物理メモリ量をはるかに超えるサイズのファイルを扱っていても、仮想メモリのお世話にならずに済むわけです。

なので懸念材料はそこではなく、分割処理することによってデータ同士の断絶が起きると言うか、連続性がなくなることでしょうか。最初の100万行の固まりと、次の100万個の固まりには全くつながりがないことになるので。

QExelで時間計算した合計時間の33:02:00を33時間02分00秒と表示したいのですが。

困っています。
Exel使用し労働時間管理を行っていますが、計算自体は問題なく、この計算結果を○○時間○○分○○秒と表示したいのですが、ご教授をお願いします。
例えば、計算結果が223:00:02となった場合、
これを223時間00分02秒と給与明細に表示(印刷)したいのです。
秒については、表示する必要はありませんがどちらも構いません。
よろしくお願いします。

Aベストアンサー

セルの書式設定→表示形式→ユーザ定義で[h]"時"mm"分"ss"秒"を設定は如何でしょうか。

QVBAからファイルをセル入力から開く方法

VBAからファイルをセル入力から開く方法

だれかご教授頂けませんでしょうか?VBAからエクセルファイルを開こうとしています。
そこでシート1のA1セルにファイル名を記述してあり、そのファイル名からファイルを開く事は出来ますでしょうか?
何か良い方法がありましたら教えて頂きたいのですが。

Aベストアンサー

下記で試してください。
パス名の最後には\を付けるようにしてください。

Workbooks.Open "D:\ABC\" & Sheets("シート1").Range("A1").Value


ワークシートのイベントを使う方法も考えられると思います。
BeforeDoubleClickイベント辺りを使って
ファイル名セルをダブルクリックすれば

Excel(エクセル) VBA入門:ワークシートのイベント
http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_event.html

Q=if(iserror(a1/timevalue("1:00"))) 何が間違ってますか?

すみません、教えてください。
仕事を87:10時間かけて終わらせました。
その処理件数は全部で350210件です。
1時間あたりの処理数を求めたいのです。
a1には総件数が入っています。350210件です。
b1には掛かった時間の87:10
c1に1時間あたりの処理数を出したいのです。
それで
=if(iserror(a1/timevalue("1:00")))
こんな式をたててみましたがエラーでした(^^;;
どこに?時間を入れていいのか????
この式を使う方法で(ただの割り算じゃなく)うまくいくには何が足りないか教えてください。

エクセル2000です。
よろしくお願いしますm(_ _)m

Aベストアンサー

B1の時刻データの表示形式が何かですね
どちらも一応、検証済みです。

●時刻の場合【87:10:00と表示されているはず】
TIMEVALUEではシリアル値が取り出せない
そのまま24を掛ければOK
C1の表示形式が数値であること。

=A1/(B1*24)で出ます。
No.1回答者さんの方法です。
標準形式だとダメでした。
計算結果で小数点以下が必要なら、桁上げボタン押して対応して下さい。

●文字列の場合【87:10と表示】
TIMEVALUEでシリアル値は取り出せるが、24時間以上の分は無視される。(日数は考慮されず時間のみ)

で、ちょっと試してみました。
B1の所要時間は文字列とします。
C1の表示形式は数値を選択してください。

C1に次の式を入れてください
=A1/(VALUE(DATEVALUE(B1)+TIMEVALUE(B1))*24)

こちらは、あまり実用的でないかな・・・
何書いてるんだか、自分でも分からなくなってきましたが
伝わりましたかね

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

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

Aベストアンサー

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

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

QAccess2002_メソッドまたはデータメンバが見つかりません

社員情報を入力・変更していくためのフォームがあります。
そのフォームが立ち上がる際
 ・新規入力画面を表示させる
 ・フォーカスを[データ入力更新日]テキストボックスに合わせておく
という操作をさせたく下記のようなコードを書きました。

Private Sub Form_Open(Cancel As Integer)
 DoCmd.GoToRecord Record:=acNewRec
 Me.txt_データ入力更新日.SetFocus
End Sub

フォームを立ち上げようとすると「.txt_データ入力更新日」が反転されタイトルで書いたエラーメッセージが表示されます。
試しに他のテキストボックスにフォーカスがいくよう変更してみるとエラーは起こらず
指定したテキストボックスにフォーカスが置かれてフォームが開きました。
[txt_データ入力更新日]の名前はプロパティからコピペしているので間違っておりません。
名前が違っている以外にどんなことが考えられるでしょうか?
よろしくお願い致します。


テキストボックスの名前は間違いありません。

社員情報を入力・変更していくためのフォームがあります。
そのフォームが立ち上がる際
 ・新規入力画面を表示させる
 ・フォーカスを[データ入力更新日]テキストボックスに合わせておく
という操作をさせたく下記のようなコードを書きました。

Private Sub Form_Open(Cancel As Integer)
 DoCmd.GoToRecord Record:=acNewRec
 Me.txt_データ入力更新日.SetFocus
End Sub

フォームを立ち上げようとすると「.txt_データ入力更新日」が反転されタイトルで書いたエラーメッセージが表示されます...続きを読む

Aベストアンサー

> 名前が違っている以外にどんなことが考えられるでしょうか?

・・・すみません、どうしても名前ではないかと思えてしまいます(汗)

とりあえず、「名前の間違いかそうでないか」を確実に切り分けるために、
以下のコード変更を行った上で、エラーメッセージを再確認してみて下さい。

<現在>
Me.txt_データ入力更新日.SetFocus
<修正>
Me.txt_データ入力更新日.SetFocus
※「Me」の後を「.(ピリオド)」から「!(エクスクラメーションマーク)」に変更

もしもこれで「実行時エラー'2465':指定した式で参照されている 'txt_データ
入力更新日' フィールドが見つかりません。」というエラーが返されれば
名前の間違い、それ以外なら別の理由、と切り分けできます。
(新たに表示されるエラー内容が、解決のヒントにもなると思います)

※この切り分けがすぐにできるように、コントロールの参照時は「!」を、
  プロパティなどの参照時は「.」を、と使い分けることをお勧めします。


なお、今回ご質問の件からすると余談になりますが、そのフォームで
既存のデータを表示する必要がないようでしたら、展開時に新規レコードに
移動するよりも、フォームのプロパティシートで、『データ』タブの『データ
入力用』を「はい」に設定した方が安全かと思いますので、ご参考まで。
(現状では、レコード移動ボタンやShiftキー+Tabキーなどで、既存レコードへの
 移動が可能になってしまっていると思いますので・・・)

> 名前が違っている以外にどんなことが考えられるでしょうか?

・・・すみません、どうしても名前ではないかと思えてしまいます(汗)

とりあえず、「名前の間違いかそうでないか」を確実に切り分けるために、
以下のコード変更を行った上で、エラーメッセージを再確認してみて下さい。

<現在>
Me.txt_データ入力更新日.SetFocus
<修正>
Me.txt_データ入力更新日.SetFocus
※「Me」の後を「.(ピリオド)」から「!(エクスクラメーションマーク)」に変更

もしもこれで「実行時エラー'2465':指定した式...続きを読む

Q他のExcelファイルのVBAコードを検索したい

他のExcelファイルに書かれたVBAコードに、ある特定のキーワード(パス名など)が使われているかを自動的に調べるためのVBAを書きたいと思っています。

仕事で使っているマクロが書かれたExcelファイルからある特定の処理をしているマクロを含むものを検索したいのですが、検索するExcelファイルが膨大なため、順番にExcelファイルを開いてVBAコードをチェックしていく工程をマクロ化したいのです。ファイルを順に開いていく処理はマクロ化できるのですが、書かれたVBAコードのチェックをどうしたらよいか悩んでいます。

「VBAコードに対して検索する」または「VBAコードを1行ずつ変数に代入する」、「モジュールシートをテキストファイルに出力する」などの処理が自動化できれば対応できそうなのですが、そのような処理をExcelVBAで作成できるでしょうか。

なお環境はWindowsXPのExcel2003です。
よろしくお願いいたします。

Aベストアンサー

開いたブックにあるVBAコードをテキストに出力する方法
Sub VBExport(WKB As Workbook)
  Dim A, B
  Set A = WKB.VBProject.VBComponents
  For Each B In A
    B.Export "C:\~" '★テキストファイルでエクスポート
    xxxxxx '★上記テキストファイルを調べる処理
  Next
End Sub
ブックやシートにあるコードも(空でも)出力されます。
もし、標準モジュールのみ処理したい場合は「B.Type = 1」に限り
エクスポートします。

Qエラー「メソッドまたはデータメンバが見つかりません」

「メソッドまたはデータメンバが見つかりません」というエラーが出ています。
windowsVISTAでACCESS2007を使っています。
windowsXPでACCESS2003でも同じエラーが出ます。

ソースは下記になります。

Dim OpenFileName As String
 OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls")
 MsgBox "ファイル名は" & OpenFileName & "です"
End Sub


「.GetOpenFilename」が反転して、エラーになります。
かれこれ2時間格闘してますが、全く原因がわかりません(T-T)
どうかよろしくお願いいたします。

Aベストアンサー

こんにちは。

ACCESS VBAなんですよね?

ACCESS VBAにGetOpenFilenameメソッドってありましたか?

>「.GetOpenFilename」が反転して、エラーになります。
ということなので、多分そうだと思います。
以下のようにしてみてはどうでしょう。

Sub Test()
Dim OpenFileName As String
Dim xlApp As Object
Set xlApp = CreateObject("Excel.Application")
OpenFileName = xlApp.GetOpenFilename("Microsoft Excelブック,*.xls")
MsgBox "ファイル名は" & OpenFileName & "です"
Set xlApp = Nothing
End Sub

No.1さんのリンク先にある参照設定をしないで、エクセルのメソッドを使ってるだけなんですけどね。


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

人気Q&Aランキング