多语言Excel VBA应用程序

时间:2015-08-17 07:34:34

标签: excel vba excel-vba

我基本上创建了一个操作Excel工作表的Excel VBA应用程序,因此在代码中,我使用字符串“Sheet1”来引用工作簿的第一个工作表,但是当我尝试使用具有相同代码的此应用程序时Excel的法语版本,直到我将“Sheet1”翻译为“Feuil1”才能生效。所以我的问题是,有没有办法自动调整代码到任何版本的Excel?

2 个答案:

答案 0 :(得分:2)

您可以使用以下方法从代码中获取工作表:

  

(1)使用表格(sheet_index)

这种方式无法适应,因为它采用逐页索引(工作表索引从1开始)。当工作表变更时,它无法访问正确的工作表。所以,它不应该使用。

For example: Set Feuil1Sheet = Sheets(1)
  

(2)使用VBA编辑器的(名称)

我认为这种方式不应该使用never,因为它只需要代码名称,只能通过VBA编辑器显示(它在工作表属性中显示为(Name)字段)。我认为你是用这种方式获得第一张纸。所以,你没有得到正确的表格。您需要知道的一件事是,每张第一张纸的code name可能始终不是Sheet1。它可以是Sheet2Sheet4等。

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"引用第一张表。