VBA:我收到以下错误:运行时错误“1004”应用程序定义或对象定义的错误(VBA: I get t

2019-11-01 07:22发布

目前的问题:

用我的代码部分工作,直到我添加额外的数据到Sheet2,现在当它失败和调试送我去:

Set partsheet = Worksheets("Sheet1").Range("A1", Range("A65536").End(xlUp)) 

这段代码的工具:

我基本都在不同工作表两列:我想比较与同类时,进口数据:

工作表Sheet1 - COLUMN1是工号

工作表Sheet1 - 列2是一个零件号

同样的工作号码,你可以有多个部件 - 这意味着就业人数重演在列1

Sheet2中 - COLUMN1是同样的工作号作为工作表Sheet1但数据是永不重复

Sheet2中 - 列2是具体到每个岗位数(所以为什么在这种情况下,就业数字不重复自己)的ID号

因此,我想导入Sheet2中的数据 - 列2使用COMMUN就业数据作为参考点。 当我将数据导入到工作表Sheet1 - 栏3的唯一ID号将不得不重复自己的就业数字在列1(Sheet1中)被重复 - 因此双for循环。

我的意思用来部分工作:

要开始使用代码只部分地工作,我认为这是由于这样的事实:在Sheet1中某项工作号码 - COLUMN1在Sheet2中没有相应的值 - 列1(数据心不是完美的)。 也许我需要为if语句的其他部分,但林不知道添加代码。

VBA代码:

Option Explicit

Sub testFil()
    Dim Jobref_in_partsheet As Range
    Dim Jobref_in_jobsheet As Range
    Dim partsheet As Range
    Dim jobsheet As Range
    Dim MyRow As Long
    Dim MyOtherRow As Long

    Set partsheet = Worksheets("Sheet1").Range("A1", Range("A65536").End(xlUp))
    Set jobsheet  = Worksheets("Sheet2").Range("A1", Range("A65536").End(xlUp))

    For Each Jobref_in_partsheet In partsheet
        For Each Jobref_in_jobsheet In jobsheet
            If Jobref_in_partsheet.Value = Jobref_in_jobsheet.Value Then
                MyRow = Jobref_in_partsheet.Row
                MyOtherRow = Jobref_in_jobsheet.Row
                Worksheets("Sheet1").Cells(MyRow, 3) = Worksheets("Sheet2").Cells(MyOtherRow, 2)
            Else
                 'Do nothing
            End If
        Next
    Next
End Sub

我真的很感谢所有帮助我能得到。

Answer 1:

Worksheets("Sheet1").Range("A1", Range("A65536").End(xlUp))

这里有一个问题:你要创建一个Range对象,其中第一单元是A1的的Sheet1 ,和最后一个单元格在列中使用的最后一个单元A在活动工作表。 正如可以猜测, Sheet1和活性片可以是不同的片材,并且不能创建属于多个片材的范围内。

你应该为你的最后一个单元格明确提供父表:

Worksheets("Sheet1").Range("A1", Worksheets("Sheet1").Range("A65536").End(xlUp))

使用.Address是不是一个真正的解决方法,因为它可能导致地址从一个表中取出要对另一片使用。



Answer 2:

答案更新:

我认为这可能使用= VLOOKUP,这仅仅是一个正常的Excel功能更容易实现。 基本上你会想这个公式适用于在Sheet1行C.每一个细胞

'Psudeo Code
=VLOOKUP([look up value] A1, [range to look in] Sheet2!A:B, [row to return] 2, [use exact match] false)

你需要使用它之前VLOOKUP读了,但我希望我的伪代码一点可以告诉你,如果你能真正地使用它你的目的。 如果要实现它就像我说的话,基本上将使用第一个值(A1)来查找另一个范围的东西(A的第一列:B)。 如果找到一个匹配它会返回什么是在第二列(因此2,所以A的柱B:B)。 假只是告诉你不希望类似的比赛节目,你只希望是完全一样的比赛。

是啊,VLOOKUP是混乱的,因为所有出去,但它是非常有用的。

这将是比使用VBA做同样的任务要容易得多。 我想这可能会或可能不会真正回答你的问题,但我想我把它只是柜面你没有考虑它。

老了,错了,回答:

我倾向于以确保建立一个范围时,我把一切都为字符串。 例如:

Set partsheet = Worksheets("Sheet1").Range("B1:" & Range("B65536").End(xlUp).Address)

范围(“B65536”)。完(xlUp)。地址将返回表示列顶部的地址字符串。 如果,例如,顶部是 “B31”,然后 “B1:” &范围( “B65536”)结束(xlUp)。地址应该返回 “B1:B31” 作为范围。



文章来源: VBA: I get the following error: run-time error '1004' Application-defined or object-defined error