我定义了个Text,只能输入小于65535的数,大于65535的改为什么啊?
If Dir("15.txt") <> "" Then
        Dim Temp15 As String
        Open App.Path & "\15.txt" For Input As #15
        Line Input #15, Temp15
        Text12.Text = Temp15
        Close #15
End If

解决方案 »

  1.   

    问题不在于Text 应该在你的某个Integer变量
      

  2.   

    string的  大于65535 没有关系呀
      

  3.   

    我也是觉得string的  大于65535 没有问题,程序里也没有与这个有关的Integer变量。
      

  4.   

    还是没有找到Integer变量 ,下面这几句是写入保存值:
    If Dir("15.txt") <> "" Then 
            Dim Temp15 As String 
            Open App.Path & "\15.txt" For Input As #15 
            Line Input #15, Temp15 
            Text12.Text = Temp15 
            Close #15 
    End If下面这几句是读入,差不多                
    If Dir("15.txt") <> "" Then
            Dim Temp15 As String
            Open App.Path & "\15.txt" For Input As #15
            Line Input #15, Temp15
            Close #15
    End If
            Timer3.Interval = Temp15 * 1000   '运用Temp15,即Text12的值。
      

  5.   

    Timer3.Interval = Temp15 * 1000  这个不允许
      

  6.   

    vb系统中提供了固有计时器timer控件,通过给计时器控件的interval属性设置不同的数值,就可以控制计时器运行的时间间隔,但该属性是一个双字节的整型变量,最大值只能设置为65535,即只有65535毫秒,约一分钟多一点,在需要长时间计时时,该控件就无能为力了
      

  7.   

    LZ是想定比较长的时间是吧,可以让timer每1000毫秒触发一次,然后在每次timer事件中进行一次计数判断
    Option ExplicitPrivate TimerCount As Long '计数变量Private Sub Command1_Click()
        '测试用例
        TimerCount = 120 '计时2分钟
        Timer1.Enabled = True '开始计时
    End SubPrivate Sub Form_Load()
        Timer1.Enabled = False '初始状态下禁用timer
        Timer1.Interval = 1000 '每1秒计数一次
    End SubPrivate Sub Timer1_Timer()
        TimerCount = TimerCount - 1 '每秒计数变量-1
        Debug.Print "还剩" & TimerCount & "秒"
        If TimerCount <= 0 Then
            MsgBox "时间到了"
            Timer1.Enabled = False '停止计时
        End If
    End Sub
      

  8.   

    timer控件,最大间隔时间65535毫秒,也就是一分钟多一点,没办法输入更大值。
    想timer控件大于65秒后去执行你的任务可向下面这样做:
    Option Explicit
    Dim dtNextTime As Date
    Const N As Integer = 5 '五分钟执行一次任务(自己改值)Private Sub Form_Load()
       Timer1.Interval = 500 '............半秒一查定时器
       dtNextTime = DateAdd("n", N, Now) '当前时间加N分钟后执行第一次任务
                                              '"n"改成"s"可以N秒后执行一次任务
                                              '"n"改成"d"可以N天后执行一次任务
    End SubPrivate Sub Timer1_Timer()
    '根据dtNextTime值(N分钟触发一次定时器1的发送任务)
        
        If Now >= dtNextTime Then
            Timer1.Enabled = False
            Debug.Print "时间到了,我执行任务" '你的命令在这
            dtNextTime = DateAdd("n", N, Now)
            Timer1.Enabled = True
        End If
    End Sub
      

  9.   

    LS各位真是高手 一眼能看出来 我真还不知道是timer控件的问题 就说大于1分钟多点不知道出错原因 我下午来试试看看 先谢各位了 下午出结果 thanks!
      

  10.   

    如果要用text来控制,可以这样做Private lngNum As Long
    Private lngMod As LongPrivate Sub Command1_Click()
        If Val(Text1) > 65535 Then
            lngNum = Val(Text1) \ 60000
            lngMod = Val(Text1) Mod 60000
            Timer1.Interval = 60000
            Timer1.Tag = "1"
        Else
            Timer1.Interval = Val(Text1)
            Timer1.Tag = "0"
        End If
        
        Timer1.Enabled = True
        
    End SubPrivate Sub Form_Load()
        Timer1.Enabled = False
        lngNum = 0
        lngMod = 0
        
    End SubPrivate Sub Timer1_Timer()
        Static lngRun As Long
        
        lngRun = lngRun + 1
        
        If lngRun = lngNum Or lngNum = 0 Then
            If lngMod > 0 Then
                Timer1.Interval = lngMod
                lngMod = 0
            Else
                lngRun = 0
                Call Command1_Click
                
                '……你要在timer中运行的代码
            End If
        End If    
    End Sub
      

  11.   

    修改一下Private lngNum As Long
    Private lngMod As LongPrivate Sub Command1_Click()
        Timer1.Enabled = True
        
        If Val(Text1) > 65535 Then
            lngNum = Val(Text1) \ 60000
            lngMod = Val(Text1) Mod 60000
            Timer1.Interval = 60000
        Else
            Timer1.Interval = Val(Text1)
        End If
        
        Timer1.Enabled = True
        
    End SubPrivate Sub Form_Load()
        Timer1.Enabled = False
        lngNum = 0
        lngMod = 0
        
    End SubPrivate Sub Timer1_Timer()
        Static lngRun As Long
        
        lngRun = lngRun + 1
        
        If lngRun = lngNum Or lngNum = 0 Then
            If lngMod > 0 Then
                Timer1.Interval = lngMod
                lngMod = 0
            Else
                lngRun = 0
                Call Command1_Click
                
                '……你要在timer中运行的代码
            End If
        End If
        
    End Sub
      

  12.   

    为何jhone99始终最大计时就是60s?
      

  13.   

    呵呵,用我的呗。以秒为单位,并且是long的取值范围
      

  14.   

    我用chewinggum兄的还没有出来结果 用jhone99就是时间过不了60s
        If Val(Text1) > 65535 Then
            lngNum = Val(Text1) \ 60000
            lngMod = Val(Text1) Mod 60000
            Timer1.Interval = 60000
        Else
            Timer1.Interval = Val(Text1)
        End If
    这句我觉得有点问题 大于65535的数是不会再报错了 但是只是执行了Timer1.Interval = 60000,比如120s,也就执行60s就结束了,没有真正到120s。
      

  15.   

    准确的说,我们只能猜测楼主的意思,我不太明白你问得问题。能说的更清楚些吗?
    有一点必须告诉楼主,Timer的时间间隔最大是65535ms,也就是65.5秒左右,你的Timer3.Interval = Temp15 * 1000  这句代码可能会带来错误
      

  16.   

    我就是想让time执行text1里设定的时间 现在我的问题是只能设定65535ms,即65.535s,想让time执行text1里大于这个数值的时间
      

  17.   


    timer 最大不可能超过65535,就要求你变换思路
      

  18.   

    用chewinggum的是那样的问题 :
    Private Sub Form_Load()
        Timer1.Enabled = False '初始状态下禁用timer
        Timer1.Interval = 1000 '每1秒计数一次
    End Sub这样我的Label控件显示状态会一秒开、一秒关,我是想在Timer1.Interval 大于65535ms期间 显示状态一直是开 到了时间 显示关
      

  19.   

    注意15楼这个  '……你要在timer中运行的代码这个程序是将你的时间(假如在text1中)分解,60s触发一次,如果有余,按余触发一次,这时才执行一次你的程序举例:306750 = 60000 * 5 + 6750先60s触发一次,触发5次,然后按6750触发一次,执行一次程序
    再 60s触发一次,触发5次,然后按6750触发一次,执行一次程序
      

  20.   

    Private Sub Command1_Click()
        Timer1.Enabled = True
    修改为Private Sub Command1_Click()
        Timer1.Enabled = false
      

  21.   


    这个问题好办,大致代码如下:
    Option Explicit
    Dim lngStartTime As Long
    Dim lngLen As Long
    Private Declare Function GetTickCount Lib "kernel32" () As LongPrivate Sub Command1_Click()
        lngLen = Val(Text1.Text)    '取得间隔毫秒数
        lngStartTime = GetTickCount
    End SubPrivate Sub Form_Load()
        Timer1.Enabled = True
        Timer1.Interval = 20
    End Sub
    Private Sub Timer1_Timer()
        If GetTickCount - lngStartTime >= lngLen Then
            lngStartTime = GetTickCount '记录新的起点
            '以下添加你的代码
        End If
    End Sub
      

  22.   

    这个的注意点就是当Text1的内容小于20时,不准确,这是你需要修改Timer1的Interval,不建议在间隔很小的情况下使用Timer控件,这样定时不准确
      

  23.   


    不理解你的意思,是说你想要用比较大的时间间隔反复的开关一个label的visible?
      

  24.   

    回chewinggum:不是反复的开关一个label的visible,我的Label就相当于是个显示工作状态的指示灯,红的对应关 绿色对应开(这个我的程序里没有问题),用您的就是一秒开、一秒关,我是想在这个timer时间间隔内一直工作,即绿色,您的是一秒红、一秒绿。
    同时我正在看jhone99和巫师的怎么样!谢谢您们几位热心解答!
      

  25.   

    哎,没有运行过我的代码吧我给你的示例代码运行以后的效果 是在点击按钮以后定时120秒显示“时间到了”这里的timer用1000毫秒定时,只不过是以1秒为单位计数。具体多长时间以后做什么事情由TimerCount变量决定。给你的示例里面在command click以后将改变量设定为120然后打开timer开始计时。并且我的代码里面时间一到timer也就关闭了。不会重复。要重复就重新设置TimerCount并把timer打开。为了让你好理解代码里面都加了注释了,为什么仅仅因为Timer1.Interval = 1000就认为是一秒开、一秒关呢?
      

  26.   

    重新表述下啊:
    text里输入时间值,比如想输入0-300s之间的任何个数值,即0-300000ms或者更大的值,在输入的某个时间值VB往下位机发送数据,到了时间就停止发送。
    chewinggum兄的“Timer1.Interval = 1000”我觉得有点问题,这样我就只执行1000ms,根本不运行“TimerCount = 120 '计时2分钟"Option ExplicitPrivate TimerCount As Long '计数变量Private Sub Command1_Click()
        '测试用例
        TimerCount = 120 '计时2分钟
        Timer1.Enabled = True '开始计时
    End SubPrivate Sub Form_Load()
        Timer1.Enabled = False '初始状态下禁用timer
        Timer1.Interval = 1000 '每1秒计数一次
    End SubPrivate Sub Timer1_Timer()
        TimerCount = TimerCount - 1 '每秒计数变量-1
        Debug.Print "还剩" & TimerCount & "秒"
        If TimerCount <= 0 Then
            MsgBox "时间到了"
            Timer1.Enabled = False '停止计时
        End If
    End Sub在看jhone99和巫师的怎么样
      

  27.   

    jhone99能运行大于65535ms的 但是就是不能停止 比如我运行2分钟 就不停止 一直在往下位机发数据 我是想运行2分钟Label变为红色,不再发送数据到下位机
      

  28.   

    巫师的
    Option Explicit
    Dim lngStartTime As Long
    Dim lngLen As Long
    Private Declare Function GetTickCount Lib "kernel32" () As LongPrivate Sub Command1_Click()
        lngLen = Val(Text1.Text)    '取得间隔毫秒数
        lngStartTime = GetTickCount
    End SubPrivate Sub Form_Load()
        Timer1.Enabled = false
        Timer1.Interval = 20
    End Sub
    Private Sub Timer1_Timer()
        If GetTickCount - lngStartTime >= lngLen Then
            lngStartTime = GetTickCount '记录新的起点
            '以下添加你的代码
        End If
    End Sub
    也是time1一直运行 不起作用
      

  29.   

    15楼是连续触发,如果只触发一次这样改
    Private lngNum As Long
    Private lngMod As LongPrivate Sub Command1_Click()
        Timer1.Enabled = False
        
        If Val(Text1) > 65535 Then
            lngNum = Val(Text1) \ 60000
            lngMod = Val(Text1) Mod 60000
            Timer1.Interval = 60000
        Else
            Timer1.Interval = Val(Text1)
        End If
        
        Timer1.Enabled = True
        
    End SubPrivate Sub Form_Load()
        Timer1.Enabled = False
        lngNum = 0
        lngMod = 0
        
    End SubPrivate Sub Timer1_Timer()
        Static lngRun As Long
        
        lngRun = lngRun + 1
        
        If lngRun = lngNum Or lngNum = 0 Then
            If lngMod > 0 Then
                Timer1.Interval = lngMod
                lngMod = 0
            Else
                'lngRun = 0
                'Call Command1_Click
                Timer1.Enabled = False'只是触发一次加这个            '……你要在timer中运行的代码
            End If
        End If
        
    End Sub
      

  30.   

    超长 Timer:Dim lTimerId As Long
    Private Declare Function SetTimer Lib "user32" (ByVal hWnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As LongPrivate Declare Function KillTimer Lib "user32" (ByVal hWnd As Long, ByVal nIDEvent As Long) As LongPrivate Sub TimerProc(ByVal lHwnd As Long, ByVal lMsg As Long, ByVal lTimerId As Long, ByVal lTime As Long)Dim lResult As Long
    lResult = StopTimer(lTimerId)
    Call InsertYourProcessNameHere
    'code to be executed after interval
    End SubPublic Sub StartTimer(lInterval As Long) 'convert interval to milliseconds prior to passing
    lTimerId = SetTimer(0, 0, lInterval, AddressOf TimerProc)
    End SubPublic Function StopTimer(lTimerId As Long) As Long
    'must pass the TimerId returned by SetTimer
    StopTimer = KillTimer(0, lTimerId)
    End Function'调用方式
    Call StartTimer(Val(Text1))
      

  31.   

    可替代VB自带的Timer控件的Timer类
    一劳永逸
      

  32.   

    哎,不解释了。
    有空你可以理解一下我在timer事件里面
    TimerCount = TimerCount - 1 的作用以及If TimerCount <= 0  判断的意图。
    没空的话就算了。
      

  33.   

    Option ExplicitPrivate m_CountDown As LongPrivate Sub Command1_Click()
        m_CountDown = CLng(Text1)
        Label1.Caption = TimeSerial(0, 0, m_CountDown)
        Label1.BackColor = vbGreen
        Timer1.Enabled = True
    End SubPrivate Sub Form_Load()
        Timer1.Enabled = False
        Timer1.Interval = 1000
    End SubPrivate Sub Timer1_Timer()
        m_CountDown = m_CountDown - 1
        Label1.Caption = TimeSerial(0, 0, m_CountDown)
        If m_CountDown <= 0 Then
            Label1.BackColor = vbRed
            Timer1.Enabled = False
        End If
    End Sub
      

  34.   


    Timer是一直在运行,但是里面有一个判断语句啊,你把你的代码添加到判断语句里面,我给你指出添加代码的地方了。