2017-07-09 37 views
0

代码有错误。当我调试时,它显示最后一行的错误。带对象的VBA代码所需的错误

Sub test() 
    WB_Master = ActiveWorkbook.Name 
    Dim ra As Range 
    open file 
    Workbooks.Open FileName:="X:\Projects\RPOC\Comparison\book1.xlsx" 
    WB_Source = ActiveWorkbook.Name 
    Workbooks(WB_Source).Activate 
    Worksheets("sheet1").Activate 
    ' set value to ra. Is it correct? 
    Set ra = Range("c2") 

    Workbooks(WB_Source).Close SaveChanges:=False 


    Workbooks(WB_Master).Activate 

    Worksheets("sheet1").Activate 

    Set Range("k2").Value = ra.Value 

End Sub 

回答

1

你不能Set一个Value - 分配的对象引用时,只应使用Set关键字。 (例如,您Set ra = Range("c2")被分配一个参考Range("c2")到对象ra。)

因此改变

Set Range("k2").Value = ra.Value 

Range("k2").Value = ra.Value 

因为你也是关闭包含该工作簿在您使用它之前,您的ra变量所指的范围,您也会遇到问题。我已经重构你的代码来解决这个问题:

Sub test() 
    Dim WB_Source As Workbook 
    Dim WB_Master As Workbook 

    Set WB_Master = ActiveWorkbook 
    Set WB_Source = Workbooks.Open(FileName:="X:\Projects\RPOC\Comparison\book1.xlsx") 

    WB_Master.Worksheets("sheet1").Range("k2").Value = _ 
     WB_Source.Worksheets("sheet1").Range("c2").Value 

    WB_Source.Close SaveChanges:=False 
End Sub 

(注:我改变了你的WB_SourceWB_Master变量被Variant/String到被Workbook。)

+0

我认为这是分配'范围(“C2” )对变量范围'ra'的对象引用。 – L42

+0

它仍然没有工作。 – zhenhao

+1

@ Zhenhao Ohhh - 您正在关闭工作簿!我没有注意到这一点。只需一秒钟,我会更新答案。 – YowE3K