我有一张工作表,我希望能够将用户双击的单元格值传输到另一个名为JE的工作表/表单 .
Example :用户单击工作表JE中的单元格F10,将用户带到另一个工作表(包含宏),一旦用户在该工作表上,我希望用户能够双击A列中的任何单元格并且单击单元格值,将单元格F10填回页面JE中 . 因此,在导航到宏/不同工作表后,如果用户双击单元格A7并且值"123ABC"在A7中,我希望"123ABC"填充工作表JE中的单元格F10 . 同样,如果用户在工作表JE上单击单元格F25,并仍然选择在另一个工作表中双击A7,我希望值"123ABC"在工作表JE中填充F25 . 一旦值存在于单元格中,我还希望F列中的单元格转为无填充背景 .
我现在遇到的问题是我的代码设置方式使得无论用户在工作表JE上使用哪一行,宏A列中的值仅填充F列中的第一个单元格(F7)然而,我希望在宏中双击该值以填充活动的F列单元格,而不是F列中的第一个单元格 . 此外,双击时,宏A列中的值不会将F列中红色单元格的背景颜色更改为无填充白色背景 .
此代码是与表JE关联的代码(用户填写的主要表单)
Option Explicit
Public sourceRange As Range
Private Sub Worksheet_Change(ByVal Target As Range)
' If Not Intersect(Target, Range("C7:D446")) Is Nothing Then
Dim c As Range: Set c = Range("D7:D446")
' For Each c In Target
For Each c In c.Cells
Select Case c.Value
Case "1000GP", "1000MM", "19FEST", "20IEDU", "20ONLC", "20PART", "20PRDV", "20SPPR", "22DANC", "22LFLC", "22MEDA", "530CCH", "60POUBL", "74GA01", "74GA17", "74GA99", "78REDV"
Cells(c.Row, "F").Interior.ColorIndex = 3
Case Else
Cells(c.Row, "F").Interior.ColorIndex = 0
End Select
Next c
' End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Set sourceRange = Nothing ' Set it to nothing to avoid too long remembering
If Target.Column = 6 And Target.Cells.Count = 1 And Target.Interior.ColorIndex = 3 Then
Set sourceRange = Target ' Remember source cell
'Cancel = True
Select Case Target.Offset(0, -2).Value2
Case "1000GP": gotoref1
Case "1000MM": gotoref2
Case "19FEST": gotoref3
Case "20IEDU": gotoref4
Case "20ONLC": gotoref5
Case "20PART": gotoref6
Case "20PRDV": gotoref7
Case "20SPPR": gotoref8
Case "22DANC": gotoref9
Case "22LFLC": gotoref10
Case "22MEDA": gotoref11
Case "530CCH": gotoref12
Case "60PUBL": gotoref13
Case "74GA01": gotoref14
Case "74GA17": gotoref15
Case "74GA99": gotoref16
Case "78REDV": gotoref17
End Select
End If
End Sub
这是在单击Sheet JE中F列中的单元格时用户所带的所有宏表中的代码 .
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'Set JE.sourceRange = Target.Value
If Target.Column = 1 Then
If Not JE.sourceRange Is Nothing Then
JE.sourceRange.Value = ActiveCell.Value
Cells(c.Row, "F").Interior.ColorIndex = 0
End If
End If
End Sub
我也无法获取C列的值来填充多行 . 例如,如果我已经在C7中有一个值,并且想要在工作表中单击一个值到C列,如果我单击一个值,它将覆盖C7中的值而不是填充单元格C8 . 这是我对该表的代码:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Column = 1 Then
'Sheet2.Range("F" & Target.Row & ":F" & Target.Row).Value = ActiveCell.Value
Sheet2.sourceRange.Value = ActiveCell.Value
Worksheets("JE").Activate
'Sheet2.Activate
'Cells(c.Row, "F").Interior.ColorIndex = 3
Cancel = True
End If
End Sub
2 回答
在用户切换到不同的工作表之前,您需要存储原始
Range
活动的somwhere . 然后你就可以写出那里的 Value 了 .怎么做:
1)在工作表JE上添加公共变量(紧跟在Option Explicit行之后)
2)在事件
Worksheet_SelectionChange
上工作表JE首先添加如果代码将变量设置为当前Range
- 请注意第一行设置变量为Nothing - 需要避免永远记住最后一个范围:3)现在很容易 - 只需在其他工作表上的双击事件中使用变量:
请注意其余的代码应该保持原样 - 为了清楚起见,我只将片段放在需要更改的地方 .
您是否尝试过使用Target参数?它会告诉您双击的行和列,您可以使用它来更具体地构建范围 .