2013-06-12 46 views
2
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 

我想增加或減少所選範圍的單元格值。 我收到錯誤線Range(Cell2).Value = SumExcel VBA範圍(單元格)。值=總和1004:應用程序定義或對象定義

編輯
thanx的答覆,在行範圍(小區2).value的= SUM 1,小區2指向像$ E $ 6格地址。 a

如果有比其它任何選項請讓我知道

+0

我認爲沒有錯你的函數本身。由於您正在執行活動頁面上的所有範圍函數,請確保您的活動頁面是您要使用的頁面。還有一件事 - 檢查你傳遞給你函數的參數,因爲它們可能以某種方式導致錯誤 - 也就是說。將整數更改爲長/雙類型。並聲明'我'能夠在for循環中使用它。我不確定還有什麼可能導致錯誤彈出:/ – 2013-06-12 09:47:02

+0

由於'ValueToChange'用於保存0-1000這樣的小vaslue,我用它來聲明'Integer'。 我也通過更改爲Long來檢查它,但仍然得到相同的錯誤。 –

+0

@MhhirPatel:什麼是UDF試圖實現?目的? – shahkalpesh

回答

0

好Mihir。您不能使用UDF(用戶定義的函數)來修改其他單元格,然後使用公式中的那個單元格。但是,通過從子集調用您的函數可以解決此問題。我會告訴你如何去做。
打開一個新的工作簿,並使您的電子表格如下圖所示。
填寫一些隨機數在Sheet的
sheet1 setup
然後打開VBE塔A,並創建一個新的模塊(項目瀏覽器>插入>模塊)和碼從下面

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 


然後粘貼,回到你的電子表格,並用你的鼠標選擇你的範圍是這樣的:
select range with mouse
好吧,現在打ALT + F8View Macros並運行ChangeColumnValue宏。
select macro


您將提示輸入值來改變和選擇的範圍內的所有小區將被該值增加/減少。
prompt value to change
和你的最終結果,如果你在提示框中鍵入5看起來像這樣
result
祝你好運!

-1

範圍()函數輸入單元格地址,例如,範圍(A1:B2,G1:H4),不能輸入一些結果在裏面。 Mihir。

+0

是什麼?他正在輸入cell2的地址。我看到沒有錯吧 – 2013-06-12 09:33:56

+0

好的@milad moafi –

0

終於這裏是解決方案。

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 

末次

相關問題