简体   繁体   中英

Excel VBA Range(Cell).Value=sum 1004:Application-Defined Or Object-Defined

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

I wants to increase or decrease cell value of selected range. I am getting error in line Range(Cell2).Value = Sum

Edit
thanx for reply, in line Range(Cell2).Value = Sum, Cell2 is pointing to cell address like $E$6. 一种

If there is any option other than that pls let me know

ok Mihir. You cannot use a UDF (User Defined Function) to modify other cells then the one the formula is used in. However, there is a workaround it by calling your function from a sub. I will show you how to do it.
Open a new workbook and make your spreadsheet look like the picture below.
Fill in some random numbers in column A of Sheet1
sheet1设置
Then open VBE and create a new module ( Project Explorer > Insert > Module ) and paste the code from below

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


Then, go back to your spreadsheet and select your range with your mouse like this:
用鼠标选择范围
Ok, now hit ALT + F8 to View Macros and run the ChangeColumnValue macro.
选择宏


You will be prompt for a Value to Change and all cells within selected range will be Increased/Decreased by that Value.
提示值改变
and your final result if you type 5 in the prompt box will look like this
结果
Good luck!

finally here is the solution.

Sub ChangeRowValues()

Dim rng As Range
Dim R As Range
Dim ValueToChange As Long
Dim Cell1, Cell2 As String
Dim PosOfColon, TotalCell, Sums, i As Integer
Set rng = Selection
ValueToChange = Val(InputBox("Enter Number to Change:", "Enter Number...", 0))
PosOfColon = InStr(1, rng.Address, ":")
Cell1 = Left(rng.Address, PosOfColon - 1)
Cell2 = Right(rng.Address, Len(rng.Address) - PosOfColon)
If UCase(Left(Cell1, 1)) = UCase(Left(Cell2, 1)) Then
    TotalCell = rng.Count
    For i = 0 To TotalCell - 1
        'To Chnage Values of Row....
        Range(Cell1).Offset(0, i).Select

        'To Chnage Values of Colum....
        'Range(Cell1).Offset(i,0).Select

        If IsNumeric(ActiveCell.Value) = True Then
            ActiveCell.Value = Val(ActiveCell.Value) + ValueToChange
        End If
    Next i
Else
    MsgBox ("Select Row only...")
End If

End Sub

range()函数输入是单元格地址,例如range(a1:b2; g1:h4),您无法在其中输入某些结果。

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM