作者Kyuan (人生就是一堆BLA BLA)
看板Visual_Basic
标题[VBA ] Excel VBA 大量阵列资料汇出 跨换档案
时间Fri Sep 8 22:17:49 2017
想请问版上先进一个问题,我需要将大量资料汇出成TXT档,
作法是将矩阵型资料(ex: 500家公司的一千笔资料)汇出
成长方形的矩阵 (ex 每一笔资料 共 500,000列) 的TXT档
A B C
O 1 4 7 (A、B、C O A 1
X 2 5 8 ==> 的 转为 X A 2
# 3 6 9 O/X/# ) # A 3
O B 4
X B 5
# B 6
目前作法是将所有资料读入记忆体中 在一笔一笔写入TXT中, 但会遇到
1. 记忆体不足(资料皆为Variant型态) , 此点目前采控制公司数来避免
2. 汇出成TXT时,档案会过大, 希望采当档案超过大小限制时,换一个档来接续储存!
3. 想要不中断输出,持续换档案大量输出
以下为简略程式码, 若不超过上限 资料皆可汇出,目前若超过上限仍会汇出,
但是又会是重复的档案(1 & 2 资料相同)
主要是想问超过资料大小上限後 转换档案储存的处理
可能是 fNum会互相冲突 或 新旧档案开启关闭逻辑错误
想请大神指点
=========
Sub testoutput()
myData = 资料矩阵
Snum = 档名序列号
FileName = 自订名称 & Snum & ".txt"
Dim fNum As Long
fNum = FreeFile '任意档案序号
Open FileName For Append As #fNum
For i = 1 To idn ' 每间公司
'猜测问题在此虚线范围
------------- '如果档案太大,就关掉旧的档案、开启新的档案来存
'资料大小条件写在此处是为了避免该公司的每日资料被分隔
FileSize = FileLen(MyDir & "\" & FileName)
If FileSize > 资料大小上限 Then
Close fNum '关闭第一个档
FileName = 自订名称 & Snum +1& ".txt" '以改名称创造下一个档案
Open FileName For Append As #fNum '用改名称开启第2个档
End If
--------------------------------------------------------------
For k = 1 To rn '每笔日资料
Print #fNum, myData(rcn) '''(((这里的fNum也可能有问题)))
rcn = rcn + 1
Next
Next
Erase myData
Close fNum
或是若有任何可以解决记忆体空间不足 又可大量汇出阵列的好方法
也希望求指导,谢谢 :))
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 180.204.177.158
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Visual_Basic/M.1504880271.A.F9B.html
1F:→ newton41: 从头到尾只会同时开一个档案,全部用#1试试如何?档名的 09/08 23:13
2F:→ newton41: 部分再用Fnum变就好。 09/08 23:13
3F:→ newton41: 抱歉,我是想说snum,然後里面有一个snum+1的部分,可能 09/08 23:16
4F:→ newton41: 应该改成snum=snum+1,不然只有两种结果,第一个sum第二 09/08 23:16
5F:→ newton41: 个以後sum+1。 09/08 23:16
感谢N大的解说 :)) ,我会再试试看, 另外发现写入中无法正确判读档案大小
(也就是无法随每一笔而增加) 可能因此导致判断失效 无法开启
我再努力想想其他方法
※ 编辑: Kyuan (180.204.177.158), 09/08/2017 23:33:38
6F:→ MOONRAKER: 档案大小用recn判断就好了 何必没事一直算filelen() 09/09 09:27