VBA excel-excel在使用application.ontime时创建空csv文件
我有一个宏,使用Application.Ontime每30秒运行一次。每次迭代都会创建一个包含8列、50到100行的新csv文件。应用程序.Ontime通常从上午8点运行到下午5点 问题是,有时在白天宏只是停止在csv文件中存储数据,但仍然创建csv文件。因此,它仍然创建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.
- 创建的文件包含标题(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时正在使用工作簿。为了解决这个问题,我现在将公共变量的值存储在工作簿中。我希望这将解决这个问题。