动态目标.地址excel vba



SOLVED(在评论中是这个问题的解决方案,谢谢你Ron)

刚刚注册,因为我找不到这个任务的答案,尽管我已经很努力地把它做完了。

的事情是,我试图使一个VLookUp在特定的单元格每次他们改变它的值。单元格不存在,直到我要求excel使用"Worksheet_Change"创建它们

工作表添加了我要求的任意多行,并使用我将选择的字段编辑它们。

。我需要放置3个过程变量,所以我在第一行旁边输入"3"("$R$30")。通过做这个改变,excel增加了2行(在第一个编程部分的末尾,我得到了已经存在的第一个,然后再增加2行来完成我需要的3行)。

完成这部分后,我需要用"验证数据"列表更新过程定义(已经完成并且工作良好),使用来自"过程单元"("$R$…")的信息,我需要在它旁边自动添加定义代码。

。当我从验证数据中选择"流量校准"时,我在它旁边得到"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"执行相同的指令,因此,当创建行时。

我真的希望你能帮助我。

提前感谢。

阿古斯

假设您对Target可能在R30:R1000范围内感兴趣。比如(未调试)

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

EDIT:如果您在myRange中的选择碰巧有多个单元格,则上述简化版本将不起作用。您需要一次测试一个单元格。一种修改可能是这样的:

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

最新更新