成语大全网 - 成语解释 - 求vb大神帮我翻译下vb代码

求vb大神帮我翻译下vb代码

Sub 数据匹配()

Dim arr, brr

Set d = CreateObject("scripting.dictionary") '建立一个字典对象d

Set d1 = CreateObject("scripting.dictionary") '建立一个字典对象d1

For Each sh In ThisWorkbook.Worksheets '在当前的工作簿中查找工作表名不为"合并"的工作表

If sh.Name <> "合并" Then '如果找到工作表名不为"合并"的工作表则做下面的工作:比较合并

m = 0: n = 0

arr = sh.[a1].CurrentRegion '把当前工作表的内容赋给数组arr

For i = 2 To UBound(arr) '把当前工作表的第2列内容作为字典d标志,并给他赋值i,估计第2列里的内容是标志性的

d(arr(i, 2)) = i

Next i

For j = 2 To UBound(arr, 2) '把当前工作表的第1行内容作为字典d1标志,并给他赋值j,估计第1行是标题行

d1(arr(1, j)) = j

Next j

f = Dir(ThisWorkbook.Path & "\" & sh.Name & ".xls*") '在当前工作簿目录下查找以当前工作表名称命名的工作簿

If f = "" Then GoTo 100 '如果在当前工作簿目录下没有找到"合并"命名的工作簿,那就跳出

Set wb = Workbooks.Open(ThisWorkbook.Path & "\" & f) '找到的话,就打开工作簿

brr = wb.Worksheets(1).[a1].CurrentRegion '把打开工作簿中工作表1的内容赋给数组brr

For i = 2 To UBound(brr) '把根据字典d,d1中存储的标志信息和值,进行比对查找

m = d(brr(i, 1))

Debug.Print i; m

For j = 2 To UBound(brr, 2)

n = d1(brr(1, j))

Debug.Print j; n

If m <> "" And n <> "" Then '如果在字典d,d1中找到存储的标志信息,则更新相应的arr中存储的值

arr(m, n) = brr(i, j)

Debug.Print "zd:"; arr(m, n)

End If

Next j

Next i

wb.Close False

sh.[a1].CurrentRegion = arr? '把比对更新后arr中存储的值重新赋值给当前工作表,完成比对更新!

End If

Next sh

100:

'MsgBox "pk"

End Sub

比如有这样的2个工作簿:

在sdd1.xls中就可以运行宏来更新各个学生的各科目成绩!并且在SS合并中学号和学科名称可以任意排列:如下: