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

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2010/06/01 09:52:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:Mook No.2

回答回数1314ベストアンサー獲得回数393

ポイント100pt

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

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

id:shotomo

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

2010/06/01 09:51:13

その他の回答1件)

id:Committeeman No.1

回答回数153ベストアンサー獲得回数19

ポイント20pt

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

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

id:Mook No.2

回答回数1314ベストアンサー獲得回数393ここでベストアンサー

ポイント100pt

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

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

id:shotomo

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

2010/06/01 09:51:13
  • id:SALINGER
    そもそもマクロ実行中にデザインモードにするとマクロが中断します。
    それでデザインモードにしないでテキストボックスのサイズを変更するように、
    「標準」「2倍」「3倍」とかっていうボタンをワークシート上に作るとかなら可能です。
  • id:shotomo
    そうなのですか。やはりマクロをとめないと、テキストボックスを編集できないのですね。
    直線BARを時間代わりに動かしていたので、編集でとめるまたBARがずれるので、何かないかと思いました。
    ありがとうございました。
  • id:SALINGER
    テキストボックスをオートシェイプで作ればマクロ中に変更可能ではあるけどね。
  • id:Mook
    ThisWorkbook の内容が誤っていました。

      StopBar False

      StopBarProc False
    に変更してください。
  • id:SALINGER
    ちょっと違いました。
    オートシェイプのテキストボックスで可能なのは2007と2010でした。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません