我没时间去调试了,下面是 关键代码
Dim s As String
'所的数据
Dim f1() As String
'第一行分解结果
Dim f() As String
'所有行数据
Dim ft() As String
'当前行
xl.Workbooks.Open (Dir1.Path & "\" & File1.List(z2))
'打开文件
xl.Workbooks(1).Sheets(1).Range("A1:AW65535").Copy
'复制全部内容,行号用了最大的。使用 ET 测试最后有一个空行,但不会出现过多的空行
s = Clipboard.GetText
'取文本
f = Split(s, vbCrLf)
'分解成行
f1 = Split(f(0), vbTab)
'第一行
ft = Split(f(y2), vbTab)
'每一行
因为每行分解后的数据是不保留的,所以循环要变化一下,如果你变化不了,那就按你前面的循环,每次重新分解数据吧。
第一层:文件
第二层:每一行
第三层:每个选择的字段
第四层:对应的每个行次里的字段。使用序号
---------------------------
你原来代码里优化:
For y2 = 5 To (st.UsedRange.Rows.Count - 4)
If st.Cells(y2, 4).Value = "1" Then
tmpl = st.Cells(y2, x2).Value
'先取值,其实按下面优化了,不用再多这一个变量也行
Select Case st.Cells(y2, 2).Value
'代替原来的 多个IF
Case "0"
a2 = a2 + tmpl
Case "1"
b2 = b2 + tmpl
Case "2"
c2 = c2 + tmpl
Case "3"
d2 = d2 + tmpl
Case "4"
e2 = e2 + tmpl
Case "5"
f2 = f2 + tmpl
Case "6"
g2 = g2 + tmpl
Case "7"
h2 = h2 + tmpl
End Select
End If
Next y2
Exit For
'本次计算完毕,退出当前查找字段
End If