- 帖子
- 835
- 主題
- 6
- 精華
- 0
- 積分
- 915
- 點名
- 0
- 作業系統
- Win 10,7
- 軟體版本
- 2019,2013,2003
- 閱讀權限
- 50
- 性別
- 男
- 註冊時間
- 2010-5-3
- 最後登錄
- 2025-7-5
|
儲存格內有函數,但想要手動輸入時會讓原有函數不見
還有交叉比對的問題
請問要怎麼改才好
希望用VBA(其 ...
j88141 發表於 2014-4-4 15:21 
Module1 :- Public v11, v12, v21, v22
複製代碼 Workbook :- Private Sub Workbook_Open()
- Dim vA
- Dim rSou As Range, rTar As Range
-
- Set v11 = CreateObject("Scripting.Dictionary")
- Set v12 = CreateObject("Scripting.Dictionary")
- Set v21 = CreateObject("Scripting.Dictionary")
- Set v22 = CreateObject("Scripting.Dictionary")
-
- Set rSou = Sheets("工作表1").Range("A:A").SpecialCells(xlCellTypeConstants)
- For Each rTar In rSou
- If rTar <> "" And Left(rTar, 2) <> "星期" Then v11(CStr(rTar)) = 1
- Next
-
- Set rSou = Sheets("工作表1").Range("C:C").SpecialCells(xlCellTypeConstants)
- For Each rTar In rSou
- If rTar <> "" And Left(rTar, 2) <> "星期" Then v12(CStr(rTar)) = 1
- Next
- Set rSou = Sheets("工作表2").Range("A:A").SpecialCells(xlCellTypeConstants)
- For Each rTar In rSou
- If rTar <> "代號" Then
- v21(CStr(rTar)) = rTar.Offset(, 1)
- v22(CStr(rTar)) = rTar.Offset(, 2)
- End If
- Next
- End Sub
複製代碼 工作表3 :- Private Sub Worksheet_Change(ByVal Target As Range)
- Dim bNFind As Boolean
-
- With Target
- If .Count = 1 Then
- If .Row = 1 Then ' A1 或 B1
- bNFind = True
- Select Case .Column
-
- Case 1
- If v11.exists(CStr(v22(CStr(Target)))) Then
- .Offset(1) = v21(CStr(Target))
- .Offset(2) = v22(CStr(Target))
- bNFind = False
- End If
-
- Case 2
- If v12.exists(CStr(v22(CStr(Target)))) Then
- .Offset(1) = v21(CStr(Target))
- .Offset(2) = v22(CStr(Target))
- bNFind = False
- End If
-
- Case Else
- bNFind = False
-
- End Select
-
- If bNFind Then
- MsgBox v22(CStr(Target)) & " 沒有排班"
- .Resize(3).ClearContents
- .Select
- End If
- End If
- End If
- End With
- End Sub
複製代碼
活頁簿1-a.zip (19.91 KB)
|
|