Excel 根据特定单元格值更改多个单元格详细信息
Excel changing multiple cell details based on a specific cells value
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
当我 运行 将此代码作为 'worksheet selection change' 时,此代码有效,当我从位于 'C5' 的下拉菜单中选择英语或法语时,它会按预期翻译所有内容。我的问题是此代码仅在我单击离开 'C5' 单元格后才执行。期望的结果是在选择语言时进行翻译,而 'C5' 单元格仍处于活动状态。
当我将开头的代码行替换为:
Private Sub Worksheet_Change(ByVal Target As Range)
只有在 'end sub' 之前有一个单元格交换时,代码才有效。一旦添加了额外的单元格交换,Excel (2007) 就会崩溃并重新启动。
我在上面的代码中是否遗漏了一些明显会导致错误的东西?我没有从程序本身得到任何反馈。
我认为进行 100 次电池交换可能是问题所在。有没有更聪明的方法来处理通配符或更优雅的方法?
下拉式工作表更改
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
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
当我 运行 将此代码作为 'worksheet selection change' 时,此代码有效,当我从位于 'C5' 的下拉菜单中选择英语或法语时,它会按预期翻译所有内容。我的问题是此代码仅在我单击离开 'C5' 单元格后才执行。期望的结果是在选择语言时进行翻译,而 'C5' 单元格仍处于活动状态。
当我将开头的代码行替换为:
Private Sub Worksheet_Change(ByVal Target As Range)
只有在 'end sub' 之前有一个单元格交换时,代码才有效。一旦添加了额外的单元格交换,Excel (2007) 就会崩溃并重新启动。
我在上面的代码中是否遗漏了一些明显会导致错误的东西?我没有从程序本身得到任何反馈。
我认为进行 100 次电池交换可能是问题所在。有没有更聪明的方法来处理通配符或更优雅的方法?
下拉式工作表更改
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