问题描述
我试图将标记从数字转换为等级(例如,将(90-100)更改为(Excellent),将(80-89)更改为(非常好)),等等..代码可以正常工作,没有任何问题,但是当我尝试用阿拉伯语写等级时,等级出现在Excel工作表未知中,如下所示
我已经将本地系统语言更改为阿拉伯语,但是相同..
我的代码如下
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
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")
旁边:相反,您只需使用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