Пользовательская функция VBA работает в подпрограмме, но не в листе - PullRequest
0 голосов
/ 15 января 2020

У меня есть пользовательская функция VBA, которая используется для генерации штрих-кода ean13. Этот код работает в Microsoft Excel 97-2013 Worksheet, но не в предыдущих версиях. Я использую Microsoft Excel 2013, поэтому при преобразовании этой электронной таблицы в Microsoft Excel 2013 функция перестает работать на листах. Когда я тестировал его в подпрограмме, он работал.

Я скопировал этот код из здесь

Public Function ean13$(chaine$)
  'V 1.0
  'Parameters: a 12-digit string
  'Return: * a chain which, displayed with the EAN13.TTF font, gives the barcode
  '         * an empty string if parameter supplied incorrect
  Dim i%, checksum%, first%, CodeBarre$, tableA As Boolean
  ean13$ = ""
  'Check that there are 12 characters
  If Len(chaine$) = 12 Then
    'And that these are many figures
    For i% = 1 To 12
      If Asc(Mid$(chaine$, i%, 1)) < 48 Or Asc(Mid$(chaine$, i%, 1)) > 57 Then
        i% = 0
        Exit For
      End If
    Next
    If i% = 13 Then
      'Calculation of the control key
      For i% = 2 To 12 Step 2
        checksum% = checksum% + Val(Mid$(chaine$, i%, 1))
      Next
      checksum% = checksum% * 3
      For i% = 1 To 11 Step 2
        checksum% = checksum% + Val(Mid$(chaine$, i%, 1))
      Next
      chaine$ = chaine$ & (10 - checksum% Mod 10) Mod 10
      'The first number is taken as is, the second comes from table A
      CodeBarre$ = Left$(chaine$, 1) & Chr$(65 + Val(Mid$(chaine$, 2, 1)))
      first% = Val(Left$(chaine$, 1))
      For i% = 3 To 7
        tableA = False
         Select Case i%
         Case 3
           Select Case first%
           Case 0 To 3
             tableA = True
           End Select
         Case 4
           Select Case first%
           Case 0, 4, 7, 8
             tableA = True
           End Select
         Case 5
           Select Case first%
           Case 0, 1, 4, 5, 9
             tableA = True
           End Select
         Case 6
           Select Case first%
           Case 0, 2, 5, 6, 7
             tableA = True
           End Select
         Case 7
           Select Case first%
           Case 0, 3, 6, 8, 9
             tableA = True
           End Select
         End Select
       If tableA Then
         CodeBarre$ = CodeBarre$ & Chr$(65 + Val(Mid$(chaine$, i%, 1)))
       Else
         CodeBarre$ = CodeBarre$ & Chr$(75 + Val(Mid$(chaine$, i%, 1)))
       End If
     Next
      CodeBarre$ = CodeBarre$ & "*"   'Adding central divider
      For i% = 8 To 13
        CodeBarre$ = CodeBarre$ & Chr$(97 + Val(Mid$(chaine$, i%, 1)))
      Next
      CodeBarre$ = CodeBarre$ & "+"   'Addition of end mark
      ean13$ = CodeBarre$
    End If
  End If
End Function

Я использую эту функцию в листе =ean13(123456789012), но он выбрасывает ошибка #REF! Но когда я использую это в подпрограмме, тогда это работает

Function myBarcode()
MsgBox ean13("123456789012")
End Function

1 Ответ

0 голосов
/ 15 января 2020

Наконец, я понял это, я просто заменяю имя функции ean13$ на ean_13, чтобы оно работало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...