我已经在这方面工作了一段时间,遇到了一个真正的障碍。
我有一组值,可以通过表3,列D中经过验证的下拉菜单获得。一旦被选中,这个值当前使用excel function ='Sheet 3'!D4等等显示在不同的表(表7)中,我有一些代码读取这个值并执行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
工作表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
非常感谢
发布于 2017-02-09 12:51:31
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中的下拉列表的值,并允许其他功能继续使用该单元格值
发布于 2017-02-09 12:55:57
你有没有试过遍历你的代码,看看它哪里出了问题?如果不是这样,我建议在每个模块的开头加一个分隔符,然后使用F8逐步执行。这将确认它正在正常运行。
您还应该完全限定对工作表的引用。虽然假设工作表引用应该在工作表模块中进行,但也有失败的可能性。您可以简单地分配一个变量来保存工作表,如下所示:
Dim wb as Workbook
Dim ws as Worksheet
Set wb = ThisWorkbook
Set ws = wb.Sheets("YourSheetName")
此外,您的工作表3代码: EnableEvent = True
应该是: EnableEvents = True
https://stackoverflow.com/questions/42134877
复制