2010-06-18 66 views
2

我正在使用CDate將格式爲字符串的特定日期轉換爲Excel日期類型。我爲這種轉換寫了一個小UDF;但是,當我將該函數作爲內嵌函數運行時,它將返回一個數字,並將調用單元的默認格式設置爲數字類型。當我手動將其轉換爲日期類型時,Excel將顯示正確的日期條目。VBA中的CDate函數的問題

所以,我需要知道是否有方法通過我的日期轉換宏將調用單元格的默認格式設置爲日期類型。否則,用戶必須手動更改每個單元格的格式。

e.g

Function Test() 
    Test = CDate("2010/12/23") 
End Function 

回答

1

呼叫單元通過Application.ThisCell暴露但是你將不得不爲Excel UDF不能修改一個單元的物理特性,手動前格式化/電話後。

1

也許你可以在單元格輸入後運行一些東西?

Dim c As range 
For Each c In ActiveSheet.UsedRange.Cells 
    ''Case sensitive 
    If c.Formula = "=test()" Then 
     c.NumberFormat = "d/mm/yyy" 
    End If 
Next 
0

這聽起來像你想要做的實際上是一個過程分爲兩個部分:在一個單元格的值(或單元格區域)轉換爲日期,然後顯示它作爲一個日期,而不是簡單地將看起來像日期的文本值轉換爲日期值。

如果是這樣的話,那麼我建議修改Remou的建議像這樣(使用UsedRange可以是在含有大量數據的工作表有問題的):

Dim c As Range 
For Each c In Selection.Cells 
    c.Value = CDate(c.Value) 
    c.NumberFormat = "m/d/yyyy" 
Next c 

用戶將然後需要選擇小區應該應用格式並運行宏;這聽起來好像你不希望發生這種情況,但我不確定這是可能的。

根據您希望如何使用宏,您可以添加其他檢查:例如,您可以將格式僅應用於當前格式爲文本(c.Value <> "" and c.NumberFormat = "@")的非空白單元格。

0

如果以字符串形式返回數據並採用Excel自動轉換爲日期的格式,則可以使單元格格式正確。

Function Test() As String 
    Test = Format(DateValue("2010/12/23"), "mm/dd/yyyy") 
End Function 

這適用於美國Excel,但如果你需要它是語言不可知的,我認爲你會有問題。