2017-08-24 43 views
0

我在函數中得到以下代碼片段,該函數應該將Excel表格中許多列的數據正文範圍設置爲「貨幣「格式:爲Excel VBA中的範圍設置的「貨幣」樣式結果爲「會計」

For i = 5 To oActiveTable.ListColumns.count 
    With oActiveTable.ListColumns(i).DataBodyRange 
     ' .NumberFormat = "#,##0.00 €" 
     ' .NumberFormat = "Currency" 
     .Style = "Currency" 
    End With 
Next 

註釋行分別是不滿意或borken企圖。

.NumberFormat = "#,##0.00 €"工作,但導致格式顯示爲「自定義」這是不受歡迎的,因爲它可能會導致建立在我的方法之上的人繼續這種不好的做法。

.NumberFormat = "Currency"不起作用(錯誤1004-顯而易見,事後看來),一些在文檔,教程和文章中進行挖掘顯示「Currency」實際上是一種單元格樣式。

.Style = "Currency"作品,即風格已設置,但不知何故成爲「會計」風格 - 這不是我想要的,因爲我們不希望「 - €」爲0(零)值。

爲什麼會發生這種情況,我該如何預防它?

我很確定我不是第一個被這個難倒的人,但是找不到這個東西 - 大多數人似乎都是直接設置數字格式。

我在Windows 7上使用Excel 2010.兩個設置爲英語的UI語言,但系統的區域設置(時間,日期,數字格式,...)設置爲德國。

編輯: 至少對我而言混亂方面解決:貨幣風格已會計數字格式分配。

+0

貨幣ist只是格式列表的同義詞。在這裏,我的「貨幣」默認爲'#,## 0.00 [$€-407]; [RED] - #,## 0.00 [$€-407]'。我不會太在意「Custom」的名字。 – Arminius

+0

不幸的是,這種方式創建的文件的收件人有點挑剔:) –

回答

1

你可以做的是讀出「貨幣」格式對於Excel的含義,然後設置格式。選擇一個單元格的「貨幣」格式,併爲此在VBA編輯器:

Debug.Print Application.ActiveCell.NumberFormatLocal 

輸出(在我的機器上):

#.##0,00 € 

現在選擇靶細胞(或您選擇一個範圍宏,無論你需要),並做到這一點(我與一個活動單元格堅持,因爲它很容易測試):

Application.ActiveCell.NumberFormatLocal =「### 0,00€。」

如果你檢查用戶界面,它應顯示爲「貨幣」格式。

+0

是的,似乎這是唯一的方式... grmbl。有人請給我一個具有更多UI/API一致性的電子表格應用程序:P –

+0

我通常會鑽研Excel數據包文件中的xml文件並搜索ID和名稱。這樣我發現沒有「貨幣」。是的,你是對的:Excel在UI和API之間不一致。很多!:-) – Arminius