1.在明細表工作表模組植入以下程式碼:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
With Target
If InStr("$A$2$B$1", .Address) Then
關鍵字 = .Value
Call 以關鍵字辨識工作表名_匯入表內資料
End If
End With
End Sub
2.將下列程式碼放入 Module1:
Option Explicit
Public 關鍵字$
Sub 以關鍵字辨識工作表名_匯入表內資料()
Dim Awh As Worksheet, xA As Range, Y, Z
Set Y = CreateObject("Scripting.Dictionary")
Set Awh = Sheets("明細表")
For Each Z In Worksheets
If Not Z Is Awh Then
Set Y(Z.Name) = Range(Z.[A1], Z.UsedRange).Offset(2)
Else
Z.Range(Z.[A1], Z.UsedRange).Offset(3).Clear
End If
Next
If Not Y.Exists(關鍵字) Then
MsgBox "沒有 " & 關鍵字 & " 工作表!"
GoTo 111
Else
Y(關鍵字).Copy Awh.[A4]
End If
111
Set Y = Nothing
End Sub作者: 准提部林 時間: 2022-12-9 20:09
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
With Target
'↑以下是關於觸發的程序
If InStr("$A$2$B$1", .Address) Then
'↑如果 "$A$2$B$1" 字串裡 有包含觸發儲存格的位址(字串)
關鍵字 = .Value
'↑令關鍵字這全域變數是這 觸發格的值
Call 以關鍵字辨識工作表名_匯入表內資料
'↑執行 以關鍵字辨識工作表名_匯入表內資料(副程式)
End If
End With
End Sub
Option Explicit
Public 關鍵字$
'↑宣告(關鍵字)這變數是字串型的全域變數
Sub 以關鍵字辨識工作表名_匯入表內資料()
Dim Awh As Worksheet, xA As Range, Y, Z
'↑宣告(Awh)是工作表,(xA)是儲存格,(Y,Z)是通用型變數
Set Y = CreateObject("Scripting.Dictionary")
'↑令Y是字典
Set Awh = Sheets("明細表")
'↑令Awh 是"明細表" 工作表
For Each Z In Worksheets
'↑設順迴圈!X令Z是活頁簿裡工作表之一,從前跑到後
If Not Z Is Awh Then
'↑如果迴圈工作表不是 "明細表" 工作表??
Set Y(Z.Name) = Range(Z.[A1], Z.UsedRange).Offset(2)
'↑令迴圈工作表名字當key,Item是迴圈工作表裡[A1]到 迴圈工作表有使用儲存格,
'能包含上述的最小方正儲存格範圍,再往下偏移2 列的 儲存格範圍
Else
Z.Range(Z.[A1], Z.UsedRange).Offset(3).Clear
'↑否則能包含("明細表" 工作表)[A1]到有使用儲存格的 最小方正儲存格範圍,
'再往下偏移3 列的 儲存格範圍 清除
End If
Next
If Not Y.Exists(關鍵字) Then
'↑如果Y字典裡的key沒有 關鍵字這變數的字串
MsgBox "沒有 " & 關鍵字 & " 工作表!"
'↑跳出提示窗
GoTo 111
'↑跳到 111位置繼續執行
Else
Y(關鍵字).Copy Awh.[A4]
'↑否則就以 關鍵字這變數的字串當key!
'把對應的item儲存格集複製到 "明細表" 工作表的[A4]
End If
111
Set Y = Nothing
'↑釋放變數
End Sub作者: Andy2483 時間: 2022-12-12 09:30
Function 抓資料(xA As String, R As Long, C As Long) As Variant
Dim Y
Application.Volatile
Set Y = Range(Sheets(xA).[A1], Sheets(xA).UsedRange)
抓資料 = IIf(Y.Item(R, C) <> 0, Y.Item(R, C), "")
End Function