【发布时间】:2015-03-26 21:30:49
【问题描述】:
我正在尝试从头开始编写我的第一个宏。我在 Sheet2 上有一组 16 个表,模式中的列:ID 列表、空白、value1、value2、value3、value4、空白、下一个 ID 列表、空白、value1 等...
每个表中的 ID 都是唯一的,但每次都不相同,因此我正在尝试编写一个宏来将 ID 与 Sheet1 上的完整 ID 列表相匹配。如果有匹配项,我想将四个值列复制到 Sheet1 上的正确位置。否则只需输入一些零。
如果你还不能说,我是新手,不知道我在做什么!我越来越 在我尝试使用 .Find 的行上出现“应用程序定义或对象定义的错误”,如果有人能指出我哪里出错了,我将不胜感激?
Sub Macro1()
Dim i As Integer
Dim y As Integer
Dim index As Long
Dim UniverseCount As Integer
Dim ID As String
Dim Position As Range
'Count total number of IDs
Sheets("Sheet1").Select
Range("A2").Select
Range(Selection, Selection.End(xlDown)).Select
UniverseCount = Selection.Rows.Count
'Search loop
For y = 0 To 16
For i = 0 To UniverseCount
'Pick ID to look for
Sheets("Sheet1").Select
Range("A2").Offset(i, 0).Select
ID = Selection.Value
With Sheet2
Set Position = .Columns(7 * y).Find(What:=ID, After:=.Cells(1, 1), LookIn:=xlValues, LookAt:=xlWhole)
If Not Position Is Nothing Then
Position.Offset(0, 2).Select
Range(Selection, Selection.End(xlRight)).Select
Selection.Copy
Sheets("Sheet1").Range("A2").Offset(i, 2 + 4 * y).Select
ActiveSheet.Paste
Else
Sheets("Sheet1").Select
Range("A2").Offset(i, 2 + 4 * y).Select
Set Range(Selection, Selection.Offset(0, 4)).Value = 0
End If
End With
Next i
Next y
End Sub
【问题讨论】:
-
我认为使用 ADO 会容易得多。例如,您可以将每个表格范围作为一个带有 LEFT JOIN 的表格打开到 sheet1 上的主表格。如何准确地设置您的查询将取决于正在发生的事情以及您想要退出的内容。