2016-09-12 8 views
0

VBA関数を使用してExcelのセルに値を書き込むことが可能かどうか疑問に思っていますか?VBAを介して関数を呼び出さないセルに値を書き込む関数

次の関数でもない行が呼び出すアカ:

Function OffsetValue(myinput As Double) As Double 
    ThisWorkbook.Sheets("Sheet1").Cells(1, 1).Value = myinput 
    Call OffsetValueSub(myinput) 
End Function 

Sub OffsetValueSub(myinput As Double) 
    ThisWorkbook.Sheets("Sheet1").Cells(1, 1).Value = myinput 
End Sub 

をしかし、次のダミーサブが正常に動作します:

Sub Dummy() 
    Call OffsetValueSub(100) 
End Sub 

Sub OffsetValueSub(myinput As Double) 
    ThisWorkbook.Sheets("Sheet1").Cells(1, 1).Value = myinput 
End Sub 

は1のことができるようにするために行う必要があり、何かがあります特定の関数を呼び出しているセルではないセルに書き込みますか?

+0

はすでにここカバーはThisWorkbookのコードウィンドウにSub ThisWorkbook_Change()イベントハンドラの使用に切り替えて、ブック全体

全体で同じ必要性を扱う、このリンクを検索します。 //stackoverflow.com/questions/9476282/cannot-vba-write-data-to-cells-in-excel-2007-2010-within-a-function –

答えて

0

は、この回避策があなたのために何ができることがありますに

Function OffsetValue(myinput As Double) As Double 
    OffsetValue = myinput '<--| this will trigger worksheet 'Change' event 
End Function 

場所あなたがFunction OffsetValue()を使用するワークシートのコードウィンドウで、次のサブ:

にごOffsetValue機能をダウン短縮

Private Sub Worksheet_Change(ByVal Target As Range) 
    On Error GoTo ExitSub 
    Application.EnableEvents = False 
    Call OffsetValueSub(Target.Value) '<--| call 'OffsetValueSub()' and write input value where it has to 
    Target.ClearContents '<--| should you ever want to erase any trace of the OffsetValue function 
ExitSub: 
    Application.EnableEvents = True 
End Sub 

OffsetValue()への呼び出しを、あなたが書き込んだセルから削除したくない場合は、削除/コメントTarget.ClearContents

これはあなたが強化したい場合があり、単にベースのコードです:

  • あなたはそれが特定のと一致するかどうかをチェックすることをお勧めしますWorksheet_Change()

    に渡さTarget範囲のいくつかのチェック値(例えば、ある値の範囲に対してTarget.Valueをチェックする)またはの範囲(例えば、の範囲を事前に定義されているhttp:0)の基準

  • は、あなたが

+0

賢い、ありがとう! – Matt

関連する問題