excel工作表\u选择更改-复制数据
场景: 我有两张相同的工作表,除了第2页C-E列中的“某些内容”和第1页包含工作表\u选择更改处理程序 当我单击表1中的B列时,工作表的选择更改单元格颜色,然后将C-E列设置为表2的C列 问题: 问题是,它落在了应用程序错误上 请任何人帮忙,这真的很烦人…我如何在工作表\u SelectionChange处理程序中将数据从工作表2复制到工作表1 如果我设置S1C=“X”(在硬编码中,这很好),那么当我尝试引用第二张表中的单元格时,它不起作用 多谢各位, 致意 代码如下:excel工作表\u选择更改-复制数据,excel,vba,Excel,Vba,场景: 我有两张相同的工作表,除了第2页C-E列中的“某些内容”和第1页包含工作表\u选择更改处理程序 当我单击表1中的B列时,工作表的选择更改单元格颜色,然后将C-E列设置为表2的C列 问题: 问题是,它落在了应用程序错误上 请任何人帮忙,这真的很烦人…我如何在工作表\u SelectionChange处理程序中将数据从工作表2复制到工作表1 如果我设置S1C=“X”(在硬编码中,这很好),那么当我尝试引用第二张表中的单元格时,它不起作用 多谢各位, 致意 代码如下: Public benRe
Public benRel
Public rskOpt
Public resOpt
Public getRow
Public getCol
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error GoTo ExitSubCorrectly
'turn off multiple recurring changes
Application.EnableEvents = False
'do not allow range selection
If Target.Cells.Count > 1 Then GoTo ExitSubCorrectly
'only allow selection within our range
Set myRange = Range("B8:B24")
If Not Application.Intersect(Target, myRange) Is Nothing Then
' At least one cell of Target is within the range myRange.
' Carry out some action.
getRow = Target.Row
getCol = Target.Column
Select Case Range(Cells(Target.Row, Target.Column), Cells(Target.Row, Target.Column)).Style
Case "Normal"
Range(Cells(Target.Row, Target.Column), Cells(Target.Row, Target.Column)).Style = "Accent1"
getData
putData
Case "Accent1"
Range(Cells(Target.Row, Target.Column), Cells(Target.Row, Target.Column)).Style = "Normal"
Range(Cells(Target.Row, Target.Column + 1), Cells(Target.Row, Target.Column + 3)).Value = ""
Case Else
End Select
Else
' No cell of Target in in the range. Get Out.
GoTo ExitSubCorrectly
End If
ExitSubCorrectly:
' go back and turn on changes
' MsgBox Err.Description
Worksheets("Sheet1").Select
Application.EnableEvents = True
End Sub
Sub getData()
Worksheets("Sheet2").Select
Range(Cells(getRow, getCol), Cells(getRow, getCol)).Select
benRel = Range(Cells(getRow, getCol), Cells(getRow, getCol)).Offset(0, 1).Value
rskOpt = Range(Cells(getRow, getCol), Cells(getRow, getCol)).Offset(0, 2).Value
resOpt = Range(Cells(getRow, getCol), Cells(getRow, getCol)).Offset(0, 3).Value
End Sub
Sub putData()
Worksheets("Sheet1").Select
Range(Cells(Target.Row, Target.Column), Cells(Target.Row, Target.Column)).Offset(0, 1).Value = benRel
Range(Cells(Target.Row, Target.Column), Cells(Target.Row, Target.Column)).Offset(0, 2).Value = rskOpt
Range(Cells(Target.Row, Target.Column), Cells(Target.Row, Target.Column)).Offset(0, 3).Value = resOpt
End Sub
在我看来,你可以用
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error GoTo ExitSubCorrectly
'turn off multiple recurring changes
Application.EnableEvents = False
'do not allow range selection
If Target.Cells.Count > 1 Then GoTo ExitSubCorrectly
'only allow selection within our range
Set myRange = Range("B8:B24")
If Not Application.Intersect(Target, myRange) Is Nothing Then
' At least one cell of Target is within the range myRange.
' Carry out some action.
With Cells(Target.Row, Target.Column)
Select Case .Style
Case "Normal"
.Style = "Accent1"
.Offset(0, 1).Resize(, 3).Value = Worksheets("Sheet2").Cells(getRow, getCol).Offset(0, 1).Resize(, 3).Value
Case "Accent1"
.Style = "Normal"
.Offset(0, 1).Resize(, 3).ClearContents
Case Else
End Select
End With
End If
ExitSubCorrectly:
' go back and turn on changes
' MsgBox Err.Description
Application.EnableEvents = True
End Sub
putData不知道目标是什么。能否尝试将Target作为参数传递给putData?另外,我会避免使用选择,请检查这个,谢谢,是的,你是对的,但实际的问题是在试图引用源工作表时getData中。问题在于语句工作表(“Sheet2”)。选择范围(单元格(getRow,getCol),单元格(getRow,getCol))。选择-尝试它将显示它是如何失败的。是在模块中还是在
工作表\u SelectionChange
子下的getData
中?如果是后者,请尝试明确地引用Sheet2
对象,即Sheet2.Range(Sheet2.Cells(getRow,getCol)…)
(或者更好地使用With…End With
语句。我想(不确定)如果您在Sheet1
,则所有对象都被解释为属于Sheet1
,无论您选择了什么。非常感谢,Loannis,在您的帮助和其他帖子的帮助下,我成功地删除了所选内容,并以想要的方式更新了数据。非常感谢,感谢您。