2016-07-05 19 views
0

(コメントでこの問題の解決策である、あなたにロンに感謝)

ちょうど私が私が試したものの、このタスクへの答えを見つけることができなかった原因を申し込みました気にせずにやるのは本当に難しいです。ダイナミックTarget.AdressエクセルVBA

私は、値を変更するたびに特定のセルでVLookUpを作成しようとしています。 "Worksheet_Change"を使用してExcelを作成するようExcelに依頼するまで、セルは存在しません。

ワークシートは、私が選択するフィールドを追加して編集します。

例えば、私は3つのプロセス変数を入れる必要があるので、最初の行( "$ R $ 30")の隣に "3"を入力します。この変更を行うことで、Excelは2行を追加します(最初のプログラムされた部分の最後に、既にそこにあった最初のものを取得し、必要な3行を完成するために2つ以上を追加します)。

"プロセスセル"( "$ R $ ...")の情報を使用して、この定義済みのプロセス定義を "検証データ"リスト(すでに実行され、正常に動作しています)その隣に定義コードを自動的に追加する必要があります。

例えば、検証データから "Flow Calibration"を選択すると、その横に "XD61DD"が表示されます。

最初の行については、うまくいきます...追加されたすべての行に対して機能させることはできません。 (私は学んだ、私にあまりにもハード、それを服用しないでください、私はそれは石器時代のコーディングのようなことを知っている:P)

Private Sub Worksheet_Change(ByVal Target As Range) 
Dim cant As Integer 
Dim RowNumber As Integer 
    If Target.Address = "$AG$30" Then 
     If Range("$AG$30") <> "" Then 
     cant = Range("$AG$30") 
     For i = 1 To cant - 1 
      Var = 30 + i 
      Range("A" & Var).Select 
      RowNumber = ActiveCell.Row 
      Rows(RowNumber).Select 
      Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove 
      rango1 = "L" & RowNumber & ":" & "Q" & RowNumber 
      rango2 = "R" & RowNumber & ":" & "AF" & RowNumber 
      Range(rango1).Select 
      Selection.Merge True 
      Range(rango2).Select 
      Selection.Merge True 
      rango3 = "AG" & RowNumber 
      Range(rango3).Select 
      With Selection.Validation 
       .Delete 
       .Add Type:=xlValidateInputOnly, AlertStyle:=xlValidAlertStop, Operator _ 
       :=xlBetween 
       .IgnoreBlank = True 
       .InCellDropdown = True 
       .ShowInput = True 
       .ShowError = True 
      End With 
     Next i 
    End If 
End If 
ここ

は、私が取り組んできたコードですここまで

それは、最初の部分は参照用で、正常に動作しますが、:

Range("R30").Select 
If Target.Address = "$R$30" Then 
    If Range("$R$30") <> "" Then 
     Range("$L$30") = Application.VLookup(Range("$R$30"), Range("$BG$3:$BH$9"), 2, False) 
    End If 
    If Range("$R$30") = "" Then 
     Range("$L$30") = "" 
    End If 
End If 
End Sub 

それがうまく働いたが、私は「$に同じ命令を実行する必要がありましたがありますので、私は「$ R $ 30」左R $ 31 "となり、行が作成されたときにそのようになります。

私が本当に助けてくれることを願っています。

ありがとうございます。 R1000:

AGUS

答えて

0

は、ターゲットが範囲R30であるかもしれないとき、あなたが興味を持っていると仮定します。 myRangeであなたの選択は複数のセルであることを起こる場合は、上記の簡易版が動作しません。だから、何かEDIT

Dim myRange as Range Set myRange = Range("R30:R1000") If Not Intersect(Target, myRange) is Nothing then 'consider if you need to disable events temporarily If Target <> "" Then _ Target.Offset(0,-6) = Application.VLookup(Target, Range("$BG$3:$BH$9"), 2, False) end if 'Don't forget to re-enable events if you disabled them 

(デバッグではない)などがあります。一度に1つのセルをテストする必要があります。 1つの修正は次のようなものかもしれません:

Dim myRange As Range, C As Range 
Set myRange = Range("R30:R1000") 

If Not Intersect(Target, myRange) Is Nothing Then 
    For Each C In Intersect(Target, myRange) 
     If C <> "" Then _ 
      C.Offset(0,-6) = Application.VLookup(C, Range("$BG$3:$BH$9"), 2, False) 
     End If 
    Next C 
End If 
End Sub 
+0

私はこれを試しました...それはうまくいきませんでした... "タイプミスマッチ"が "ターゲット"> "それで_"で... 「イベントを無効にする」が動作する場所を確認してください。 –

+0

「Target」が1つのセル以上の場合に起こります。言い換えれば、選択が複数のセルである場合ソリューションのための私の編集を参照してください。 –

+0

イベントハンドラの実行中にイベントを無効にする理由は、イベントハンドラの実行中にイベントハンドラがトリガされないようにするためです。これは無限ループにつながります。デバッグを停止すると、イベントハンドラが再度有効にならないため、デバッグの際に注意する必要があります。手動で行う必要があります。 –