2015-11-02 308 views
0

我遇到了运行过去曾工作过的VBA脚本的问题。代码尝试从已经生成的数据库和Excel表中获取数据,然后运行更多计算来创建可用的统计信息。这部分是在错误出现在:“运行时错误91”设置变量

Dim strCat, strPlan, strCustodian As String 
Dim i, lAssets As Long 
Dim cn As ADODB.Connection, rs As ADODB.Recordset 'ms access connection 
Public Const cnnstr As String = "Provider=Microsoft.ACE.OLEDB.12.0; " & _ 
     "Data Source=G:\OADBO.accdb;" 
Dim rngA, rngB As Range 
Option Explicit 

Private Sub MapExisting() 

Set rngA = wsEntry.Range("A1") 



For i = 1 To WorksheetFunction.CountIf(wsEntry.Columns(1), "*") - 1 
Set rngB = wsMapping.Range("B1") 


Set rngA = wsEntry.Columns(1).Find(What:="*", After:=rngA, _ 
    LookIn:=xlValues, LookAt:=xlWhole, _ 
    SearchOrder:=xlByRows, SearchDirection:=xlNext, _ 
    MatchCase:=False) 


    strCat = rngA.Offset(0, 2).Value 
    lAssets = rngA.Offset(0, 1).Value 


Call UnprotectSheets 


    Set rngB = wsMapping.Columns(2).Find(What:=strCat, After:=rngB, _ 
     LookIn:=xlFormulas, LookAt:=xlPart, _ 
     SearchOrder:=xlByRows, SearchDirection:=xlNext, _ 
     MatchCase:=False) 


     rngB.End(xlUp).Offset(1, 0).Value = rngA * <——ERROR IS HERE * 
     rngB.End(xlUp).Offset(0, 3).Value = lAssets 

Jump: 
Next i 

'finds all empty rows and keeps as range- then hides all in range 
'Call Hiderows 

Call ProtectSheets 

Application.ScreenUpdating = True 

wsMapping.Activate 



End Sub 
+0

添加细节错误,包括它的确切位置在这段代码中出现故障时,问题的主体,使人们更容易帮助您。 – Greg

+0

为什么设置'rngA'只能在3行之后改变它?此外,你意识到你的大部分变量是声明类型变体是? – findwindow

回答

1

如果第一个查找操作失败,rngA将被设置为Nothing。

如果发生这种情况,当您将其分配时(错误在此处的行)会出现错误。

您可以检查此像这样:

If rngA Is Nothing Then 
+0

@Lee是否为您工作? –

相关问题