[リストへもどる]
一括表示

投稿時間:2004/02/04(Wed) 16:39
投稿者名:sato
Eメール:
URL :
タイトル:
タイマーで
初歩的な質問かもしれませんが、タイマーで1から順番に表示される数字をExcelのセルに表示させようと以下のようなプログラムにしました。
Dim lngCounter As Long
Dim j As Integer
Dim X As Integer
Sub data()
Dim xlApp    As Excel.Application
    Dim xlBook   As Excel.Workbook
    Dim xlSheet As Excel.Worksheet

    Set xlApp = CreateObject("Excel.Application")
    Set xlBook = xlApp.Workbooks.Add
    Set xlSheet = xlBook.Worksheets.Add

       j = 9 + X
            xlSheet.Cells(j, 10) = lngCounter
            X = X + 1
    xlApp.Visible = True


    Set xlSheet = Nothing
    Set xlBook = Nothing
    Set xlApp = Nothing

End Sub

Private Sub Command1_Click()
If Timer1.Interval = 1000 Then
        Timer1.Interval = 0
    Else
        Label1.Caption = ""
        lngCounter = 0
        X = 0
        Timer1.Interval = 1000
    End If
End Sub

Private Sub Timer1_Timer()
lngCounter = lngCounter + 1
Label1.Caption = lngCounter
Call data
End Sub

が、これだと毎回別のExcelが開いてしまい、同じExcelのSheetに1,2,3・・・と表示されないのですが、どこを変えれば同じSheetに全ての値を表示させられるのでしょうか?初心者なのでどなたかわかる人教えて頂けないでしょうか?お願いします。

投稿時間:2004/02/04(Wed) 16:55
投稿者名:nobu
Eメール:
URL :
タイトル:
Re: タイマーで
適当な箇所で改行して下さい。

Sub data() の中で .Add したので次から次に
新しいExcelが開いてしまいます。


差し辺りは下記で如何でしょうか?

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

Option Explicit

Dim lngCounter As Long
Dim j As Integer
Dim X As Integer
Dim xlBook   As Excel.Workbook
Dim xlSheet As Excel.Worksheet
Dim xlApp    As Excel.Application
    
Private Sub Form_Load()
    
    Set xlApp = CreateObject("Excel.Application")
    Set xlBook = xlApp.Workbooks.Add
    Set xlSheet = xlBook.Worksheets.Add

End Sub

Private Sub Command2_Click()

'終了用

    Set xlSheet = Nothing
    Set xlBook = Nothing
    Set xlApp = Nothing

    Unload Me
    
End Sub

Sub data()

    j = 9 + X
    xlSheet.Cells(j, 10) = lngCounter
    X = X + 1
    xlApp.Visible = True

End Sub

Private Sub Command1_Click()
   If Timer1.Interval = 1000 Then
          Timer1.Interval = 0
   Else
        Label1.Caption = ""
        lngCounter = 0
        X = 0
        Timer1.Interval = 1000
    End If

End Sub

Private Sub Timer1_Timer()
      lngCounter = lngCounter + 1
      Label1.Caption = lngCounter
      Call data
End Sub

投稿時間:2004/02/04(Wed) 17:37
投稿者名:ak
Eメール:
URL :
タイトル:
タイマー無しで
タイマーを使う必要が無いような気がします。
という事でタイマー無しのサンプルを下記に記述しておきます。

'(*.frm)フォームにCommandButtonとLabelをそれぞれ1つ配置してください。
Option Explicit

Private pbRunFlg    As Boolean

Private Sub Form_Load()
    pbRunFlg = False
End Sub

Private Sub psbData()
    Dim xlApp   As Excel.Application
    Dim xlBook  As Excel.Workbook
    Dim xlSheet As Excel.Worksheet
    Dim iRow    As Integer
    Dim iCnt    As Integer
    Dim tm
    
    pbRunFlg = True
    
    Set xlApp = CreateObject("Excel.Application")
    Set xlBook = xlApp.Workbooks.Add
    Set xlSheet = xlBook.Worksheets.Add
    xlApp.Visible = True
    
    Do
        DoEvents
        iCnt = iCnt + 1
        iRow = 9 + iCnt
        xlSheet.Cells(iRow, 10) = iCnt
        Label1.Caption = iCnt
        Call psbWait(1000)
        
        If iCnt = 32767 Or Not pbRunFlg Then Exit Do
        
        tm = Timer
    
        Do While Not tm + 1 <= Timer    '1秒間処理を止める
            DoEvents
        Loop
    Loop
    
    Set xlSheet = Nothing
    Set xlBook = Nothing
    Set xlApp = Nothing
    
End Sub

Private Sub Command1_Click()
    If pbRunFlg Then
        pbRunFlg = False
    Else
        Call psbData
    End If
End Sub

投稿時間:2004/02/04(Wed) 23:32
投稿者名:sato
Eメール:
URL :
タイトル:
Re: タイマーで
段落がバラバラなのを忘れてました。すみません。
なるほど、Sub data()の中にaddがあったからですね。
終了用まで加えて頂き、助かりました。nobuさんありがとうございました。
実行の周期を短くする事がどうしても必要だったためにタイマーを使用したの
ですが、タイマー無しで出来る事もわかって勉強になりました。akさん、ありがとうございます!