返回列表 上一主題 發帖

間斷輸入時 如何讓程式也可以帶出資料

間斷輸入時 如何讓程式也可以帶出資料

Dear 大大

     小弟現有一個問題 就是報表在輸入時,使用者會跳著輸入資料,但我的寫法卻無法克服這個問題
     請大大教導一下小弟,也順便有新的思維,以後遇到這樣的問題,就可以自行解決

    附件為問題之範本 間斷輸入時程式如何克服20110107.rar (10.17 KB)
學習才能提升自己

這種目的應該用Worksheet_Change事件而不是Worksheet_SelectionChange事件。
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2. If Target.Count > 1 Or Target.Column <> 2 Then Exit Sub
  3. On Error Resume Next
  4. Target(1, 2) = Sheet2.[b:b].Find(Target, , , 1)(1, 2).Value
  5. End Sub
複製代碼

TOP

回復 2# oobird
  

     Dear 大大~  我將你撰寫的程式碼放入到範本中,但執行卻完全無任何動作
                :dizzy:
              大大 之前我也有試過Private Sub Worksheet_Change(ByVal Target As Range)
                     但可能我的寫法上有錯~ 它會一直計算
              所以~ 我才改成Private Sub Worksheet_SelectionChange(ByVal Target As Range)
                       當選擇的有改變時就計算~
學習才能提升自己

TOP

回復 2# oobird

Dear 大大

     後來我有測試把其中的一行拿掉就可以達到需求,但這行拿掉會不會有什麼樣的問題呢??

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Or Target.Column <> 2 Then Exit Sub  <----把該行拿掉就可以執行
On Error Resume Next
Target(1, 2) = Sheet2.[b:b].Find(Target, , , 1)(1, 2).Value
End Sub
學習才能提升自己

TOP

If Target.Count > 1 Or Target.Column <> 2 Then Exit Sub  
這行是限定對單一儲存格輸入同時輸入的欄位必須是b欄才會執行動作。
你若拿掉會在任何地方輸入或改變時都執行。

TOP

回復 5# oobird

    Dear 大大
     Target <---這個意思是什麼 我用F1查詢被未找到這個字的用法跟說明
學習才能提升自己

TOP

Dear 大大

     若假設我需要從Data1與Data2中 各自的Sheet中比對資料後,將資料帶出來,這樣該如何修改
     說明:
       1. 在sheet[輸入]中,{A}填入資料帶出DATA1中的B欄位資料
     2. 利用B欄位資料帶出DATA2中C欄位資料
        (先前條件Data1與Data2的表格資料是在未加工且不能整合在一起的情況下)
     問題如附件之範本 間斷輸入時 程式如何克服_延伸題2.rar (12.47 KB)
學習才能提升自己

TOP

回復 6# hugh0620
回復 7# hugh0620
  1. Private Sub Worksheet_Change(ByVal 變數 As Range)
  2.     Dim I
  3.     If 變數.Count > 1 Or (變數.Column <> 2 And 變數.Column <> 3) Then Exit Sub
  4.         If 變數.Column = 2 Then
  5.             Sh = "Data1"
  6.             I = Application.Match(變數, Sheets("Data1").[B:B], 0)
  7.             If IsNumeric(I) Then
  8.             變數(1, 2) = Sheets("Data1").Cells(I, "C")
  9.             Else
  10.                 變數(1, 2) = ""
  11.             End If
  12.         ElseIf 變數.Column = 3 Then
  13.             I = Application.Match(變數, Sheets("Data2").[B:B], 0)
  14.             If IsNumeric(I) Then
  15.                 變數(1, 2) = Sheets("Data2").Cells(I, "C")
  16.             Else
  17.                 變數(1, 2) = ""
  18.             End If
  19.     End If
  20. End Sub
複製代碼

TOP

回復 7# hugh0620
以oobird版主的程式碼來修改的話
第2行改>3, 再新增第5行即可~
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2. If Target.Count > 1 Or Target.Column > 3 Then Exit Sub
  3. On Error Resume Next
  4. Target(1, 2) = Sheet2.[b:b].Find(Target, , , 1)(1, 2).Value
  5. Target(1, 2) = Sheet3.[b:b].Find(Target, , , 1)(1, 2).Value
  6. End Sub
複製代碼

TOP

回復 8# GBKEE


    Dear 大大
        你的方式可以完全解決我的問題,並且也很簡單的增加(或擴增)我的其他條件~
            但大大 我有幾個地方看不懂
        1. 變數.Count   ?????????
            2.IsNumeric(I) 是否解讀 IsNumeric判別[I]是TRUE或是FALSE

    另外我是用另外一個大大的寫法來修改,請大大幫忙看一下,這樣的寫法有什麼樣的缺失
   If (Target.Count > 1 Or Target.Column <> 2) And (Target.Count > 2 Or Target.Column <> 3) Then Exit Sub
         On Error Resume Next
         Target(1, 2) = Sheet2.[b:b].Find(Target, , , 1)(1, 2).Value
     If Target.Count > 2 Or Target.Column <> 3 Then Exit Sub
         On Error Resume Next
         Target(1, 2) = Sheet3.[b:b].Find(Target, , , 1)(1, 2).Value
學習才能提升自己

TOP

        靜思自在 : 每天無所事事,是人生的消費者,積極、有用才是人生的創造者。
返回列表 上一主題