我目前有一个包含一些vba代码的excel文件。此代码从SQL和VFP中检索信息,并在“A”列中的每个单元格中填充下拉列表,但A1除外 - 这是一个标题。我需要在同一行填充“G”列,用户从“A”列的下拉列表中选择值...
我相信我需要的区域是
工作表excel对象中的 Private Sub Worksheet_SelectionChange(ByVal Target As Range)
。
以下是我想要做的事情。
If cell "a2".valuechanged then
Set "g2" = "8000"
End if
If cell "a3".valueChanged then
Set "g3" = "8000"
End if
显然上面的代码不起作用,但我认为这很容易理解。我想让这个动态,所以我没有太多代码......
感谢任何帮助。
答案 0 :(得分:4)
我已经解释了在使用Worksheet_Change
HERE
您需要将Intersect
与Worksheet_Change
一起使用,以检查用户更改的单元格。
这是你在尝试的吗?
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo Whoa
'~~> Check if user has selected more than one cell
If Target.Cells.CountLarge > 1 Then Exit Sub
Application.EnableEvents = False
'~~> Check if the user made any changes in Col A
If Not Intersect(Target, Columns(1)) Is Nothing Then
'~~> Ensure it is not in row 1
If Target.Row > 1 Then
'~~> Write to relevant cell in Col G
Range("G" & Target.Row).Value = 8000
End If
End If
Letscontinue:
Application.EnableEvents = True
Exit Sub
Whoa:
MsgBox Err.Description
Resume Letscontinue
End Sub
答案 1 :(得分:1)
试试这个
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row > 1 And Target.Column <> 7 Then
Cells(Target.Row, "G").Value = 8000
End If
End Sub
如果您只需要在A列上开火,那么
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row > 1 And Target.Column = 1 Then
Cells(Target.Row, "G").Value = 8000
End If
End Sub
答案 2 :(得分:0)
你不能在G列中加上if语句,如
If(A1&lt;&gt;“,8000,0)
其他明智的事情会让你前进:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Column = 1 Then
If Target.Value2 <> "" Then
Target.Offset(0, 6) = "8000"
Else
Target.Offset(0, 6) = ""
End If
End If
On Error GoTo 0
End Sub
由于 罗斯
答案 3 :(得分:0)
我有类似的问题。我使用了Siddharth Rout的代码。我的修改允许用户在a列中粘贴一系列单元格(例如A3:A6),并修改了多个单元格(例如H3:H6)。
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo Whoa
'~~> Check if user has selected more than one cell
If Target.Cells.CountLarge < 1 Then Exit Sub
If Target.Cells.CountLarge > 500 Then Exit Sub
Debug.Print CStr(Target.Cells.CountLarge)
Application.EnableEvents = False
Dim the_row As Range
Dim the_range As Range
Set the_range = Target
'~~> Check if the user made any changes in Col A
If Not Intersect(the_range, Columns(1)) Is Nothing Then
For Each the_row In the_range.Rows
'~~> Ensure it is not in row 2
If the_row.Row > 2 Then
'~~> Write to relevant cell in Col H
Range("H" & the_row.Row).Value = Now
End If
Next
End If
让我们继续: Application.EnableEvents =真 退出子 哇: MsgBox错误说明 恢复继续 结束