vb调试时碰到了怪事

lesleyc 2008-03-25 12:36:03
在程序后半部分有段复制文件的代码。当我在这段代码中设了一个断点,那么调试到底,执行结果就是我要的。但是如果不设断点,或者断点设在这部分代码之前,那这段语句似乎就没有被执行,这是怎么回事啊?
...全文
91 点赞 收藏 17
写回复
17 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
Shell strCmdFile

换成:

ShellEx strCmdFile,vbNormalFocus,2000 '延时两秒

要添加这个模块:

http://www.m5home.com/blog2/blogview.asp?logID=411&cateID=2
回复
lesleyc 2008-03-25
debug.print不太会用,我用msgbox,发现如果在这部分代码以及前部分代码中各插入一个msgbox,就可以正常运行下去,如果只放一个,msgbox也会跳出来,但是复制文件的代码依然没有执行。
回复
东方之珠 2008-03-25
很简单,条件没有满足,当然不能执行了。看看你设置的条件是否合理!
回复
yangao 2008-03-25
写几个Debug.Print调试下
看看经过哪里
回复
shakoe 2008-03-25

ModelFiles = Dir(strModelPath) 后面加个延迟

for i=1 to 50000
doevents
next i


回复
你可以在前面再加一个while

while dir(strModelPath)=""
doevents
wend

ModelFiles = Dir(strModelPath) '假设modelfile的结果为"",do while里面的代码就不执行了。
Do While ModelFiles <> ""
If fs.FileExists(DstFilePath & ModelFiles) Then
fs.DeleteFile DstFilePath & ModelFiles, True
End If
fs.CopyFile strModelPath & ModelFiles, DstFilePath
ModelFiles = Dir
Loop
回复
Tiger_Zhao 2008-03-25
Shell strCmdFile
Shell只是启动了一个外部命令,本身能很快返回。但是对应的外部命令执行是需要时间的,必须进行等待后才能有正确结果生成。
MsgBox 起了类似 Sleep 的作用。
回复
lesleyc 2008-03-25
[Quote=引用 12 楼 jennyvenus 的回复:]
VBScript code ModelFiles = Dir(strModelPath) '假设modelfile的结果为"",do while里面的代码就不执行了。
Do While ModelFiles <> ""
If fs.FileExists(DstFilePath & ModelFiles) Then
fs.DeleteFile DstFilePath & ModelFiles, True
End If
fs.CopyFile strModelPath & ModelFiles, DstFilePath
ModelFiles = Dir …
[/Quote]

是这样子的。但是实际上strModelPath下面是有文件的,而且如果我在该处设了断点,那么ModelFiles就不为空。
而如果我不设断点,在此处用debug.print输出modelfiles,那么输出的就是空的。
不知道怎么回事。
回复
        ModelFiles = Dir(strModelPath)            '假设modelfile的结果为"",do while里面的代码就不执行了。
Do While ModelFiles <> ""
If fs.FileExists(DstFilePath & ModelFiles) Then
fs.DeleteFile DstFilePath & ModelFiles, True
End If
fs.CopyFile strModelPath & ModelFiles, DstFilePath
ModelFiles = Dir
Loop
回复
lesleyc 2008-03-25
Set fso = New Scripting.FileSystemObject
Set fExport = fso.CreateTextFile(strCmdFile, True, False)
Set fso2 = New Scripting.FileSystemObject
Set fExport2 = fso2.CreateTextFile(strCFGFile, True, False)
'遍历导出的csv文件
CSVFiles = Dir(strCSVPath + "*.csv")
Do While CSVFiles <> ""
CSVFileName = Mid(CSVFiles, 1, Len(CSVFiles) - 4) '数据文件去掉后缀名
fExport.WriteLine "cfengine train -h" + strCSVPath + CSVFileName + ".csv -m" + strModelPath + CSVFileName + ".cf -p" + strRecItemPath + CSVFileName + ".txt" '往bat文件中写入训练模型的语句
fExport2.WriteLine "load " + CSVFileName + " " + strModelPath + CSVFileName + ".cf"
CSVFiles = Dir
Loop
fExport.Close
fExport2.Close
Set fExport = Nothing
Set fso = Nothing
Set fExport2 = Nothing
Set fso2 = Nothing
Shell strCmdFile

'MsgBox "part 1 finished"

''todo:将模型发送到各webserver上的strModelPath去,有文件夹则删除,无则创建。
FN = FreeFile
'MsgBox "part 2 started"
Set fs = New Scripting.FileSystemObject
Set fsExport = fs.CreateTextFile(strLoadFile, True, False)
Open App.Path & "\IP.txt" For Input As FN '遍历所有webserver的ip地址
'MsgBox "part 2 finished"
Do While Not EOF(FN)
Line Input #FN, WebServerIP
'cmdfile.txt为远程让webserver执行的指令文档,主要记录cfengine的路径。放在本机当前vb程序同样的路径下。
fsExport.WriteLine "type cmdfile.txt|cfcmd " & WebServerIP
DstFilePath = "\\" & WebServerIP & "\" & strWebServerModelPath
ModelFiles = Dir(strModelPath)
Do While ModelFiles <> ""
If fs.FileExists(DstFilePath & ModelFiles) Then
fs.DeleteFile DstFilePath & ModelFiles, True
End If
fs.CopyFile strModelPath & ModelFiles, DstFilePath
ModelFiles = Dir
Loop
Loop


If fs.FileExists(DstFilePath & "cfengine.cfg") Then
fs.DeleteFile DstFilePath & "cfengine.cfg"
End If
fs.CopyFile strCFGPath + "cfengine.cfg", DstFilePath



红色部分就是问题代码,如果是调试,或者前后加上msgbox,那么这段执行起来是毫无问题的。
但是如果不进行上述操作,运行的时候似乎就直接跳过了这段代码。
请帮忙看看,谢谢各位了。
回复
可能是有的操作还没生效,比如你在代码中写文件,需要有一定的时间的。
回复
你的代码是什么代码呀.

是不是因为断点或其它方式中断后才有了执行的时间,才创造了某些条件?

你自己写的代码,自己都理不清逻辑,又不亮代码出来,不知道哪位神仙可以帮你.
回复
舉杯邀明月 2008-03-25
  你不如把你那部分代码贴出来,说清楚怀疑有问题的是哪部分,总比让别人猜强一些吧。

  既然你在“调试”,用 Debug.Print 比用 MsgBox 好些。
  Debug.Print 的输出内容在“立即窗口”中,用 “Ctrl+G”可以打开此窗口。
  你在这段代码中插入多条 Debug.Print "XXXXX" 语句(当然每处"XXXXX"的实际内容不相同),再看一下立即窗口中的输出内容,就可以知道执行流程了。
回复
lesleyc 2008-03-25
[Quote=引用 5 楼 zzyong00 的回复:]
编译后用一个form.print ..试试
[/Quote]

程序没有使用form的
回复
forbearORfolie 2008-03-25
在你复制文件之后,加一个检测文件的语句即可
回复
zzyong00 2008-03-25
编译后用一个form.print ..试试
回复
lesleyc 2008-03-25
[Quote=引用 2 楼 chenjl1031 的回复:]
很简单,条件没有满足,当然不能执行了。看看你设置的条件是否合理!
[/Quote]

没有设置条件呀,就是这么顺序执行下去。只要设一个断点就没问题了。但是编译成可执行文件的时候就不行。
回复
相关推荐
发帖
VB基础类
创建于2007-09-28

7489

社区成员

VB 基础类
申请成为版主
帖子事件
创建了帖子
2008-03-25 12:36
社区公告
暂无公告