所以我尝试创建一个函数,在其中使用下拉菜单来更改显示的 Excel 工作表的语言。我最初的想法是给单元格命名,然后创建在表中查找单元格名称的函数,然后根据语言应用偏移量,以便更改特定单元格中的语言。
Private Sub Worksheet_Change(ByVal Target As Range)
'///////////////INITIATES THE LANGUAGE CHANGE AND RETURNS OFFSET
Dim strLng As String
strLng = Sheet9.Range("A1").Value
On Error Resume Next
If Target.Address = "$A$1" Then
Select Case strLng
Case "DA"
LanguageChange (1)
Case "EN"
LanguageChange (2)
Case "DE"
LanguageChange (3)
End Select
End If
End Sub
然后我想使用如下所示的表格,然后在模块中使用下面的函数来查找文本 ID 并使用偏移量来应用新单词。然而问题是,当我这样做时什么也没有发生,而且我找不到错误。任何建议或想法:)
Option Explicit
'///////////////////////////////////////////////////CHANGE LANGUAGE
Public Function LanguageChange(LngOffset As Integer)
Dim LCcell As Name
Dim LCrng As Range
On Error Resume Next
Application.ScreenUpdating = False
For Each LCcell In Sheet9.Names
Set LCrng = Sheet3.Range("AA1:AA250").Find(LCcell, LookIn:=xlValues, MatchCase:=False).Offset(0, LngOffset)
LCcell.Value = LCrng.Value
Next
Application.ScreenUpdating = True
End Function
LCCell
是一个名称而不是一个范围 - 但你将它视为一个范围。
看看如何检索名称的真实名称 (=
strName
) 以及它所引用的单元格/范围 (=rgName
)。
这会起作用:
Dim strName As String, rgName As Range
For Each LCcell In ActiveSheet.Names
strName = Split(LCcell.Name, "!")(1) 'split is necessary as the name of the name includes the sheetname
Set rgName = LCcell.RefersToRange
Set LCrng = lo.DataBodyRange.Find(strName, LookIn:=xlValues, MatchCase:=False).Offset(0, LngOffset)
rgName.Value = LCrng.Value
Next