2013-08-23 56 views
1

我使用Excel宏創建新的工作簿,並填充給定csv文件的數據。一列向用戶輸入某些屬性值。這些值必須適應一個數據類型和一定的格式,以由另一處理系統所接受,這裏是一些例子:根據給定的數據類型驗證輸入的單元格值

  • A值:格式化,如「@」
  • B值字符串值:整數值格式化「# 「
  • 值C:浮點值格式的 」### 0,0 ###「
  • 值d:格式化的十進制值。 」####0,0「

現在我想添加驗證以檢查輸入的輸入值是否適合處理或必須被改變,例:

  • 一個字符串值可能不會在小數字段中輸入
  • 負值不接受所有格式的數字字段

如何設置這個驗證?我對VBA相當陌生,不敢確定最佳路線。我迄今發現的可能性:

  1. 通過Worksheet.Range.Validation添加驗證,但我沒有任何線索如何建立一級方程式來檢查正確的價值觀。

  2. Go by Worksheet_Change,這裏的問題是我創建新的工作簿,顯然不包含我的程序代碼中寫入的Worksheet_Change,因爲它是一個新的工作簿。

那麼最好的方法是什麼?

+0

正則表達式?也許。?但我不知道任何正則表達式... – kpark

回答

0

使用Worksheet.Range.Validation不是非常省錢,因爲如果用戶從剪貼板粘貼數據,它不會被觸發。

Go for Workbook_SheetChange。在那裏實施驗證並將工作簿保存爲模板。

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) 
    Debug.Assert (Format(Target.Value, "#.##0,0#") = Target.Value) 
End Sub 

確保所有單元格格式設置爲文本,如果您使用此方法。否則Target.Value會給你一個插值。

再後來打開模板並導入CVS進去:

wb = Application.Workbooks.Add("path-to-template.xslm") 
Application.EnableEvents = false ' You don't want to trigger change events during import 
myimport(wb) 
Application.EnableEvents = true 
+0

對我來說工作很好,我不得不添加一個額外的Workbook_SheetSelectionChange函數與某種信號量來存儲原始單元格的值,以取代它,如果它無效。謝謝! – ummecasino

+0

另外:必須通過CStr()轉換目標值才能進行比較! – ummecasino

1

在沒有VBA的情況下,您可以在工作簿一側進行相當多的數據驗證。例如,對於值C,您可以以該單元格的自定義數字格式輸入格式(格式爲「#。## 0,0 ###」)的格式(),然後應用數據驗證以確保只有數字被輸入到你想要的範圍內。

相關問題