簡體   English   中英

多語言Excel VBA應用程序

[英]Multi language Excel VBA Application

我基本上創建了一個處理Excel工作表的Excel VBA應用程序,因此在代碼中,我使用字符串“ Sheet1”來引用工作簿的第一張表,但是當我嘗試將此應用程序與法語版本的相同代碼一起使用時的Excel,直到將“ Sheet1”轉換為“ Feuil1”后它才起作用。 所以我的問題是,有沒有一種方法可以使代碼自動適應任何版本的Excel?

您可以使用以下方法從代碼獲取工作表:

(1)使用Sheets(sheet_index)

這種方法無法適應,因為它采用了逐頁索引(頁索引從1開始)。 當工作表被更換時,它不能訪問正確的工作表。因此,它不應該使用。

For example: Set Feuil1Sheet = Sheets(1)

(2)使用VBA編輯器的(名稱)

我認為這種方式永遠不要使用,因為它采用僅由VBA編輯器可見的代碼名稱來表示工作表(Name)在工作表屬性中顯示為(Name)字段 )。 我認為您正在使用這種方法來獲取第一張紙。 因此,您沒有得到正確的工作表。 您需要知道的一件事是,每個第一張工作表的code name可能不一定總是Sheet1 可以是Sheet2Sheet4等。

For example: Set Feuil1Sheet = Sheet1

(3)使用工作表(“工作表名稱”)或工作表(“工作表名稱”)

最后一種方法是一種非常兼容的方法,並且可以在任何Excel中進行修改,因為它以工作表的名稱命名。 因此,如果名稱相等,您將獲得正確的表格。 因此,使用它來獲取工作表。

For example: Set Feuil1Sheet = Worksheets("Feuil1") or Set Feuil1Sheet = Sheets("Feuil1")

我可以想到的始終以本地語言引用“ 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”以引用第一張紙。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM