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

Problem convert the marks from number to rating in Arabic using VBA

我试图将分数从数字转换为评级(即 (90 - 100 ) 更改为 (Excellent) , (80 - 89 ) 更改为 (very good)) 等等 ..代码工作正常,没有任何问题,但是当我尝试用阿拉伯语编写评级时,评级出现在 Excel sheet unknown 中,如下所示

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

我的代码如下

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

财政年度,

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

亲切的问候

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

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

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

然后将您的 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 的回答)

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

旁白: 相反 Sheets(Sheet4.Name).Range("A1").Value 你可以简单地使用 Sheet4.Range("A1").Value

感谢@Super Symmetry 的支持..我使用了另一种解决方法..我创建了另一个 sheet 并在其中插入了 Arabic 评级,然后在 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