- 帖子
- 5923
- 主題
- 13
- 精華
- 1
- 積分
- 5986
- 點名
- 0
- 作業系統
- win10
- 軟體版本
- Office 2010
- 閱讀權限
- 150
- 性別
- 男
- 來自
- 台灣基隆
- 註冊時間
- 2010-5-1
- 最後登錄
- 2022-1-23
        
|
44#
發表於 2012-12-19 12:49
| 只看該作者
本帖最後由 GBKEE 於 2012-12-19 12:54 編輯
回復 43# emma
**** 程式碼 要吸收 才會進步 ***
Private Sub Worksheet_Change(ByVal Target As Range)
是"資料檔"這工作表 的儲存格有修改後,會執行的程序(系統預設的工作表事件: Target ->有修改後的儲存格 )- If Target.Address(0, 0) = "E1" Then
- Range("D3").AutoFilter Field:=2, Criteria1:="*" & Target & "*"
- ElseIf Target.Address(0, 0) = "C1" Then
- Range("C3").AutoFilter Field:=1, Criteria1:="*" & Target & "*"
- Else
- Exit Sub '*****
- End If
複製代碼 這巨集 設計為在 E1 或是 C1 有修改後,才會執行
你在B欄有修改後 程式會 Exit Sub (離開程序 :不執行了) 達不到你的期望 '*****
你要當B欄數量有輸入要傳送到[查詢] 裡 那會造成資料筆數的錯亂 所以才設計 Exit Sub
另一方法:
現在 請不要用Private Sub Worksheet_Change(ByVal Target As Range) (刪掉它)
再設一按鈕 指定執行巨集: 數量查詢
當你的E1 , C1 或是 B欄數量 修改完成後 確定按[按鈕] 傳送到[查詢]- Sub 數量查詢() '這程序需複製到 [資料檔]的模組中
- Dim Target_Row As String, s As Integer, dot As Long, k As Integer, m As String
- Dim Ar(), A As Range, Rng As Range
- Range("D3").AutoFilter Field:=2, Criteria1:="*" & [C1] & "*"
- Range("C3").AutoFilter Field:=1, Criteria1:="*" & [E1] & "*"
- Set Rng = Sheets("資料檔").Range("B4:B65536").SpecialCells(xlCellTypeVisible) '自動篩選後可見的儲存格
- If Application.Count(Rng) > 0 Then '可見的儲存格:有資料儲存格的總數>0
- Set Rng = Rng.SpecialCells(xlCellTypeConstants) '可見的儲存格:有資料的儲存格
- For Each A In Rng.Cells
- ReDim Preserve Ar(s)
- If A.Offset(, 8) = "V" And A.Offset(, 9) >= Date And A > A.Offset(, 4) Then dot = Int(A / 1000) * 1000 Else dot = 0
- k = IIf(Sheets("查詢").[B1] = "總店", 10, 11)
- If A.Offset(, 7) < Date Then
- m = "已結束"
- ElseIf A < A.Offset(, 4) Then
- m = "運費+手續費"
- ElseIf InStr(A.Offset(, 5), "推") And A > A.Offset(, 4) Then '包含
- m = "免運"
- ElseIf InStr(A.Offset(, 5), "推") = 0 And A > A.Offset(, 4) Then '不包含
- m = "運費"
- End If
- Ar(s) = Array(A.Offset(, 2).Value, A.Value, A.Offset(, 3).Value, dot, A.Offset(, 12).Value, A.Offset(, k).Value, m, A.Offset(, 6).Value)
- s = s + 1
- Next
- End If
- With Sheets("查詢")
- If s > 0 Then
- .Range("A" & .Rows.Count).End(xlUp).Offset(1).Resize(s, 8) = Application.Transpose(Application.Transpose(Ar))
- Sheets("資料檔").[C2] = .Range("A" & .Rows.Count).End(xlUp).Offset(, 5) 'F欄:儲位
- End If
- End With
- End Sub
複製代碼 |
|