12万作品が月額500円(税別)で見放題なのはdTVだけ!! >>dTV(外部リンク)

VBで初歩的な質問です。

「Application.Wait」を使いたいのですが、
「変数がていぎされていません」
コンパイルエラーになってしまいます。

調べてみたら、参照設定を追加するようなのですが、
どれなのかわかりません。
ご存知のかた教えてください。

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

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

A 回答 (1件)

「Application.Wait」メソッドはエクセルのものだったはずです。

    • good
    • 0
この回答へのお礼

Micrsoft Excel 11.0 Object Library を設定したら
無事にコンパイルとおりました。

ありがとうございました。

お礼日時:2010/02/19 17:18

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

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

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

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

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

QEXCEL VBAでApplication.waitを使わずに一時停止させたい

マクロの実行中に、その処理を、条件分岐によってある一定時間だけ止めて、また再開させるようなプログラムを作りたいと考えています。
Application.Waitを使えば、可能というとこまではわかったのですが、それだとマクロ停止中にEXCEL上での一切の操作(たとえばスクロール)ができなくなるので、マクロだけ停止させておいて、他の操作はできるようなやり方はありませんでしょうか?
ちなみに、当方の使用OSはXP、EXCELは2007です。VBAは、はじめて取り組む超初心者で、以下のコードもネットやこちらのサイトを探しまくって、ようやくここまでできました。
なお、本マクロで具体的にやりたいことは、楽天証券のRSSというアプリケーションから、EXCELの特定の列に、1行目から順番に、リアルタイムで株価が書き込まれていきます。その株価を監視して、ある一定以上になったら、音で知らせるということをやりたいのです。その際、株価が書き込まれていく間隔は、数秒~数分です。
長々と書きましたが、ご教授いただけると助かります。
<参考:現在のマクロ>
Sub Test()
Dim waitTime As Variant
Dim 繰り返し As Long
For 繰り返し = 1 To 10
If Cells(繰り返し, 1).Value >= 10000 Then
Shell "mplay32.exe /play /close C:\WINDOWS\Media\notify.wav"
ElseIf Cells(繰り返し, 1).Value = Empty Then
waitTime = Now + TimeValue("0:00:05")
Application.Wait waitTime
End If
Next 繰り返し
End Sub

マクロの実行中に、その処理を、条件分岐によってある一定時間だけ止めて、また再開させるようなプログラムを作りたいと考えています。
Application.Waitを使えば、可能というとこまではわかったのですが、それだとマクロ停止中にEXCEL上での一切の操作(たとえばスクロール)ができなくなるので、マクロだけ停止させておいて、他の操作はできるようなやり方はありませんでしょうか?
ちなみに、当方の使用OSはXP、EXCELは2007です。VBAは、はじめて取り組む超初心者で、以下のコードもネットやこちらのサイトを...続きを読む

Aベストアンサー

こんばんは。

Microsoft のサポートには、そのものズバリの内容がありますが、少し古い内容です。実際、以下のプロパティで、楽天RSSの前バージョン(約2年前)では私は成功していますが、現行ツールでは知りません。RSSは、バージョンがあがりました。

http://support.microsoft.com/support/excel/content/onevent/onevent.asp?SD=gn&LN=ja&gssnb=1#ondata

それから、外部ツールを使って、音を鳴らすのはあまり賛成しません。一応、書いておきますが、本来は、内部コマンドのBeep やパターンの色付けでよいと思います。

1番目の場合は、最初に、Auto_Open を実行してください。一旦、ファイルを閉じて、再び開いても自動的に設定されています。

なお、Microsoft サポートの注にも書かれていますが、DDEやOLEではない場合に、ハンドラーが取れないこともあります。その場合は、OnEntry や Change イベントを使用してください、と書かれています。つまり、1番のマクロは、データがインポートされたときにのみ、起動するマクロです。ともかく、最初のマクロだけでも試してみてください。まだ、そういう古い方式が可能なのか、こちらでも知りたいのです。

-----------------------------------------
'標準モジュール
'Option Explicit

Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" _
(ByVal lpstrCommand As String, ByVal lpstrReturnString As String, _
ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long

'一旦、閉じて開くか、最初に実行してください。
Sub Auto_Open()
 '実際のシート名を入れてください。
 Worksheets("Sheet1").OnData = "Test1"
End Sub

Sub Test1()
  Dim i As Long
  Dim rt As Long
  Static j As Long
  Const sSOUND As String = "C:\WINDOWS\Media\notify.wav"

  i = Cells(Rows.Count, 1).End(xlUp).Row
  If i <> j Then
    If Cells(i, 1).End(xlUp).Value > 10000 Then
      rt = mciSendString("Play " & sSOUND, "", 0, 0)
      'Beep 'ビープ
      'Cells(Rows.Count, 1).End(xlUp).Interior.ColorIndex = 34 '色づけ
    End If
  End If
  j = i
End Sub

-------------------------------------

OnTime メソッドを使う場合は、LastTime を数秒の間の設定をしたほうがよいです。LastTime を入れないと、待機状態の後に、立て続けに、マクロの起動をしてしまい意味のないものになってしまいます。また、行数が単にインクリースしても、そこにデータがなければ、意味のないチェックになってしまいますから、必ず、実際に存在するデータに連動していなければなりません。また、データが増えなければ、チェックはしません。

以下の場合は、ワークシートの作業中とマクロのデータチェックがぶつかった場合は、作業のほうが必ず優先しますが、その待機状態は、数秒間しかありません。その時に無視したデータは、次のマクロで必ずフォローするように出来ています。なお、色づけとBeep という方式になっていますから、色づけが嫌いなら、コメントブロック(')を入れてください。

一列の最後尾に、文字「Q(大文字・小文字共通)」を入れれば、それで終了します。

------------------------------------------
'標準モジュール
'Option Explicit

Sub TimerMacro()
  Dim i As Long '行
  Dim n As Long
  Dim myTime As Date
Static j As Long
  '----------------------------------
  'チェックする値を以下に入れてください。
  Const MYLIMIT As Long = 10000
  '----------------------------------
  i = Cells(Rows.Count, 1).End(xlUp).Row
  '終了は、Q を入れる
  If StrComp(Cells(i, 1).Value, "Q", 1) = 0 Then
   MsgBox "終了しました。", 64
   Exit Sub
  End If
  If i > j And j > 0 Then
    For n = j To i
      '上限を超える場合
      If Cells(n, 1).Value > MYLIMIT Then
        Cells(n, 1).Interior.ColorIndex = 34 '水色
        Beep '音
      End If
    Next n
  ElseIf j = 0 Then
       If Cells(i, 1).Value > MYLIMIT Then
        Cells(i, 1).Interior.ColorIndex = 34 '水色
        Beep '音
        End If
  End If
  j = i
  myTime = Now + TimeSerial(0, 0, 5) '5秒
  Application.OnTime myTime, "TimerMacro", myTime + TimeSerial(0, 0, 2) '待機2秒
End Sub
----------------------------------------

こんばんは。

Microsoft のサポートには、そのものズバリの内容がありますが、少し古い内容です。実際、以下のプロパティで、楽天RSSの前バージョン(約2年前)では私は成功していますが、現行ツールでは知りません。RSSは、バージョンがあがりました。

http://support.microsoft.com/support/excel/content/onevent/onevent.asp?SD=gn&LN=ja&gssnb=1#ondata

それから、外部ツールを使って、音を鳴らすのはあまり賛成しません。一応、書いておきますが、本来は、内部コマンドのBeep やパターンの色付けで...続きを読む

QVB上で実行中の無限ループの止め方

今まで、CUIベースのBASICでのプログラムの経験はあるのですが
Visual系のBASICは初心者です。
原因はわかっているのでプログラムの修正はできるのですが
VB上でコンパイルして実行したときに無限ループに陥ってしまって
どうにもプログラムをとめられなくなります。
そんなことがないように、実行前に全てのプロジェクトを保存して
いますので、そんなに実害はないのですが、どうすればとめられるのでしょう・・
今現在は、タスクマネージャーから強制終了させています。

Aベストアンサー

無限ループの一番内側に
DoEvents
を入れておくと、ウィンドウ切替え->デバッガ終了操作が出来ますよ

危なそうなとこにも入れておくと、何かと安心です。

QAccessのRefresh・Requery・Repaintの違い

Requeryはもう一度ソースレコード(テーブル)を読み込むようです。このとき、テーブルの先頭レコードに移動してしまいます。
Refreshは最新のレコード(テーブル)を再表示するような気がします。レコードの移動は起こらない気がします。
Repaintは、VBAでキャプションなどを変更したとき使っています。
でも、よくわかっていません。
どんなときにどんなメソッドを使えばいいのでしょうか?
詳しい方、よろしくお願いいたします。

Aベストアンサー

たびたびすみません。
調べてたらこんなのがでてきました。
http://www.nurs.or.jp/~ppoy/access/access/acF007.html

参考URL:http://www.nurs.or.jp/~ppoy/access/access/acF007.html

QVBA zipファイルの作成

(1)作業環境
Windows 7 Professional SP1
Intel(R) Core(TM) i3­3240 CPU @ 3.40GHz 4.00GB
32ビットオペレーティングシステム
Microsoft Office Standard 2010
Excel ver.14


(2)やりたいこと
3つのファイルのzipファイルを同じフォルダに作成したい
  C:\temp\a.txt
  C:\temp\b.txt
  C:\temp\c.txt
  から
  C:\temp\d.zip
  を作りたい。


(3)状況
下記サイトを参照しましたが知識不足で正確にわからないのと、『本当にこんなに長いコードが必要なのか?』と疑問に思っています。

 参考①VBAでZIP圧縮する。
 http://scripting.cocolog-nifty.com/blog/2007/11/vbazip_a144.html

 参考②ファイル/フォルダをzipファイルに圧縮
 http://qiita.com/kou_tana77/items/72346c69107fabf99335

定義、ループ、分岐など基本的なことは分かっています。
APIやFSOなども詳しくはないですが、知っています。
たとえば①の「fso.*******」、「Shell.*******」などの、*******が分かりません。


(4)質問事項
余計なものは除いて必要最低限のコードだけにするとどのようになるかしりたいです。
※エラー処理などに関しては使用環境にあわせて作成します。


ご存じの方ご教示くださいm(_ _)m

(1)作業環境
Windows 7 Professional SP1
Intel(R) Core(TM) i3­3240 CPU @ 3.40GHz 4.00GB
32ビットオペレーティングシステム
Microsoft Office Standard 2010
Excel ver.14


(2)やりたいこと
3つのファイルのzipファイルを同じフォルダに作成したい
  C:\temp\a.txt
  C:\temp\b.txt
  C:\temp\c.txt
  から
  C:\temp\d.zip
  を作りたい。


(3)状況
下記サイトを参照しましたが知識不足で正確にわからないのと、『本当にこんなに長いコードが必要なのか?』と疑問に思ってい...続きを読む

Aベストアンサー

こんな感じでしょうか?
・既に圧縮書庫ファイルが存在する場合は上書きされます。
・指定した被圧縮ファイルが存在しなかった場合はハングアップします。

-----------------------------
Sub MakeZip()
Dim sfo As Object, app As Object
Set sfo = CreateObject("Scripting.FileSystemObject")
Set app = CreateObject("Shell.Application")

Dim zipFolder As Object
Dim file As Variant
Dim count As Long

Const zipFile = "C:\excel\圧縮.zip" '圧縮書庫ファイルの絶対パス
Dim files As Variant
files = Array("C:\excel\あ.txt" _
, "C:\excel\い.txt" _
, "C:\excel\う.txt") ' 圧縮するファイルの絶対パス

'空のzipファイルを作成する
With sfo.CreateTextFile(zipFile, True)
.Write "PK" & Chr(5) & Chr(6) & String(18, 0)
.Close
End With
Set zipFolder = app.Namespace(sfo.GetAbsolutePathName(zipFile))

'zipファイルに圧縮対象のファイルをコピーする
count = 0
For Each file In files
count = count + 1
zipFolder.CopyHere (sfo.GetAbsolutePathName(CStr(file)))
'このファイルのコピーが終わるまで待つ。
Do Until zipFolder.Items().count = count
Application.Wait Now + TimeSerial(0, 0, 1)
Loop
Next
Set sfo = Nothing
Set app = Nothing
Set zipFolder = Nothing
End Sub

こんな感じでしょうか?
・既に圧縮書庫ファイルが存在する場合は上書きされます。
・指定した被圧縮ファイルが存在しなかった場合はハングアップします。

-----------------------------
Sub MakeZip()
Dim sfo As Object, app As Object
Set sfo = CreateObject("Scripting.FileSystemObject")
Set app = CreateObject("Shell.Application")

Dim zipFolder As Object
Dim file As Variant
Dim count As Long

Const zipFile = "C:\excel\圧縮.zip" '圧縮書庫ファイルの絶...続きを読む

QSub ***( ) と Private Sub ***( ) の違い

初歩的な質問で申し訳ありませんが・・・

自分でコードを書いていても、イベントが発生したりした時の処理で、コードのウィンドウで上のドロップダウンリストで選択できる時の処理などは自動的に[Private Sub Command1_Click( )]などと出てくるのでそのまま使っています。自分で別途プロシージャーを作成する時は[Sub ****( )]としています。
ですがその違いを理解しないまま、自分で作成する時は[Private Sub]ではなくて[Sub]を使っています。

Sub ***( ) と Private Sub ***( ) の違いは何なんでしょうか?
どなたか説明頂けませんか?
よろしくお願いします。

Aベストアンサー

「Sub」の部分にカーソルを置いて[F1]を押せばヘルプが起動します。
「指定項目」のところに「Public」と「Private」の説明がありますよ。
省略して「Sub hogehoge()」とした場合は「Public」とみなされます。

Publicは「すべてのモジュールから呼び出せるプロシージャ」ということになります。
Privateとすると「同じモジュールの中からしか呼び出せないプロシージャ」となります。

もしExcelをお持ちでしたらExcelのVBEで標準モジュールを追加し、「Sub Test1()」と「Private Sub Test2()」を作成してみてください。
そしてExcelの[ツール]-[マクロ]-[マクロ(Alt+F8)]でマクロ実行のダイアログを表示させてみるとわかります。
ここには実行できるプロシージャの一覧が表示されますが、Test1は表示されているけれどTest2は表示されません。
Test1はPublicで、Test2はPrivateだからです。

QEXCEL(VBA) セルをクリックしたときの処理

何度もお世話になります。

A5:A20のどれかをクリックしたときに
クリックしたセルが値が入力済みか確認してから
ファイルを名前を付けて保存したいのですが
クリックしたという情報(イベント?)の取得方法が
わかりません。

(1)どのようにチェックすればよいのでしょうか?
(2)また、皆さんはどのようにしてこのような問題を解決してるのでしょうか?

よろしくお願いします。

Aベストアンサー

Sheet1だとして、
Sheet1のマクロで

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'
If Target.Column = 1 And Target.Row >= 5 And Target.Row <= 20 Then
If Target.Value <> "" Then MsgBox "入力済み"
End If
'
End Sub

と入れると、クリックしたセルがA5からA20のどれかで
かつセルに値が入っているときのみ”入力済み”とメッセージが表示されます。
このメッセージ表示の部分を、「名前を付けて保存」の処理に置き換えてはいかがでしょうか。

QEXCEL VBAで全選択範囲の解除

EXCEL VBAで
Cells.Select
と書くと、全セルが選択状態になりますが、
これを解除するには、どう書けばよいのでしょうか?

Aベストアンサー

その1
A1 など、適当なセルを選択する。
(回答#1と同じ)

その2
全選択する前の選択範囲に戻る。

全選択前に
変数 = Selection.Address で記憶

全選択後
Range(変数).Select で元の選択範囲を選択

QExcel VBAで、ユーザーフォームの値を、モジュールで使用したい。

VBA初心者です。(おそらく)基本的な質問で、申し訳ありません。
ユーザーフォーム1には、テキストボックス1とコマンドボタン1が配置されているとします。

Sub TEST ()
Dim N
Userform1.Show
MsgBox N
End Sub

Private Sub CommandButton1_Click()
Dim N
N = TextBox1.Text
UserForm1.Hide
End Sub

Sub TESTを実行した時に、ユーザーフォーム1からNの値を引き継ぐには、どうしたら良いのでしょうか?よろしくお願いします。

Aベストアンサー

'モジュールに変数宣言(グローバル変数)
'Public 宣言すると他のモジュールやフォームと
'共有できる変数になります。
Public AA As String

'sample
'A1 を実行する。

Sub A1()
Call A2
AA = InputBox("input", , AA)
End Sub

Sub A2()
AA = InputBox("input", , AA)
End Sub

QAccessの画面更新を一時的に停止する方法。

こんにちは。
Accessの画面更新を一時的に停止する方法を捜しています。
ExcelのScreenUpdatingと同様な機能です。

VBAでの更新処理時に画面がチラチラと動くのを防止したいと思っています。
(Ver:Access2000)
ご存知の方宜しくお願い致します。

Aベストアンサー

Application.Echo False '画面の描画を止める

・・・処理を実行する・・・

Application.Echo True '画面の描画を行う

QEXCEL VBAで計算値を四捨五入、切り上げ、切捨てする方法

ネットで探してみたのですが、計算結果を四捨五入して特定のセルを
返すにはどうしたらいいのでしょうか?

Sub hokangosa()

Dim ZPS As Double
Dim ZPOS As Double
Dim DMN As Double
MsgBox (" >>> 補間誤差自動計算 <<< ")
MsgBox (" >>> 初期値入力します <<< ")
ZPS = InputBox(">>> ステップを入力してください<<<")
ZPOS = Sheet1.Cells(22, 4).Value
DMN = ZPOS / ZPS
Sheet1.Cells(23, 6).Value = DMN
End Sub

ここでDMNの値を四捨五入したいです。

またこれとは別に切上げ、切捨ても教えていただけるとありがたいです。

Aベストアンサー

DMN = Application.WorksheetFunction.Round(ZPOS / ZPS, 0)
で、四捨五入
DMN = Application.RoundDown(ZPOS / ZPS, 0)
で切り捨て
DMN = Application.RoundUp(ZPOS / ZPS, 0)
で切り上げです。

引数で、対象桁を変更できます。


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

人気Q&Aランキング

おすすめ情報