我正在使用脚本来监视添加文件的文件夹。如果将3个文件(满足条件)添加到受监控的文件夹,脚本运行良好。它很好地从这些文件中提取数据并添加到打开的excel文件中。但如果条件不是我的脚本继续通过Do While Loop
,我无法使用Excel中的任何按钮(正在考虑使用另一个命令按钮退出循环)。请帮忙!!任何建议表示赞赏!谢谢!使用colMonitoredevents时DoWhile循环卡住
Public vItem As Variant
'vItem contains the folder path that the user selects.
'Another function deals with this and only its values is passed to `CommandButton2 Click()`
Private Sub CommandButton2_Click()
Dim i As Integer
i = 0
Dim fcounter, pcounter, vcounter As Integer
fcounter = 0
pcounter = 0
vcounter = 0
Set objShell = CreateObject("Wscript.Shell")
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Dim vItemstr As String
vItemstr = Replace(vItem, "\", "\\\\")
MsgBox vItemstr
Set colMonitoredEvents = objWMIService.ExecNotificationQuery _
("SELECT * FROM __InstanceCreationEvent WITHIN 10 WHERE " _
& "Targetinstance ISA 'CIM_DirectoryContainsFile' and " _
& "TargetInstance.GroupComponent= " _
& "'Win32_Directory.Name=" & Chr(34) & vItemstr & Chr(34) & "'")
Do While True
Set objLatestEvent = colMonitoredEvents.NextEvent
StrNewfile = objLatestEvent.TargetInstance.PartComponent
arrNewFile = Split(StrNewfile, "=")
strFileName = arrNewFile(1)
strFileName = Replace(strFileName, "\\", "\")
strFileName = Replace(strFileName, Chr(34), "")
Dim justfilename, namestr As String
justfilename = Dir(strFileName)
Do While True
novaval = InStr(1, justfilename, "SampleResults")
If novaval > 0 Then
namestr = "f"
Exit Do
End If
novaval = InStr(1, justfilename, "v")
If novaval > 0 Then
namestr = "v"
Exit Do
End If
novaval = InStr(1, justfilename, "p")
If novaval > 0 Then
namestr = "p"
Exit Do
End If
Loop
If namestr = "f" And fcounter = 0 Then
i = i + 1
Dim OpenFileName As String
Dim wb As Workbook
Set wb = Workbooks.Open(strFileName, UpdateLinks:=0)
ThisWorkbook.Sheets(1).Range("K18:P18").Value = wb.Sheets(1).Range("G1:L1").Value
ThisWorkbook.Sheets(1).Range("K19:P19").Value = wb.Sheets(1).Range("G5:L5").Value
ThisWorkbook.Sheets(1).Range("K20:P20").Value = wb.Sheets(1).Range("G4:L4").Value
ThisWorkbook.Sheets(1).Range("K21:P21").Value = wb.Sheets(1).Range("G3:L3").Value
ThisWorkbook.Sheets(1).Range("K22:P22").Value = wb.Sheets(1).Range("G2:L2").Value
ThisWorkbook.Save
wb.Close
fcounter = fcounter + 1
ElseIf namestr = "v" And vcounter = 0 Then
i = i + 1
Set wb = Workbooks.Open(strFileName, UpdateLinks:=0)
ThisWorkbook.Sheets(1).Range("C18:E18").Value = wb.Sheets(1).Range("C1:E1").Value
ThisWorkbook.Sheets(1).Range("C19:E19").Value = wb.Sheets(1).Range("C5:E5").Value
ThisWorkbook.Sheets(1).Range("C20:E20").Value = wb.Sheets(1).Range("C4:E4").Value
ThisWorkbook.Save
wb.Close
vcounter = vcounter + 1
ElseIf namestr = "p" And pcounter = 0 Then
i = i + 1
Set wb = Workbooks.Open(strFileName, UpdateLinks:=0)
ThisWorkbook.Sheets(1).Range("F18:H18").Value = wb.Sheets(1).Range("X1:Z1").Value
ThisWorkbook.Sheets(1).Range("F19:H19").Value = wb.Sheets(1).Range("X5:Z5").Value
ThisWorkbook.Sheets(1).Range("F20:H20").Value = wb.Sheets(1).Range("X4:Z4").Value
ThisWorkbook.Save
wb.Close
pcounter = pcounter + 1
End If
If i = 3 Then
Exit Do
End If
Loop
End Sub
首先,您没有显示Dim的几个变量,所以不知道它们是什么。其次,你确定'Exit Do'是否真的让你走出困境?你有两个“尽管是真的”循环。如果你把一个断点放入并且没有所需的三个文件,它应该显示问题出在哪里。 –
感谢韦恩的评论!我注意到'vItem'描述丢失了,所以我编辑了这个帖子来澄清这个变量。我再次检查了代码,无法找到任何未声明的其他变量。如果你愿意指出,我会编辑帖子以澄清这些变量。在另一个'Do while'循环中,你有一个很好的观点。让我看一看。但无论如何,即使在监视器打开后我添加了其他循环之前,excel文件上的任何内容都不可点击,直到监视完成。 – ExcelMind1434
在模块顶部添加'Option Explicit',然后'Debug |编译”。将显示缺少的Dim's。您应该能够在第一个“Do While True”时在代码中放置断点,然后单击该按钮以启动该过程。然后在代码窗口中,只需按F8即可遍历代码。应该很容易找到问题。最后,你的'尽管真正'看起来有点奇怪,因为你没有任何条件会改变'真实'的条件 - 因此循环会一直运行,直到你'退出'。如果你说'Do While blnFlag = True'并且你在循环中改变了blnFlag,那么这将停止Do. –