2015-08-20 36 views
0

我只需使用vba代碼更改工作表的格式,並且文件變得非常大並且增加了大約200 MB。如果我使用excel界面來做這件事,那麼就不會發生這種情況,但我想使用代碼。更改excel的格式將文件轉化爲瘋狂的大小

Function ReturnName(ByVal num As Integer) As String 
    ReturnName = Split(Cells(, num).Address, "$")(1) 
End Function  

lcol = ws1.Cells(1, ws1.Columns.Count).End(xlToLeft).Column 
For i = 1 To lcol 
If (ws1.Cells(4, i) = "Date") Then 
ws1.Range(ReturnName(i) & "5" & ":" & ReturnName(i) & "1000").NumberFormat = "yyyy-mm-dd" 
Else 
ws1.Range(ReturnName(i) & "5" & ":" & ReturnName(i) & "1000").NumberFormat = "0" 
End If 
Next i 
+0

是因爲你的情況可以格式化整個柱上進行(S),而不是在列996個細胞是否可以接受?這應該會產生巨大的差異...意味着更小的文件大小。 –

+0

您只向我們展示了部分代碼,因此我必須問是否有可能將錯誤的值放入流氓'最後一個單元格'(如'Z1048576')中。 「Ctrl + End」在工作表上將你帶到哪裏? 'Debug.Print ws1.Cells.SpecialCells(xlLastCell).Address(0,0)'報告是什麼? – Jeeped

回答

2

試試這個,例如:

ws1.Range(ReturnName(i) & "5").EntireColumn.NumberFormat = "yyyy-mm-dd" 
+1

我意識到OP在特定的'coolness'中保存了ReturnName函數,但是不能將該代碼簡化爲'ws1.Columns(i).NumberFormat =「yyyy-mm-dd」'? – Jeeped

+2

雖然我會在這種情況下挑一件東西來教。 Excel爲整行或整列或整組這些事物(包括整個工作表)存儲一次數字格式,而對於較小範圍的每個單元格,則存儲一次。這裏的重點是教這個,所以我想包括EntireColumn的重點。繞過ReturnName肯定會更好,但可能會渾濁教訓。 –

+0

這裏沒有任何爭論。 – Jeeped