Excel VBA:工作表将单元格值更改为不同的工作表

时间:2017-02-09 10:59:38

标签: excel vba

我已经在这方面工作了一段时间,并且遇到了一个真正的绊脚石。

我有一组值可通过工作表3,D列中经过验证的下拉菜单获得。一旦选中,此值将显示在另一个工作表(工作表7)中,使用Excel功能='工作表3和#39 ;!D4等等,我有一些代码读取它并执行IF语句以在另一个单元格中生成一个值。

我的问题是代码依赖于读取值而不是公式。

我目前有一个工作表更改命令,用于我想要运行的单独函数,有没有办法运行第二个函数并调用从表3列D到表8列D的任何更改然后运行我的其他更改功能

表7代码:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range

If Intersect(Target, Range("D2:D102")) Is Nothing Then Exit Sub
Application.EnableEvents = False
On Error GoTo Finalize

For Each c In Target.Cells
Select Case c.Column
Case 4
Call Print_Quality(c)
End Select
Next c

Finalize:
Application.EnableEvents = True
End Sub

Sheet 7模块:

Sub Print_Quality(c As Range)
Dim PrintQuality As String
Dim PrintSpeed As String

PrintQuality = c.Value

If PrintQuality = "A Quality 1" Then PrintSpeed = "100"

c.Offset(0, 5).Value = PrintSpeed

End Sub

我一直在尝试这条路线,但无济于事:

工作表3代码:

Private Sub Worksheet_Change(ByVal Target As Range)

If Intersect(Target, Range("D4:D104")) Is Nothing Then Exit Sub
Application.EnableEvents = False
On Error GoTo Finalize

UpdateVal

Finalize:
Application.EnableEvent = True

End Sub

模块:

Sub UpdateVal()
Worksheets("Sheet 7").Range("D2").Value = Worksheets("Sheet 3").Range("D4").Value
End Sub

非常感谢

2 个答案:

答案 0 :(得分:0)

Sods法律,我在绝望之后一小时就设法解决了这个问题。

我从它正在调用的工作表中完成了另一个工作表更改(工作表3)

    Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range

Set KeyCells = Range("D4:D104")

If Not Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing Then

Call UpdateVal

End If

End Sub

然后将此功能添加到模块

Sub UpdateVal()
Sheet8.Cells(2, 4).Value = Sheet3.Cells(4, 4)
End Sub

现在引用工作表8中下拉列表的值,并允许其他功能继续使用单元格值

答案 1 :(得分:0)

您是否尝试单步执行代码以查看问题所在?不是,我建议在每个模块的开头休息,然后使用F8逐步完成。这将确认它正在运行。

您还应该完全限定对工作表的引用。虽然假设工作表模块中的工作表参考应该是完整的,但是存在失败的可能性。您可以简单地指定一个变量来保存工作表,如下所示:

Dim wb as Workbook
Dim ws as Worksheet

Set wb = ThisWorkbook
Set ws = wb.Sheets("YourSheetName")

此外,您的工作表3代码:     EnableEvent = True

应该是:     EnableEvents = True