【问题标题】:Excel changing multiple cell details based on a specific cells valueExcel 根据特定单元格值更改多个单元格详细信息
【发布时间】:2022-01-27 12:51:13
【问题描述】:

Excel 公式和 vba 的超级新手。感谢您提供任何见解。

我正在尝试在我的电子表格中实现语言切换器。我目前有以下工作表:数据(在列中输入值的位置)、摘要(在数据工作表中输入的所有内容的摘要)、F(存储函数和下拉列表项的位置)、T(英语/法语翻译)

在选择英语或法语时,所有工作表中都有细胞。在 T 工作表中有 3 列,其中 A 是参考列,B 是英文单词,C 是翻译的法语单词。

切换语言的下拉菜单位于数据工作表中。我在 Visual Basic 编辑器中输入了以下代码(双击列表中的数据工作表后)。

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Set Target = Range("C5")
Dim langCol

If Target.Value = "English" Then
    langCol = 2 'now it's in english
Else
    langCol = 3 'now it's in french

End If

Sheets("Data").Cells(1, 1).Value = Sheets("T").Cells(5, langCol).Value
Sheets("Data").Cells(2, 1).Value = Sheets("T").Cells(6, langCol).Value
'....many more cell swaps here 100 total
End Sub

当我将其作为“工作表选择更改”运行时,此代码有效,当我从位于“C5”的下拉列表中选择英语或法语时,它会按预期翻译所有内容。我的问题是这段代码只有在我点击离开“C5”单元格后才会执行。期望的结果是在选择语言时进行翻译,而“C5”单元格仍处于活动状态。

当我用以下代码交换开头的代码行时:

Private Sub Worksheet_Change(ByVal Target As Range)

该代码仅在“结束子”之前有单个单元格交换时有效。一旦添加了额外的单元格交换,Excel (2007) 就会崩溃并重新启动。

我在上面的代码中是否缺少某些显然会导致错误的内容?我没有从程序本身得到任何反馈。

我认为进行 100 次细胞交换可能是个问题。有没有更聪明的方法来处理通配符或更优雅的方法?

【问题讨论】:

    标签: excel vba excel-formula excel-2007


    【解决方案1】:

    下拉工作表更改

    Option Explicit
    
    Private Sub Worksheet_Change(ByVal Target As Range)
        On Error GoTo ClearError ' mainly to prevent exiting without enabling events
         
        ' Target could be multiple cells. Restrict to one cell.
        Dim tCell As Range: Set tCell = Intersect(Range("C5"), Target)
        If tCell Is Nothing Then Exit Sub
        
        Dim langCol As Long
        
        Select Case tCell.Value
            Case "English": langCol = 2
            Case "French": langCol = 3
            ' easily add more
            Case Else: Exit Sub
        End Select
        
        Application.EnableEvents = False ' prevent retriggering the event
        
        ' Sheets("Data") could be replaced with 'Me' and use a variable for others.
        ' To improve readability you could do:
    
        Dim tws As Worksheet: Set tws = Me.Parent.Worksheets("T")
    
        Cells(1, 1).Value = tws.Cells(5, langCol).Value
        Cells(2, 1).Value = tws.Cells(6, langCol).Value
        '....many more cell swaps here 100 total
    
    SafeExit:
        If Not Application.EnableEvents Then Application.EnableEvents = True
        
        Exit Sub
    
    ClearError:
        Debug.Print "Run-time error '" & Err.Number & "': " & Err.Description
        Resume SafeExit
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-01
      • 1970-01-01
      • 2023-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多