首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带斜率函数的无效限定符错误

带斜率函数的无效限定符错误
EN

Stack Overflow用户
提问于 2016-04-13 19:24:00
回答 2查看 196关注 0票数 0

对于VBA来说是新的,并获得了一个代码的限定符错误,该代码应该计算两个数组的斜率,并将其放在具有给定地址的列中。

到目前为止我被打败了,所以很高兴能得到一些帮助!数组的大小是匹配的。

编译错误出现在.Slope中的TargetSheet.Cells(n, (MyRange.Columns.Count) + 1).Value = Application.WorksheetFunction.Slope(TargetSheet.Range(TargetSheet.Cells(n, 5), TargetSheet.Cells(n, MyRange.Columns.Count)), TargetSheet.Range(TargetSheet.Cells(1, 5), TargetSheet.Cells(1, MyRange.Columns.Count))).Value中。

代码语言:javascript
运行
复制
Dim n As Long
Dim MyRange As Range
Set MyRange = ActiveSheet.UsedRange
Dim TargetSheet As Worksheet, SourceSheet As Worksheet
Dim TargetBook As Workbook

Set TargetBook = Application.ActiveWorkbook
Set TargetSheet = Application.ActiveSheet

For n = 3 To MyRange.Rows.Count

    TargetSheet.Cells(n, (MyRange.Columns.Count) + 1).Value = Application.WorksheetFunction.Slope(TargetSheet.Range(TargetSheet.Cells(n, 5), TargetSheet.Cells(n, MyRange.Columns.Count)), TargetSheet.Range(TargetSheet.Cells(1, 5), TargetSheet.Cells(1, MyRange.Columns.Count))).Value

Next n

End With
End Sub

在此之前的版本(直到那个点:/)才开始工作,直到停止并给出限定符错误为止。我在数据集中使用了Excel的斜率函数,并与之进行了比较:它在#DIV/0结果中给出了这个错误(但是VBA没有显示出来)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-14 06:45:22

谢谢你,老丑!设法修复了错误。VBA的原因:自动处理相同格式的多个数据表,并更改no。列和行。

当只有一个数据点而一个数组的其余部分为空时,WorksheetFunction.Slope不喜欢这样做。

我创建了另一个循环来计算For循环中每一行的非空单元格。如果没有。对于特定行的非空单元格是<2,输出将是“不足的数据”。

如果没有,则计算斜率值。

另一个不那么费力的解决这个问题的方法就是简单地使用On Error Resume Next来处理这个特定的情况。

代码语言:javascript
运行
复制
Dim n As Long, o As Range, CurrentRow As Range, NonEmptyCellCountRow As Integer


For n = 3 To MyRange.Rows.Count `Within each row, counting non-empty cells

    Set CurrentRow = TargetSheet.Range(TargetSheet.Cells(n, 5), TargetSheet.Cells(n, MyRange.Columns.Count))

    NonEmptyCellCountRow = 0

    For Each o In CurrentRow

        If o.Value <> "" Then NonEmptyCellCountRow = NonEmptyCellCountRow + 1

    Next o

    If NonEmptyCellCountRow < 2 Then _

        TargetSheet.Cells(n, (MyRange.Columns.Count) + 1) = "Insufficient Data"

    Else

        TargetSheet.Cells(n, (MyRange.Columns.Count) + 1) = Application.WorksheetFunction.Slope(TargetSheet.Range(TargetSheet.Cells(n, 5), TargetSheet.Cells(n, MyRange.Columns.Count)), TargetSheet.Range(TargetSheet.Cells(1, 5), TargetSheet.Cells(1, MyRange.Columns.Count)))

    End If

Next n
票数 0
EN

Stack Overflow用户

发布于 2016-04-13 23:26:43

如前所述,从斜率调用中删除.Value允许它传递编译器。

否则,它似乎起作用了。

这个输入..。

如果这个输出..。

使用此代码(稍微修改以获得正确的列) ..。

代码语言:javascript
运行
复制
Sub main()
Dim n As Long
Dim MyRange As Range

Set MyRange = ActiveSheet.UsedRange
Dim TargetSheet As Worksheet, SourceSheet As Worksheet
Dim TargetBook As Workbook

Set TargetBook = Application.ActiveWorkbook
Set TargetSheet = Application.ActiveSheet

For n = 2 To MyRange.Rows.Count

    TargetSheet.Cells(n, (MyRange.Columns.Count) + 1).Value = _
        Application.WorksheetFunction.Slope(TargetSheet.Range(TargetSheet.Cells(n, 1), TargetSheet.Cells(n, MyRange.Columns.Count)), _
        TargetSheet.Range(TargetSheet.Cells(1, 1), TargetSheet.Cells(1, MyRange.Columns.Count)))

Next n

End Sub

下面是修改后的代码,用于捕获只有1Y值时的情况,以避免被零除。这假设工作表中的第1行在标题右侧没有任何内容。

代码语言:javascript
运行
复制
Option Explicit

Sub main()
Dim n As Long
Dim MyRange As Range
Dim nRows As Long, nCols As Long, ColCount As Long

Set MyRange = ActiveSheet.UsedRange
Dim TargetSheet As Worksheet, SourceSheet As Worksheet
Dim TargetBook As Workbook

Set TargetBook = Application.ActiveWorkbook
Set TargetSheet = Application.ActiveSheet

nRows = MyRange.Rows.Count
nCols = MyRange.Rows(1).End(xlToRight)

For n = 2 To nRows

    ColCount = Application.CountIf(TargetSheet.Range(TargetSheet.Cells(n, 1), Sheet1.Cells(n, nCols)), """<>""""""")
    If ColCount > 1 Then
        TargetSheet.Cells(n, (MyRange.Columns.Count) + 1).Value = _
            Application.Slope(TargetSheet.Range(TargetSheet.Cells(n, 1), TargetSheet.Cells(n, MyRange.Columns.Count)), _
            TargetSheet.Range(TargetSheet.Cells(1, 1), TargetSheet.Cells(1, MyRange.Columns.Count)))
    End If
Next n

End Sub
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36607762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档