动态 Target.Adress excel vba
Dynamic Target.Adress excel vba
已解决(评论中是此问题的解决方案,谢谢罗恩)
刚刚注册,因为我无法找到这个任务的答案,尽管我已经非常努力地完成它而没有打扰。
问题是我试图在每次更改特定单元格的值时在它们处创建一个 VLookUp。这些单元格不存在,直到我要求 excel 使用 "Worksheet_Change"
创建它们
工作表添加了我要求的行数,并使用我将要编辑的字段 select。
例如。我需要放置 3 个过程变量,所以我在第一行旁边输入“3”(“$R$30”)。通过进行此更改,excel 再添加 2 行(在第一个编程部分的末尾,我得到了第一个已经存在的行,然后再添加 2 行以完成我需要的 3 行)。
完成这部分,我需要使用 "validation data" 列表更新流程定义(已经完成并且工作正常),使用来自 "process cell" 的信息(“$R$... ") 我需要在旁边自动添加定义代码
例如。当我从验证数据中 select "Flow Calibration" 时,我在它旁边得到 "XD61DD"。
对于第一行,它工作正常...我无法让它适用于所有添加的行。
这是我一直在研究的代码:(我正在学习,请不要对我太苛刻,我知道这就像石器时代的编码:P)
Private Sub Worksheet_Change(ByVal Target As Range)
Dim cant As Integer
Dim RowNumber As Integer
If Target.Address = "$AG" Then
If Range("$AG") <> "" Then
cant = Range("$AG")
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" Then
If Range("$R") <> "" Then
Range("$L") = Application.VLookup(Range("$R"), Range("$BG:$BH"), 2, False)
End If
If Range("$R") = "" Then
Range("$L") = ""
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:$BH"), 2, False)
end if
'Don't forget to re-enable events if you disabled them
编辑:如果您在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:$BH"), 2, False)
End If
Next C
End If
End Sub
已解决(评论中是此问题的解决方案,谢谢罗恩)
刚刚注册,因为我无法找到这个任务的答案,尽管我已经非常努力地完成它而没有打扰。
问题是我试图在每次更改特定单元格的值时在它们处创建一个 VLookUp。这些单元格不存在,直到我要求 excel 使用 "Worksheet_Change"
创建它们工作表添加了我要求的行数,并使用我将要编辑的字段 select。
例如。我需要放置 3 个过程变量,所以我在第一行旁边输入“3”(“$R$30”)。通过进行此更改,excel 再添加 2 行(在第一个编程部分的末尾,我得到了第一个已经存在的行,然后再添加 2 行以完成我需要的 3 行)。
完成这部分,我需要使用 "validation data" 列表更新流程定义(已经完成并且工作正常),使用来自 "process cell" 的信息(“$R$... ") 我需要在旁边自动添加定义代码
例如。当我从验证数据中 select "Flow Calibration" 时,我在它旁边得到 "XD61DD"。
对于第一行,它工作正常...我无法让它适用于所有添加的行。
这是我一直在研究的代码:(我正在学习,请不要对我太苛刻,我知道这就像石器时代的编码:P)
Private Sub Worksheet_Change(ByVal Target As Range)
Dim cant As Integer
Dim RowNumber As Integer
If Target.Address = "$AG" Then
If Range("$AG") <> "" Then
cant = Range("$AG")
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" Then
If Range("$R") <> "" Then
Range("$L") = Application.VLookup(Range("$R"), Range("$BG:$BH"), 2, False)
End If
If Range("$R") = "" Then
Range("$L") = ""
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:$BH"), 2, False)
end if
'Don't forget to re-enable events if you disabled them
编辑:如果您在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:$BH"), 2, False)
End If
Next C
End If
End Sub