Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
excel工作表\u选择更改-复制数据_Excel_Vba - Fatal编程技术网

excel工作表\u选择更改-复制数据

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

场景

我有两张相同的工作表,除了第2页C-E列中的“某些内容”和第1页包含工作表\u选择更改处理程序

当我单击表1中的B列时,工作表的选择更改单元格颜色,然后将C-E列设置为表2的C列

问题

问题是,它落在了应用程序错误上

请任何人帮忙,这真的很烦人…我如何在工作表\u SelectionChange处理程序中将数据从工作表2复制到工作表1

如果我设置S1C=“X”(在硬编码中,这很好),那么当我尝试引用第二张表中的单元格时,它不起作用

多谢各位, 致意

代码如下:

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,在您的帮助和其他帖子的帮助下,我成功地删除了所选内容,并以想要的方式更新了数据。非常感谢,感谢您。