標題:
[發問]
查詢後傳回多筆資料以樹狀目錄方式置放
[打印本頁]
作者:
jesscc
時間:
2011-10-21 21:48
標題:
查詢後傳回多筆資料以樹狀目錄方式置放
工作有點複雜,在附檔中有詳細說明
[attach]8301[/attach]
作者:
Hsieh
時間:
2011-10-21 22:34
回復
1#
jesscc
查詢
Sub query()
Dim i%, Ar(), A As Range
If Sheet33.OptionButton7.Object.Value = True Then
Set d = CreateObject("Scripting.Dictionary")
Set d1 = CreateObject("Scripting.Dictionary")
With Sheets("DATA")
For Each A In Range(.[B5], .[B65536].End(xlUp))
d(A.Value) = A.Offset(, 3).Value
d1(A.Value) = Array(A.Value, "", A.Offset(, 3).Value, A.Offset(, 4).Value, A.Offset(, 10).Value)
Next
End With
With Sheets("B")
For Each A In Range(.[D12], .[D65536].End(xlUp)).SpecialCells(xlCellTypeConstants)
For Each ky In d.keys
If ky <> A And d(ky) = d(A.Value) Then
ReDim Preserve Ar(s)
Ar(s) = d1(ky)
s = s + 1
End If
Next
If s > 0 Then
A.Offset(1, 0).Resize(s, 1).EntireRow.Insert
A.Offset(1, 1).Resize(s, 5) = Application.Transpose(Application.Transpose(Ar))
s = 0: Erase Ar
End If
Next
End With
End If
Set d = Nothing
Set d1 = Nothing
End Sub
複製代碼
替代料
Private Sub OptionButton7_Click()
Dim i%
[E11] = "替代料"
Columns("G:J").EntireColumn.Hidden = False
Var = MsgBox("這樣做會刪除你之前所做的查詢結果。" & vbCrLf & vbCrLf & "但不會刪除原來的 PN。" & vbCrLf & vbCrLf & "請確定你要進行的查詢項目 !" & vbCrLf & vbCrLf & "可以按""取消""離開!", 33, "操作步驟提示!")
If Var = 2 Then
OptionButton6 = True
Columns("G:J").EntireColumn.Hidden = True
Exit Sub
Else
Range([E12], Cells(Rows.Count, 5).End(xlUp)).SpecialCells(xlCellTypeConstants).EntireRow.Delete
End If
End Sub
複製代碼
作者:
jesscc
時間:
2011-10-22 11:09
本帖最後由 jesscc 於 2011-10-22 14:08 編輯
回復
2#
Hsieh
感謝H大幫忙!
程式運作大致OK,刪除列的時候有點小問題,我把原始檔Sub query()的部分做了一些修改,加入了OpenOrder的查詢,本來還想說應該不難,因為這個部分不用考量排除原始PN的問題,只有資料放置的問題。我用Call的方式,在一個Sub裡去Call不同的查詢,結果OpenOrder的部分無法正常查詢(偵錯:此處需要物件),而且如果一直按"查詢"按鈕,會連標題列都被刪除,不知哪裡有問題,快瘋了><
[attach]8308[/attach]
作者:
jesscc
時間:
2011-10-22 22:44
本帖最後由 jesscc 於 2011-10-22 22:45 編輯
已修正錯刪標題列的問題,並且也可以查詢了,只是查詢結果不符所需,只能傳回最後一筆
Sub query1()
Dim i%, Ar(), A As Range
If [E13] <> "" Then
Columns("G:I").EntireColumn.Hidden = True
Range([E13], Cells(Rows.Count, 5).End(xlUp)).SpecialCells(xlCellTypeConstants).EntireRow.Delete
AA:
Set d = CreateObject("Scripting.Dictionary")
Set d1 = CreateObject("Scripting.Dictionary")
With Sheets("OpenOrder")
For Each A In Range(.[E7], .[E65536].End(xlUp))
d(A.Value) = A.Offset(, 2).Value
d1(A.Value) = Array(A.Value, A.Offset(, 1).Value, "", "", "", A.Offset(, 5).Value, "", "", A.Offset(, 8).Value, A.Offset(, 9).Value, A.Offset(, 10).Value, A.Offset(, 11).Value, A.Offset(, 12).Value)
Next
End With
With Sheets("B")
For Each A In Range(.[D12], .[D65536].End(xlUp)).SpecialCells(xlCellTypeConstants)
For Each ky In d.keys
If ky = A Then
ReDim Preserve Ar(s)
Ar(s) = d1(ky)
s = s + 1
End If
Next
If s > 0 Then
A.Offset(1, 0).Resize(s, 1).EntireRow.Insert
A.Offset(1, 1).Resize(s, 13) = Application.Transpose(Application.Transpose(Ar))
s = 0: Erase Ar
End If
Next
End With
Set d = Nothing
Set d1 = Nothing
Else
GoTo AA
End If
End Sub
複製代碼
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)