Board logo

標題: 一個清單驗證問題 [打印本頁]

作者: dafa    時間: 2012-1-12 17:16     標題: 一個清單驗證問題

請問各位先進
我下列程式碼有哪裡錯誤嗎?
為何我輸入清單以外的文字
無法出現錯誤訊息

With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=" & bb
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With
作者: GBKEE    時間: 2012-1-12 18:24

回復 1# dafa
  1. Sub Ex()
  2.    Dim BB(3), CC
  3.    BB(0) = 1
  4.    BB(1) = 3
  5.    BB(2) = 4
  6.    BB(3) = 5
  7.    'CC = Join(BB, ",")          '陣列
  8.    CC = "=" & [A1:A5].Address   '儲存格
  9.    With Selection.Validation
  10.         .Delete
  11.         .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
  12.         xlBetween, Formula1:=CC
  13.         .IgnoreBlank = True
  14.         .InCellDropdown = True
  15.         .InputTitle = ""
  16.         .ErrorTitle = ""
  17.         .InputMessage = ""
  18.         .ErrorMessage = ""
  19.         .ShowInput = True
  20.         .ShowError = True
  21.     End With
  22. End Sub
複製代碼

作者: dafa    時間: 2012-1-12 18:49

回復 2# GBKEE


    感謝G大的回覆
我去試試看
作者: dafa    時間: 2012-1-13 08:41

回復 2# GBKEE


    再請問G大一個問題
陣列BB(30)內30可以是變數嗎?
作者: GBKEE    時間: 2012-1-13 09:01

回復 4# dafa
  1. Option Explicit
  2. Sub Ex()
  3.     Dim BB(5 To 30), i As Integer
  4.     For i = 5 To 30
  5.         BB(i) = i + 2
  6.     Next
  7.     MsgBox Join(BB, ",")
  8. End Sub
複製代碼

作者: dafa    時間: 2012-1-13 10:24

回復 5# GBKEE

請問G大我執行到這一段會出現錯誤
Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=" & bb
會出現錯誤

    Sub 清單明細()
If ActiveCell.Cells.Column <> "4" Then Exit Sub
aa = ActiveCell
If aa = "" Then Exit Sub

g = Worksheets("清單明細").Cells(65536, 1).End(xlUp).Row
For i = 1 To g
If Worksheets("清單明細").Cells(i, 1) = aa Then
b = 0
    For a = 4 To 34
        kk(b) = Worksheets("清單明細").Cells(i, a)
        b = b + 1
    Next a
bb = Join(kk, ",")

'bb = Worksheets("清單明細").Cells(i, 3)

ActiveCell.Cells(, 4).Select
Exit For
End If
Next i
With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=" & bb
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With


End Sub
作者: dafa    時間: 2012-1-13 10:32

回復 5# GBKEE

請問G大
   會不會是因為我的陣列資料內有空值
而發生的錯誤
作者: GBKEE    時間: 2012-1-13 12:32

回復 7# dafa
xlBetween, Formula1:="=" & bb 改成  xlBetween, Formula1:=bb
作者: dafa    時間: 2012-1-13 13:11

回復 8# GBKEE


    感謝G大的熱心
幫我解決難題
作者: dafa    時間: 2012-1-16 18:18

回復 8# GBKEE


    再請問G大一下
為何我的警告訊息不會出現


Sub 清單明細()

Dim bb, kk(30), aa
If ActiveCell.Cells.Column <> "4" Then Exit Sub

aa = ActiveCell
If aa = "Account Code " Then Exit Sub
If aa = "" Then Exit Sub
g = Worksheets("清單明細").Cells(65536, 2).End(xlUp).Row
For i = 1 To g
e = Worksheets("清單明細").Cells(i, 2)
If Worksheets("清單明細").Cells(i, 2) = aa Then

b = 0
j = Worksheets("清單明細").Cells(i, 34).End(xlToLeft).Column
    For a = 3 To j
        kk(b) = Worksheets("清單明細").Cells(i, a)
        b = b + 1
    Next a
bb = Join(kk, ",")
Exit For

End If
Next i
pp = Worksheets("清單明細").Cells(i, 3)
MsgBox pp, , "Account_Code說明"

ActiveCell.Cells(, 4).Select
ActiveCell = ""
With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:=bb
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = "You must enter a number from five to ten"
        .ShowInput = True
        .ShowError = True
    End With
Set kk(30) = Nothing
ActiveCell.Offset(, -5) = Date
ActiveCell.Offset(, 1) = Environ("UserName")
End Sub
作者: GBKEE    時間: 2012-1-16 20:29

回復 10# dafa
為何我的警告訊息不會出現
沒看到檔案我也不知道
作者: dafa    時間: 2012-1-16 22:50

本帖最後由 dafa 於 2012-1-17 08:29 編輯

回復 11# GBKEE

很抱歉說的不清楚
我測試Account Code欄位輸入錯誤資料時
為何出現警告訊息時沒有出現我輸入的字串  
.ErrorMessage = "You must enter a number from five to ten"


附件已上傳
作者: GBKEE    時間: 2012-1-17 09:56

本帖最後由 GBKEE 於 2012-1-17 10:07 編輯

回復 12# dafa    
Set A= ActiveCell                                                 '請加上      
   ActiveCell.Cells(, 4).Select      ->Selection
   ActiveCell = ""
   With Selection.Validation                   'Selection->  驗證 是在 ActiveCell.Cells(, 4)  不是 原先的 ActiveCell
改成  With A.Validation
作者: dafa    時間: 2012-1-17 11:43

回復 13# GBKEE


    感謝G大的解答
我又發現一個問題
就是陣列字元太多沒辦法全部塞入清單內
xlBetween, Formula1:=bb
有方法解決ㄇ?
作者: GBKEE    時間: 2012-1-17 13:14

回復 14# dafa
陣列字元太多沒辦法全部塞入清單內
  1. Sub 清單明細()
  2.     Dim bb, kk(), aa, B As Integer, Rng As Range
  3.             'kk() 動態陣列 可依需求指定元素的數量 , kk(30) :有31個元素 (0 To 30 )
  4.     If ActiveCell.Cells.Column <> "4" Then Exit Sub
  5.     aa = ActiveCell
  6.     If aa = "Account Code " Then Exit Sub
  7.     If aa = "" Then Exit Sub
  8.     g = Worksheets("清單明細").Cells(65536, 2).End(xlUp).Row
  9.     B = 0    '動態陣列的數目: 此時  動態陣列尚未指定元素數目
  10.     For i = 1 To g
  11.         e = Worksheets("清單明細").Cells(i, 2)
  12.         If Worksheets("清單明細").Cells(i, 2) = aa Then
  13.             j = Worksheets("清單明細").Cells(i, 34).End(xlToLeft).Column
  14.             For a = 3 To j
  15.                 ReDim Preserve kk(B)     'ReDim 陳述式 在程序層次中用來重新配置動態陣列變數的儲存空間。
  16.                 'Preserve 選擇性引數。當改變原有陣列最後一維的大小時,仍然保有原來的資料的關鍵字。
  17.                 kk(B) = Worksheets("清單明細").Cells(i, a)
  18.                 B = B + 1
  19.             Next a
  20.             bb = Join(kk, ",")
  21.             Exit For
  22.         End If
  23.     Next i
  24.     pp = Worksheets("清單明細").Cells(i, 3)
  25.     MsgBox pp, , "Account_Code說明"
  26.     Set Rng = activecells
  27.     ActiveCell.Cells(, 4).Select
  28.     ActiveCell = ""
  29.     With Rng.Validation
  30.         .Delete
  31.         .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
  32.         xlBetween, Formula1:=bb
  33.         .IgnoreBlank = True
  34.         .InCellDropdown = True
  35.         .InputTitle = ""
  36.         .ErrorTitle = ""
  37.         .InputMessage = ""
  38.         .ErrorMessage = "You must enter a number from five to ten"
  39.         .ShowInput = True
  40.         .ShowError = True
  41.     End With
  42. 'Set kk = Nothing          'kk 是陣列  不是物件
  43. ActiveCell.Offset(, -5) = Date
  44. ActiveCell.Offset(, 1) = Environ("UserName")
  45. End Sub
複製代碼

作者: dafa    時間: 2012-1-17 19:04

回復 15# GBKEE


    感謝G大詳細的解釋
幫了我很大的忙
你真是好人
:D




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)