我基本上创建了一个操作Excel工作表的Excel VBA应用程序,因此在代码中,我使用字符串“Sheet1”来引用工作簿的第一个工作表,但是当我尝试使用具有相同代码的此应用程序时Excel的法语版本,直到我将“Sheet1”翻译为“Feuil1”才能生效。所以我的问题是,有没有办法自动调整代码到任何版本的Excel?
答案 0 :(得分:2)
您可以使用以下方法从代码中获取工作表:
(1)使用表格(sheet_index)
这种方式无法适应,因为它采用逐页索引(工作表索引从1开始)。当工作表变更时,它无法访问正确的工作表。所以,它不应该使用。
For example: Set Feuil1Sheet = Sheets(1)
(2)使用VBA编辑器的(名称)
我认为这种方式不应该使用never,因为它只需要代码名称,只能通过VBA编辑器显示(它在工作表属性中显示为(Name)
字段)。我认为你是用这种方式获得第一张纸。所以,你没有得到正确的表格。您需要知道的一件事是,每张第一张纸的code name
可能始终不是Sheet1
。它可以是Sheet2
或Sheet4
等。
For example: Set Feuil1Sheet = Sheet1
(3)使用工作表("工作表名称")或表格("工作表名称")
这种最后一种方式是一种非常兼容的方式,可以在Excel的任何地方进行调整,因为它的名称取决于表格。因此,如果名称相同,您将获得正确的表格。所以,用它来获取表格。
For example: Set Feuil1Sheet = Worksheets("Feuil1") or Set Feuil1Sheet = Sheets("Feuil1")
答案 1 :(得分:1)
我能想到的唯一可能的方法是始终引用" sheet1"在本地语言中是以下代码。
Option Explicit
Public Sub GetLocalNameForNewSheets()
Dim strSheetName As String
Dim i As Long
i = ActiveWorkbook.Sheets.Count
ActiveWorkbook.Sheets.Add After:=Worksheets(i)
strSheetName = ActiveWorkbook.Worksheets(i + 1).Name
Application.DisplayAlerts = False
ActiveWorkbook.Worksheets(i + 1).Delete
Application.DisplayAlerts = True
Debug.Print strSheetName
For i = 1 To Len(strSheetName)
While IsNumeric(Mid(strSheetName, i, 1))
strSheetName = Replace(strSheetName, Mid(strSheetName, i, 1), "")
Wend
Next i
Debug.Print strSheetName
Debug.Print strSheetName & "1"
End Sub
基本上,我要求Excel创建一个新工作表并为我命名。然后,我得到的新名称是" sheet"在本地语言中,从字符串中删除数字部分。最后,您可以添加数字" 1"引用第一张表。