问题使用VBA将标记从数字转换为阿拉伯语的等级

问题描述

我试图将标记从数字转换为等级(例如,将(90-100)更改为(Excellent),将(80-89)更改为(非常好)),等等..代码可以正常工作,没有任何问题,但是当我尝试用阿拉伯语写等级时,等级出现在Excel工作表未知中,如下所示

enter image description here

我已经将本地系统语言更改为阿拉伯语,但是相同..

我的代码如下

Private Sub Convert_Click()

Dim n As Integer

n = Application.WorksheetFunction.CountA(Range("a:a"))

For i = 2 To n

 If Worksheets("Sheet1").Range("c" & i).Value >= 90 Then
 Worksheets("Sheet2").Range("c" & i).Value = "امتياز"

 Else

 Worksheets("Sheet2").Range("c" & i).Value = " جيد جدا "
 
 End If
 
Next i

End Sub

FYA,

امتياز >> meaning in english  "Excellent"
جيد جدا >> meaning in english "very good"

亲切问候

解决方法

您应该避免直接在vba编辑器中输入非ASCII字符。即使由于您的区域设置而对您有用(有时),它也对试图帮助您的人不起作用。

在这种情况下,建议您在excel中输入常量名称,例如:

Name       Value
Excellent  "إمتياز"
VeryGood   "جيد جدا"
Good       "جيد"
... and so on

enter image description here 然后将您的vba代码更改为类似的内容

Private Sub Convert_Click()

    Dim n As Integer

    n = Application.WorksheetFunction.CountA(Range("a:a"))

    For i = 2 To n

        If Worksheets("Sheet1").Range("c" & i).Value >= 90 Then
            Worksheets("Sheet2").Range("c" & i).Value = [Excellent]

        ElseIf Worksheets("Sheet1").Range("c" & i).Value >= 80
            Worksheets("Sheet2").Range("c" & i).Value = [VeryGood]

        ElseIf Worksheets("Sheet1").Range("c" & i).Value >= 70
            Worksheets("Sheet2").Range("c" & i).Value = [Good]

        End If
 
    Next i
End Sub

编辑(遵循OP的回答)

另一种(类似)方法是使用专用的工作表,在其中定义整个应用程序使用的全局变量。在这种情况下,上面的代码将保持不变,并且[Excellent]Sheets(Sheet4.Name).Range("A1").Value更具可读性。您也可以使用"Sheets("Globals").Range("Excellent")

enter image description here

旁边:相反,您只需使用Sheets(Sheet4.Name).Range("A1").Value

即可Sheet4.Range("A1").Value ,

感谢@Super Symmetry为您提供支持。.我使用了另一种方法..创建了另一个工作表,并使用阿拉伯语在其中插入了等级,然后在VBA中,我将这些值称为..如下所示

Private Sub Convert_Click()

Dim n As Integer

n = Application.WorksheetFunction.CountA(Range("a:a"))

For i = 2 To n

 If Worksheets("Sheet1").Range("c" & i).Value >= 90 Then
 Worksheets("Sheet2").Range("c" & i).Value = Sheets(Sheet4.Name).Range("A1").Value
  
 Else

 Worksheets("Sheet2").Range("c" & i).Value = Sheets(Sheet4.Name).Range("A6").Value
  
 End If
 
Next i

End Sub