2017-02-17 17 views
0

我想抓住一个工作表中的某一列,并且(最终..没有编写代码)将它复制到另一个工作簿中的另一个工作表中。我得到一个运行时错误91,当我试图找到办法解决它,我会得到一个运行时错误1004使用特定工作表并选择范围;运行时错误91

Sub User_Rolee() 
    Dim UserRoleWkb As Workbook, ConfigWkb As Workbook, UserRoleWkst As Worksheet, ConfigWkst As Worksheet 
    Set UserRoleWkb = Workbooks.Open("C:\Users\clara\Desktop\S_User_Role_Map_TEMPLATE_V2_BLANK.xlsx") 
    Set ConfigWkb = ActiveWorkbook 
    'Set ConfigWkb = Workbooks.Open("C:\Users\clara\Desktop\Configuration Workbook - Paramaribo.xlsm") 
    Set UserRoleWkst = UserRoleWkb.Sheets("Users") 
    Set ConfigWkst = ConfigWkb.ActiveSheet 
    Dim rng, rnga As Range 

    With ConfigWkst 
     Set rng = .Columns(2).Find(What:="Procurement Agent") 
     Set rnga = .rng.Offset(1) 'runtime error 91 
     Set rngar = .Range(rnga, rnga.End(xlDown)).Select 
    End With   
End Sub 
+0

在调用'.Offset'之前,您需要检查'Is Nothing'的查找结果。 – Comintern

+1

将“Set ConfigWkb = ActiveWorkbook”更改为“Set ConfigWkb = ThisWorkbook”。在打开* THAT *活动工作簿的行之前打开UserRoleWkb。 *编辑*为良好的做法也定义为范围,逗号分隔昏暗不要继承你最后一个状态。 – Zerk

+1

使用'Set ConfigWkst = ConfigWkb.ActiveSheet'风险太大且不可靠,您最好使用'Set ConfigWkst = ConfigWkb.Worksheets(“YourSheetName”)' –

回答

0

按照上面我的意见,尝试下面的代码:

(见我在最后一行的评论中,你也从未在任何地方定义过rngar)。

Option Explicit 

Sub User_Rolee() 

Dim UserRoleWkb As Workbook, ConfigWkb As Workbook, UserRoleWkst As Worksheet, ConfigWkst As Worksheet 
Dim rng As Range, rnga As Range, rngar As Range 

Set UserRoleWkb = Workbooks.Open("C:\Users\clara\Desktop\S_User_Role_Map_TEMPLATE_V2_BLANK.xlsx") 
Set ConfigWkb = ThisWorkbook 

'Set ConfigWkb = Workbooks.Open("C:\Users\clara\Desktop\Configuration Workbook - Paramaribo.xlsm") 
Set UserRoleWkst = UserRoleWkb.Sheets("Users") 
Set ConfigWkst = ConfigWkb.Worksheets("Sheet1") '<-- modify "Sheet1" to your sheet's name 

With ConfigWkst 
    Set rng = .Columns(2).Find(What:="Procurement Agent") 

    If Not rng Is Nothing Then '<-- find was successful 
     Set rnga = rng.Offset(1) 
     Set rngar = Range(rnga, rnga.End(xlDown)) 
     rngar.Copy '<-- copy the Range 
    End If 
End With 
End Sub 
+0

@gksdmsgP你看过我的回答和上面的代码吗?任何反馈 ? –

+0

谢谢!至于最后一行的注释,我试图从rnga中选择所有的单元格到rnga.End(xlDown)。我的代码如下:Set rngar = Range(rnga,rnga.End(xlDown))。 .Select会带来另一个错误。我也继续解决我的代码,将rngar定义为一个范围。我选择了所有这些单元格,因为最终我想将其复制到另一个工作簿。我的rngar代码是否朝着正确的方向发展?再次感谢! – gksdmsgP

+0

@ gksdmsgP如果你拿走了我的代码,并使用它应该工作,不是吗? –