【问题标题】:Excel VBA: Worksheet Change cell value to different sheetExcel VBA:工作表将单元格值更改为不同的工作表
【发布时间】:2017-02-09 10:59:38
【问题描述】:

我已经为此工作了一段时间,但遇到了一个真正的绊脚石。

我有一组值,可通过第 3 页 D 列中的已验证下拉菜单获得。选择此值后,当前使用 excel 函数 ='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

非常感谢

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    Sods law,我在发帖一小时后设法解决了这个问题。

    我从它调用的工作表(表 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 页中下拉列表的值,并允许其他功能继续使用单元格值

    【讨论】:

      【解决方案2】:

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

      您还应该完全限定您对工作表的引用。虽然假设工作表引用应该在工作表模块中进行,但仍有失败的可能性。您可以像这样简单地分配一个变量来保存工作表:

      Dim wb as Workbook
      Dim ws as Worksheet
      
      Set wb = ThisWorkbook
      Set ws = wb.Sheets("YourSheetName")
      

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

      应该是: EnableEvents = True

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-04-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-07-25
        • 1970-01-01
        相关资源
        最近更新 更多