|
本帖最后由 spp0063 于 2016-11-11 16:36 编辑
你好,
因工作需求,我才刚接触VBA,目前我已修改按下按钮字可自动输入批号并搜寻批号并复制至巡检表内,有3个问题想询问大家帮忙!==========================================================================
需求说明:
按下"搜寻按钮",会自动筛选"输入表"A栏所有批号,并自动加入到"巡检表"(不管我的"输入表"内资料有多少批,只要找到相同批号资料,将资料依序补满到"巡检表"的F4:J18储存格内,补满至五格为止(空白跳过不补资料)),所需表格内
(例如:批号为DW0R-17000002-FQC1/DW0R-17000002-0522/DW0R-17000002-FQC, 输入17000002 会自动搜寻三笔资料)
==========================================================================
1.若程式想修改为最后一栏改成只要抓两笔资料,即输入表内的AV:AU(巡检表F18:G18),需修改哪些地方
注:程式已设定范围 --> Set ToRange = Range("F4:J18") 当我抓取资料会抓取到范围外的资料这是为何?
2.若我想将资料移动位置(例如往上移动, 往下移动),修改程式码那?
3.机台编号我一直无法抓到, 是公式用错吗?
4.因搜寻批号资料太多,程式是否可以改成更快速?
==========================================================================
程式码 :
Private Sub CommandButton1_Click()
Dim R As Integer, C As Integer, O As Integer
Dim SC_Area As Range, AreaRange As Range, ToRange As Range, FRange As Range, x
Dim tmpArr()
Set ToRange = Range("F4:J18")
ReDim tmpArr(ToRange.Rows.Count - 1, 4)
'ReDim
ToRange.ClearContents
With Worksheets("輸入表").UsedRange
x = InputBox("請輸入批號 [ Please enter Lot ID ]", "請輸入批號 [Please enter Lot ID ]")
Sheets("巡檢表").Range("I2") = "DW01-" & x
Set FRange = .Range("E6:AV6")
.AutoFilter
.AutoFilter Field:=1, Criteria1:="????-" & x & "-????", Operator:=xlOr, _
Criteria2:="????-" & x & "-???"
For R = 0 To ToRange.Rows.Count - 1
C = 0
For Each SC_Area In .Offset(FRange.Row - 1, FRange.Column - 1 + (R * 3)).Resize(, 3) _
.SpecialCells(xlCellTypeVisible).Areas
For Each AreaRange In SC_Area
If C >= 5 Then
Exit For
ElseIf AreaRange.Text <> "" Then
tmpArr(R, C) = AreaRange.Text
C = C + 1
End If
Next AreaRange
Next SC_Area
Next R
.AutoFilter
End With
ToRange = tmpArr
End Sub
==========================================================================
1、只需重新定义ToRange即可
2、把If n(k) <= 5 Then tmpArr(k, n(k)) = arr(i, j + jj) 改为
If n(k) <= 3 Then tmpArr(k, n(k)) = arr(i, j + jj)
即为抓取3笔资料
3、代码解释如下:
- Private Sub CommandButton1_Click()
- Dim i, j, jj, k, x, LotNo
- Dim ToRange As Range
- Dim tmpArr(), n(), arr
- Set ToRange = Range("F4:J18")
- ReDim tmpArr(1 To ToRange.Rows.Count, 1 To 5)
- ReDim n(1 To ToRange.Rows.Count) '数组n记录每组数的记录位置
- ToRange.ClearContents
- x = InputBox("請輸入批號 [ Please enter Lot ID ]", "請輸入批號 [Please enter Lot ID ]")
- With Worksheets("輸入表") '读入数据源
- arr = .Range("a1:av" & .[a65536].End(3).Row)
- End With
- For i = 6 To UBound(arr)
- LotNo = arr(i, 1) '批号
- If InStr(LotNo, x) > 0 Then '批号中含输入框内容
- Range("I2") = LotNo 'I2显示为批号(这样vlookup结果就正确了,但当符合条件的有多条记录时,会只显示最后一条记录的批号)
- For j = 5 To 47 Step 3 'E列到AU列
- k = (j - 2) / 3 '根据源数据的列转换到tmparr的行
- For jj = 0 To 2 '每列共3列需录入tmpArr(最后一次2列)
- If j + jj <= UBound(arr, 2) Then '限定边界(最后一次只计算AU--AV列)
- If arr(i, j + jj) <> "" Then '如果数据源需录入的列非空
- n(k) = n(k) + 1 'tmpArr对应行每组的记录位置+1
- If n(k) <= 5 Then tmpArr(k, n(k)) = arr(i, j + jj) '源数据保存到记录位置(最多只保存5个)
- End If
- End If
- Next jj
- Next j
- End If
- Next i
- ToRange = tmpArr '显示结果
- End Sub
复制代码
|
|