尝试调试时的限定符错误以及最终行 - 请帮忙

时间:2014-08-03 21:23:02

标签: excel vba

以下是我从各种示例中汇总的代码,以尝试实现我的目标。概念是动态的,并从我的工作簿中的调查表中检索,以便能够获得相应的MD的TVD - 如果在B列中存在深度,则仅使用while循环来运行代码。嵌套循环使用深度之间的差异来计算渐变。 ---我遇到的问题是越过我的第一个调试错误“无效限定符”。 ----最后,关于如何在嵌套循环中将TVD返回到A列(与查找的MD相关)以保持抓取MD的行的任何建议。很抱歉让这个如此罗嗦,在工作期间已经工作了10多个小时。

http://www.wellog.com/tvd.htm

Sub MdtoTVD()

Dim MD1 As String, MD2 As Integer
Dim TVD1 As String, TVD2 As Integer
Dim Srng As Range 'Survey MD column
Dim MDrng As Range 'MdtoTVD MD column as range
Dim MDdiff As Integer ' Var to calculate difference of MD end from MD start
Dim TVDdiff As Integer ' Var to calculate difference of TVD end from TVD start
Dim TVDincr As Double ' var to use for stepping TVD
Dim MDrow As Integer
Dim i As Long

MDrng = Range("Surveys!B27:B215") 'range from the survey sheet within my report book
Srng = Range("Surveys!G27:G215") 'range from the survey sheet within my report book



Dim X As Integer
X = 2
While Not (IsEmpty(Sheets("MDtoTVD").Cells(X, 2).Value)) 'runs loop as long as there a MD depth to be looked up
Cells(X, 2) = MDrow 'assigns current row value to for MD input
MD1.Value = Application.WorksheetFunction.Index(Srng, Application.WorksheetFunction.Match(MDrow, MDrng, 1)) ' retrieves Start point for MD
MD2.Value = Application.WorksheetFunction.Index(Srng, Application.WorksheetFunction.Match(MDrow, MDrng, 1) + 1) 'retrieves end point for MD
TVD1.Value = Application.WorksheetFunction.Index(MDrng, Application.WorksheetFunction.Match(MDrow, Srng, 1)) 'retrieves start point for TVD
TVD2.Value = Application.WorksheetFunction.Index(MDrng, Application.WorksheetFunction.Match(MDrow, Srng, 1) + 1) 'retrieves end point for TVD
MDdiff.Value = (MD2 - MD1) 'assigns and calculates difference of MD end from MD start
TVDdiff.Value = (TVD2 - TD1) 'assigns and calculates difference of TVD end from TVD start
TVDincr.Value = MDdiff / TVDdiff 'Divides MD by TVD to get increment per foot

For i = 1 To MDdiff Step TVDincr 'set max loop run to amount of feet between survey points
Cells(X, 1).Value = TVD1 + i 'uses the loop to increment the TVD from start point
Next i

Wend
End Sub

1 个答案:

答案 0 :(得分:0)

我可以看到您的代码存在许多问题:

  1. MD1MD2TVD1TVD2都是String类型。此外,MDdiffTVDdiffTVDIncr都是Integer类型。未为字符串或整数变量定义属性Value。只需从所有这些文件中删除.Value,您就不会收到"Invalid Qualifier"错误。

  2. 执行上述操作后,以下行将显示有关类型不匹配的其他错误:

    MDdiff = (MD2 - MD1)
    TVDdiff = (TVD2 - TD1)
    

    因为你试图从另一个字符串中减去一个字符串并将结果赋值给一个整数。不知道在那里建议什么,你必须考虑你想要实现的目标并采取相应的行动。也许他们不应该首先成为字符串?我不知道,由你来决定。

    至少,如果您确实通过执行CInt(string_var)或使用CLng转换为long来确定它们是整数的字符串表示形式,则可以将字符串转换为整数。如果字符串不是整数的字符串表示形式,并且您尝试将它们转换为整数,则会出现类型不匹配错误。

  3. Range对象分配值时,需要使用Set。所以:

    Set MDrng = Range("Surveys!B27:B215")
    Set Srng = Range("Surveys!G27:G215")
    

    正确设置范围。

  4. 另一个问题是您没有为X分配值,但您将其用作单元格索引。默认情况下,VBA中未初始化的数字变量会被赋值为0,因此执行.Cells(X, 2)会失败,因为row 0不是有效的行索引。

  5. 在这一行:

    TVDincr = MDdiff / TVDdiff
    

    你将两个整数分开,然后将结果分配给另一个整数。请注意,如果除法的结果恰好是小数(如3 / 2 = 1.5),则TVDincr整数实际上只包含1,即您会失去一些精度。我不明白你的代码,知道它是否合适,你必须自己判断,我指出它以防万一你不知道。< / p>

    此外,如果TVDdiff恰好是0,那么您将获得零&#34;除以&#34;错误。

  6. For循环中的这一行:

    Cells(X, 1).Value = TVD1 + i
    

    也会产生错误,因为您尝试以数字方式添加TVD1(字符串)和i(长)。也许您正在尝试连接这两者,在这种情况下,您应该将+替换为&

  7. 调用WorksheetFunction时也存在问题,但我无法确定原因。可能如果你修复了其他错误,那么它就会更容易理解发生了什么,但不确定。你只需要调查一下。