Excel VBA范围(单元格)。值=总和1004:应用程序定义或对象定义

Excel VBA范围(单元格)。值=总和1004:应用程序定义或对象定义,vba,excel,user-defined-functions,Vba,Excel,User Defined Functions,我想增加或减少选定范围的单元格值。 我在RangeCell2行中遇到错误。Value=Sum 编辑 thanx表示回复,在RangeCell2.Value=Sum行中,Cell2指向单元格地址,如$E$6。 如果有其他选项,请告诉我范围函数输入是单元格地址,例如,范围A1:b2;g1:h4,您不能在其中输入某些结果。范围函数输入是单元格地址,例如,范围A1:b2;g1:h4,您不能在其中输入某些结果。好的,米希尔。不能使用自定义项用户定义的函数修改其他单元格,而不能使用公式所在的单元格。但是,

我想增加或减少选定范围的单元格值。 我在RangeCell2行中遇到错误。Value=Sum

编辑 thanx表示回复,在RangeCell2.Value=Sum行中,Cell2指向单元格地址,如$E$6。


如果有其他选项,请告诉我范围函数输入是单元格地址,例如,范围A1:b2;g1:h4,您不能在其中输入某些结果。

范围函数输入是单元格地址,例如,范围A1:b2;g1:h4,您不能在其中输入某些结果。

好的,米希尔。不能使用自定义项用户定义的函数修改其他单元格,而不能使用公式所在的单元格。但是,有一个解决方法,就是从一个sub调用你的函数。我会告诉你怎么做。 打开一个新工作簿,使电子表格如下图所示。 在表1的A列中填写一些随机数 然后打开VBE并创建一个新的模块Project Explorer>Insert>module并从下面粘贴代码

Function ChangeColVal(ByVal Rng As Range, ByVal ValueToChange As Integer)
    Dim Cell1, Cell2 As String
    Dim PosOfColon, TotalCell, Sum As Integer
    PosOfColon = InStr(1, Rng.Address, ":")
    Cell1 = Left(Rng.Address, PosOfColon - 1)
    Cell2 = Right(Rng.Address, Len(Rng.Address) - PosOfColon)
    If Left(Cell1, 2) = Left(Cell2, 2) Then
        TotalCell = Rng.Count
        For i = 0 To TotalCell
            If IsNumeric(Range(Cell1).Offset(i, 0).Value) = False Then
                GoTo 112:
            End If
            Cell2 = Range(Cell1).Offset(i, 0).Address
            Sum = Range(Cell2).Cells.Value + ValueToChange
            On Error GoTo 111
            'Here getting error...
            Range(Cell2).Value = Sum
            GoTo 112
111:
            MsgBox (Err.Number & ":" & Err.Description)
112:
        Next i
    Else
        MsgBox ("Select Column only...")
    End If
End Function
然后,返回电子表格,用鼠标选择范围,如下所示: 好的,现在点击ALT+F8查看宏并运行ChangeColumnValue宏。 系统将提示您更改某个值,选定范围内的所有单元格都将按该值增减。 如果在提示框中键入5,则最终结果如下所示
祝你好运

好的,米希尔。不能使用自定义项用户定义的函数修改其他单元格,而不能使用公式所在的单元格。但是,有一个解决方法,就是从一个sub调用你的函数。我会告诉你怎么做。 打开一个新工作簿,使电子表格如下图所示。 在表1的A列中填写一些随机数 然后打开VBE并创建一个新的模块Project Explorer>Insert>module并从下面粘贴代码

Function ChangeColVal(ByVal Rng As Range, ByVal ValueToChange As Integer)
    Dim Cell1, Cell2 As String
    Dim PosOfColon, TotalCell, Sum As Integer
    PosOfColon = InStr(1, Rng.Address, ":")
    Cell1 = Left(Rng.Address, PosOfColon - 1)
    Cell2 = Right(Rng.Address, Len(Rng.Address) - PosOfColon)
    If Left(Cell1, 2) = Left(Cell2, 2) Then
        TotalCell = Rng.Count
        For i = 0 To TotalCell
            If IsNumeric(Range(Cell1).Offset(i, 0).Value) = False Then
                GoTo 112:
            End If
            Cell2 = Range(Cell1).Offset(i, 0).Address
            Sum = Range(Cell2).Cells.Value + ValueToChange
            On Error GoTo 111
            'Here getting error...
            Range(Cell2).Value = Sum
            GoTo 112
111:
            MsgBox (Err.Number & ":" & Err.Description)
112:
        Next i
    Else
        MsgBox ("Select Column only...")
    End If
End Function
然后,返回电子表格,用鼠标选择范围,如下所示: 好的,现在点击ALT+F8查看宏并运行ChangeColumnValue宏。 系统将提示您更改某个值,选定范围内的所有单元格都将按该值增减。 如果在提示框中键入5,则最终结果如下所示
祝你好运

最后,这里是解决方案

Option Explicit

Sub ChangeColumnValue()

   Dim rng As Range
   Set rng = Selection

   Dim inp As String
   inp = InputBox("Value to change:")

   Call ChangeColVal(rng, CLng(inp))

End Sub

Private Function ChangeColVal(ByRef rng As Range, ByVal ValueToChange As Long)
    Dim Cell1, Cell2 As String
    Dim PosOfColon, TotalCell, Sum As Long
    PosOfColon = InStr(1, rng.Address, ":")
    Cell1 = Left(rng.Address, PosOfColon - 1)
    Cell2 = Right(rng.Address, Len(rng.Address) - PosOfColon)
    If Left(Cell1, 2) = Left(Cell2, 2) Then
        TotalCell = rng.Count
        Dim i&
        For i = 0 To TotalCell - 1
            If Not IsNumeric(Range(Cell1).Offset(i, 0).Value) Then
                GoTo 112:
            End If
            Cell2 = Range(Cell1).Offset(i, 0).Address
            Sum = Range(Cell2).Cells.Value + ValueToChange
            On Error GoTo 111
            Range(Cell2).Value = Sum
            GoTo 112
111:
            MsgBox (Err.Number & ":" & Err.Description)
112:
        Next i
    Else
        MsgBox ("Select Column only...")
    End If
End Function

End Sub

最后,这里是解决方案

Option Explicit

Sub ChangeColumnValue()

   Dim rng As Range
   Set rng = Selection

   Dim inp As String
   inp = InputBox("Value to change:")

   Call ChangeColVal(rng, CLng(inp))

End Sub

Private Function ChangeColVal(ByRef rng As Range, ByVal ValueToChange As Long)
    Dim Cell1, Cell2 As String
    Dim PosOfColon, TotalCell, Sum As Long
    PosOfColon = InStr(1, rng.Address, ":")
    Cell1 = Left(rng.Address, PosOfColon - 1)
    Cell2 = Right(rng.Address, Len(rng.Address) - PosOfColon)
    If Left(Cell1, 2) = Left(Cell2, 2) Then
        TotalCell = rng.Count
        Dim i&
        For i = 0 To TotalCell - 1
            If Not IsNumeric(Range(Cell1).Offset(i, 0).Value) Then
                GoTo 112:
            End If
            Cell2 = Range(Cell1).Offset(i, 0).Address
            Sum = Range(Cell2).Cells.Value + ValueToChange
            On Error GoTo 111
            Range(Cell2).Value = Sum
            GoTo 112
111:
            MsgBox (Err.Number & ":" & Err.Description)
112:
        Next i
    Else
        MsgBox ("Select Column only...")
    End If
End Function

结束Sub

什么?他正在输入2号牢房的地址。我看没什么问题什么?他正在输入2号牢房的地址。我看不出它有什么问题我看不出你的函数本身有什么问题。由于您正在activesheet上执行所有范围函数,请确保您的活动工作表是您想要使用的。还有一件事-检查传递给函数的参数,因为它们可能会以某种方式导致错误-例如,将整数更改为Long/Double类型。并声明我能够在for循环中使用它。我不确定还有什么可能导致错误弹出:/因为“ValueToChange”用于保存小值,如0-1000,我用它声明为“Integer”。我还通过更改为Long来检查它,但仍然得到相同的错误。@mihirtatel:UDF试图实现什么?目的?我看你的函数本身没有问题。由于您正在activesheet上执行所有范围函数,请确保您的活动工作表是您想要使用的。还有一件事-检查传递给函数的参数,因为它们可能会以某种方式导致错误-例如,将整数更改为Long/Double类型。并声明我能够在for循环中使用它。我不确定还有什么可能导致错误弹出:/因为“ValueToChange”用于保存小值,如0-1000,我用它声明为“Integer”。我还通过更改为Long来检查它,但仍然得到相同的错误。@mihirtatel:UDF试图实现什么?意图