VBA excel-excel在使用application.ontime时创建空csv文件

VBA excel-excel在使用application.ontime时创建空csv文件,excel,vba,csv,Excel,Vba,Csv,我有一个宏,使用Application.Ontime每30秒运行一次。每次迭代都会创建一个包含8列、50到100行的新csv文件。应用程序.Ontime通常从上午8点运行到下午5点 问题是,有时在白天宏只是停止在csv文件中存储数据,但仍然创建csv文件。因此,它仍然创建csv文件,但其中没有任何数据 编辑: 创建的文件包含标题(stdtenorary(0)) 变量StdXXXXXX在另一个宏(按钮)中定义,是一个全局变量 代码如下: Sub RunOnTime() Application.

我有一个宏,使用Application.Ontime每30秒运行一次。每次迭代都会创建一个包含8列、50到100行的新csv文件。应用程序.Ontime通常从上午8点运行到下午5点

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

编辑:

  • 创建的文件包含标题(stdtenorary(0))
  • 变量StdXXXXXX在另一个宏(按钮)中定义,是一个全局变量
代码如下:

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
上述代码调用此宏:

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
希望有人能解决这个问题,或者能给我指出正确的方向

祝你周末愉快


\克里斯蒂安

我已经回答了你对这个问题的评论@YowE3K,是的,标题在文件中。StdXXXXX在另一个宏中设置,基本上是一个开/关按钮。它被定义为一个公共变量。似乎调用了宏,但不知何故数据并没有被检索。我将从一些
log
变量开始,并在日志中添加一些消息,即
log=“StdXXXXX为false”
(在else to if中)或
log=“无数据要存储”
在for循环结束时
StdTenorCnt=0
。然后,如果输出csv中的日志变量不为空,则可以将其存储在输出csv中,以查看发生了什么情况。在csv文件停止填充的情况下,是否有人对工作簿执行任何操作?这可能会导致公共变量丢失其值(因此默认为
0
,即
False
),并导致您的情况。作为旁白(与您的问题无关)<代码>尺寸标准长度,h,j,只要长度等同于
尺寸标准长度作为变量,h作为变量,j作为长度
。它并不等同于Dim StdTenorCnt,因为Long、h As Long、j Long@YowE3K是的,用户在运行ontime时正在使用工作簿。为了解决这个问题,我现在将公共变量的值存储在工作簿中。我希望这将解决这个问题。