【问题标题】:"Run time error 91" setting variable [duplicate]“运行时错误91”设置变量[重复]
【发布时间】:2015-11-03 07:54:27
【问题描述】:

我在运行过去有效的 VBA 脚本时遇到问题。该代码试图从数据库和已生成的 Excel 工作表中获取数据,然后运行更多计算以创建可用的统计数据。这部分是错误出现的地方:

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 

【问题讨论】:

  • 在问题的主体中添加错误的详细信息,包括此代码中失败的确切位置,以便人们更容易地帮助您。
  • 为什么设置rngA 只在3 行后更改它?另外,你意识到你的大部分变量都是声明类型变体是吗?

标签: vba excel


【解决方案1】:

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

如果发生这种情况,您在分配时会收到错误消息(显示 ERROR IS HERE 的行)。

你可以这样检查:

If rngA Is Nothing Then

【讨论】:

  • @Lee 这对你有用吗?
猜你喜欢
  • 2015-03-09
  • 1970-01-01
  • 2016-10-07
  • 2017-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多