人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

EXCEL 2003 VBAで以下のように5分ごとに直線1を動くようにしていますが、そのシートにはテキストボックスが複数あり、このマクロを実行するとテキストボックスを選択して拡大とか出来なくなります。どうしたらいいのでしょうか?テキストボックスを選択できるようにしたいです。

Sub Bar()
Dim i As Integer
STOP_FLAG = False
Do
'待ちを入れるのと、Stopボタンを受け入れる
For i = 1 To 3000
Sleep (100) '[ms]
DoEvents
If STOP_FLAG Then
MsgBox "Time Bar 終了"
Exit Sub
End If
Next i
a = 9.75
ActiveSheet.Shapes("直線 1").Select
Selection.ShapeRange.IncrementLeft (a)
a = a + 2
Loop
End Sub

●質問者: shotomo
●カテゴリ:コンピュータ
✍キーワード:as BAR Excel EXIT LOOP
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● Committeeman
●20ポイント

SleepではなくOnTimeでマクロを呼び出すようにするのはどうか?

http://okwave.jp/qa/q2954013.html


2 ● Mook
●100ポイント ベストアンサー

マクロをずっと動かした状態だといろいろと制約がありますが、

OnTime メソッドを使用することで回避できる部分もあります。


標準モジュールに下記を書きます。

Public scheduleTime As String

Sub StartBar()
 If scheduleTime <> "" Then
 StopBarProc False
 End If
 MoveLine
End Sub
Sub StopBar()
 StopBarProc
End Sub

Sub StopBarProc(Optional msgMode As Boolean = True)
 If scheduleTime <> "" Then
 Application.OnTime TimeValue(scheduleTime), "MoveLine", , False
 scheduleTime = ""
 If msgMode = True Then
 MsgBox "Time Bar 終了"
 End If
 Else
 If msgMode = True Then
 MsgBox "Time Bar は動いていません"
 End If
 End If
End Sub

Sub MoveLine()
 Worksheets("Sheet1").Shapes("直線 1").IncrementLeft 9.75  '// シート名、オートシェープは個別に設定
 scheduleTime = Format(DateAdd("m", 5, Now()), "HH:MM:SS") '// 実行間隔の指定
 Application.OnTime TimeValue(scheduleTime), "MoveLine"
End Sub

ThisWorkbook モジュールに下記を書きます(終了時の後処理)。

Private Sub Workbook_BeforeClose(Cancel As Boolean)
 StopBar False
End Sub

全体の動作は、StartBar と StopBar で制御します。

http://officetanaka.net/excel/vba/tips/tips114.htm

◎質問者からの返答

動きました。On Timeメソッド覚えました。ありがとうございました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ