gpt4 book ai didi

vba - Excel VBA 编辑器中的 UDF 仅在需要 Double 时返回零

转载 作者:行者123 更新时间:2023-12-04 22:00:40 24 4
gpt4 key购买 nike

此函数旨在计算闭合导线的面积。当写成一个 sub 并分配给一个特定的单元格时,sub 工作得很好。但是,当用作函数时(如下所示),它仅返回零。为什么?
'功能设计用于容纳任意数量的横断面

Public Function TraverseArea() As Double
Dim Area As Double
Area = 0
Range("N2").Select
Area = (ActiveCell.Value * (Range("M2").End(xlDown).Offset(-1, 0).Value - ActiveCell.Offset(1, -1).Value))
ActiveCell.Offset(1, 0).Select

While ActiveCell.Offset(1, -1) <> ""
Area = Area + (ActiveCell.Value * (ActiveCell.Offset(-1, -1).Value - ActiveCell.Offset(1, -1).Value))
ActiveCell.Offset(1, 0).Select
Wend
If Area < 0 Then
Area = Area * -1
End If
Area = Area / 2
TraverseArea = Area
End Function

最佳答案

我没有你的数据或工作表结构,所以这完全是我的想法,但这应该让你了解如何在不使用硬编码范围的情况下实现你的功能。

Sub TestFunction()
MsgBox TraverseArea(Range("N2"), Range("M2").End(xlDown).Offset(-1, -1))
End Sub

Public Function TraverseArea(MyRange As Range, MySecondRange As Range) As Double
Dim Area As Double, lr As Long, X as long
lr = Cells(Rows.Count, MyRange.Column).End(xlUp).Row
Area = (MyRange.Value * (MySecondRange.Value - MyRange.Offset(1, -1).Value))
For X = MyRange.Row To lr
If Cells(X, MyRange.Column - 1) = "" Then Exit For
Area = Area + (ActiveCell.Value * (ActiveCell.Offset(-1, -1).Value - ActiveCell.Offset(1, -1).Value))
Next
If Area < 0 Then Area = Area * -1
Area = Area / 2
TraverseArea = Area
End Function

这很可能需要一些调试,但应该足以让您了解我在之前关于使用单元格引用而不选择它们的评论中要说的内容。

关于vba - Excel VBA 编辑器中的 UDF 仅在需要 Double 时返回零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35400436/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com