我有一个VBA宏,该宏在运行X13 ARIMA SEATS之前以“ datevalue”格式(即Year Tab Month Tab数据)写入txt文件。
它一直都有效,但是最近它只起作用了几次。当我查看在季节性调整之前生成的.txt文件时,该文件在一行中间被中断。从1998年到2018年7月,它会像往常一样写入文件,但会停在小数点中间。
这是编写txt datevalue文件的代码的一部分。 Ano和mes(年和月)是代码开头的输入。
Private Sub copyData(ByVal mes As Integer, ByVal ano As Integer, rng As Range)
Dim sFileText As String
Dim iFileNo As Integer
Dim i, col As Double
i = rng.Row
col = rng.Column
ficar = True
iFileNo = FreeFile
Open "P:\Macro\X12\Input\serie1.txt" For Output As #iFileNo
'Writes the file with the time series
While Cells(i, col) <> ""
Print #iFileNo, ano & Chr(9) & mes & Chr(9) & Cells(i, col)
If (mes + 1) Mod 12 > 0 Then mes = (mes + 1) Mod 12 Else mes = 12
If mes = 1 Then ano = ano + 1
i = i + 1
Wend
Close #iFileNo
End Sub
这是.txt文件的头
1998 1 4641.272855
1998 2 3943.235604
1998 3 5167.087047
1998 4 4629.068494
1998 5 4736.139222
1998 6 4703.891762
1998 7 5394.787069
1998 8 4155.992635
1998 9 5741.168184
1998 10 5460.08048
这是尾巴,在这里停止工作。
2018 4 13790.364479
2018 5 13259.844355
2018 6 14320.106493
2018 7 16101.08
我的猜测是文件现在太长了。
更新!
我在Wend之前添加了一个MsgBox(如下所示),因此代码运行速度会变慢(在运行过程中,我一直按Enter键)并且它可以正常工作。因此,我认为它会中断文件写入,因为它花费的时间太长。
MsgBox ano & Chr(9) & mes & Chr(9) & Cells(i, col)
答案 0 :(得分:0)
跟进(如果有人遇到此问题):
我认为该文件对于我的excel来说太长了,这使它有些不知所措。解决方案是在运行代码之前限制小数位数。所以我在Excel文件中放了= ROUND(xxx,2)!
希望对您有所帮助!