VBA excel – excel在使用application.ontime时创build空的csv文件

我得到了一个使用Application.Ontime每30秒运行一次的macros。 每次迭代都会创build一个包含8列和50到100行的新csv文件。 Application.Ontime通常运行时间从上午8点到下午5点。

问题是,有时在白天,macros只是停止在csv文件中存储数据,但仍然创buildCSV文件。 因此,它仍然创buildcsv文件,但没有任何数据。

编辑:

  • 创build的文件包含标题(StdTenorArray(0))
  • variablesStdXXXXXX在另一个macros(button)中定义,是一个全局variables

这里是代码:

Sub RunOnTime() Application.CutCopyMode = False Set ThisWkb = ThisWorkbook dTime = Now + TimeSerial(0, 0, 30) Application.OnTime dTime, "RunOnTime" Call csvFileArray Set ThisWkb = Nothing End Sub 

上面的代码调用这个macros:

 Sub csvFileArray() Dim StdTenorArray(), ArkArr(5) As Variant Dim FileName As String Dim StdTenorCnt, h, j As Long Set ThisWkb = ThisWorkbook Application.CutCopyMode = False ArkArr(1) = "XXXXXXctb" ArkArr(2) = "XXXXXctb" ArkArr(3) = "XXXXctb" ArkArr(4) = "XXXctb" ArkArr(5) = "XXctb" ReDim StdTenorArray(ThisWkb.Sheets(ArkArr(1)).Range("B" & Rows.Count).End(xlUp).Row + ThisWkb.Sheets(ArkArr(2)).Range("B" & Rows.Count).End(xlUp).Row + ThisWkb.Sheets(ArkArr(3)).Range("B" & Rows.Count).End(xlUp).Row + ThisWkb.Sheets(ArkArr(4)).Range("B" & Rows.Count).End(xlUp).Row + ThisWkb.Sheets(ArkArr(5)).Range("B" & Rows.Count).End(xlUp).Row) 'Standard tenors StdTenorCnt = 1 If StdXXXXXX = True Then For j = 5 To 29 If UCase(ThisWkb.Sheets(ArkArr(1)).Cells(j, 4)) = True _ And WorksheetFunction.IsNumber(ThisWkb.Sheets(ArkArr(1)).Cells(j, 10)) = True _ And WorksheetFunction.IsNumber(ThisWkb.Sheets(ArkArr(1)).Cells(j, 11)) = True _ And IsDate(ThisWkb.Sheets(ArkArr(1)).Cells(j, 7)) = True _ And IsDate(ThisWkb.Sheets(ArkArr(1)).Cells(j, 8)) = True Then StdTenorArray(StdTenorCnt) = "" & ThisWkb.Sheets(ArkArr(1)).Cells(j, 5) & ";" & Format(ThisWkb.Sheets(ArkArr(1)).Cells(j, 7), "yyyymmdd") & ";" & Format(ThisWkb.Sheets(ArkArr(1)).Cells(j, 8), "yyyymmdd") & ";" & ThisWkb.Sheets(ArkArr(1)).Cells(j, 9) & ";" & Replace(Format(ThisWkb.Sheets(ArkArr(1)).Cells(j, 10), "##0.00"), ",", ".") & ";" & Replace(Format(ThisWkb.Sheets(ArkArr(1)).Cells(j, 11), "##0.00"), ",", ".") & ";" & ThisWkb.Sheets(ArkArr(1)).Cells(j, 6) & ";JPD" StdTenorCnt = StdTenorCnt + 1 End If Next j End I. . . 'more storing in the array like the part above . . StdTenorArray(0) = "Symbol;SpotDate;ValueDate;Removed;Bid;Offer;Tenor;Channel" Set fs = CreateObject("Scripting.FileSystemObject") 'test app_path = ThisWkb.Path Set a = fs.CreateTextFile("" & app_path & "\Test\" & Strings.Format(Now(), "dd.mm.yyyy") & " " & Strings.Format(Now(), "hh.mm.ss") & "." & Strings.Right(Strings.Format(Timer(), "#0.00"), 2) & ".csv", True) For j = 0 To StdTenorCnt - 1 a.WriteLine ("" & StdTenorArray(j) & "") Next j a.Close ThisWkb.Sheets("DKK").Cells(1, 27) = "" & Strings.Format(Now(), "hh:mm:ss") & ":" & Strings.Right(Strings.Format(Timer(), "#0.00"), 2) & "" ReDim StdTenorArray(0) Set fs = Nothing Set a = Nothing Set ThisWkb = Nothing Application.CutCopyMode = False End Sub 

希望有人能够解决这个问题,或者可以指引我正确的方向。

周末愉快。

\克里斯蒂安