Вызов функции в макросах

Я добавил функцию в Excel Visual Basic, как показано ниже, которая преобразует строку в штрих-код, полученный из блог

введите здесь описание изображения

   Public Function Code128(SourceString As String)

  Dim Counter As Integer
  Dim CheckSum As Long
  Dim mini As Integer
  Dim dummy As Integer
  Dim UseTableB As Boolean
  Dim Code128_Barcode As String

  If Len(SourceString) > 0 Then

    'Check for valid characters
    For Counter = 1 To Len(SourceString)

        Select Case Asc(Mid(SourceString, Counter, 1))

            Case 32 To 126, 203

            Case Else

                MsgBox "Invalid character in barcode string." & vbCrLf & vbCrLf & "Please only use standard ASCII characters", vbCritical
                Code128 = ""
                Exit Function

        End Select

    Next

    Code128_Barcode = ""
    UseTableB = True

    Counter = 1
    Do While Counter <= Len(SourceString)

        If UseTableB Then

            'Check if we can switch to Table C
            mini = IIf(Counter = 1 Or Counter + 3 = Len(SourceString), 4, 6)
            GoSub testnum

            If mini% < 0 Then 'Use Table C

                If Counter = 1 Then

                    Code128_Barcode = Chr(205)

                Else 'Switch to table C

                    Code128_Barcode = Code128_Barcode & Chr(199)

                End If

                UseTableB = False

            Else

                If Counter = 1 Then Code128_Barcode = Chr(204) 'Starting with table B

            End If

        End If

        If Not UseTableB Then

            'We are using Table C, try to process 2 digits
            mini% = 2
            GoSub testnum

            If mini% < 0 Then 'OK for 2 digits, process it

                dummy% = Val(Mid(SourceString, Counter, 2))
                dummy% = IIf(dummy% < 95, dummy% + 32, dummy% + 100)
                Code128_Barcode = Code128_Barcode & Chr(dummy%)
                Counter = Counter + 2

            Else 'We haven't got 2 digits, switch to Table B

                Code128_Barcode = Code128_Barcode & Chr(200)
                UseTableB = True

            End If

        End If

        If UseTableB Then

            'Process 1 digit with table B
            Code128_Barcode = Code128_Barcode & Mid(SourceString, Counter, 1)
            Counter = Counter + 1

        End If

    Loop

    'Calculation of the checksum
    For Counter = 1 To Len(Code128_Barcode)

        dummy% = Asc(Mid(Code128_Barcode, Counter, 1))
        dummy% = IIf(dummy% < 127, dummy% - 32, dummy% - 100)

        If Counter = 1 Then CheckSum& = dummy%

        CheckSum& = (CheckSum& + (Counter - 1) * dummy%) Mod 103

    Next

    'Calculation of the checksum ASCII code
    CheckSum& = IIf(CheckSum& < 95, CheckSum& + 32, CheckSum& + 100)

    'Add the checksum and the STOP
    Code128_Barcode = Code128_Barcode & Chr(CheckSum&) & Chr$(206)
End If

Code128 = Code128_Barcode

Exit Function


     testnum:

    'if the mini% characters from Counter are numeric, then mini%=0
    mini% = mini% - 1
    If Counter + mini% <= Len(SourceString) Then

        Do While mini% >= 0

            If Asc(Mid(SourceString, Counter + mini%, 1)) < 48 Or Asc(Mid(SourceString, Counter + mini%, 1)) > 57 Then Exit Do
            mini% = mini% - 1

        Loop

    End If

    Return

   End Function

Мне нужно вызвать эту функцию в макросе, который я создаю для форматирования ячеек. Я новичок в макросах и функции vba. Теперь я не знаю, как вызывать эти функции внутри макросов и передавать столбец A функции в цикле. Таким образом, все значения в столбце A преобразуются в штрих-коды.

With ActiveSheet.PageSetup
.PrintTitleRows = "$1:$1"
.PrintGridlines = True

.Orientation = xlLandscape
.PaperSize = xlPaperA4

 .Zoom = False
 .FitToPagesWide = 1
 .FitToPagesTall = False

  End With

  For Each Target In Range(Cells(1, 1), Cells(65536, 1).End(xlUp))
   If Target <> "" Then
   With Range(Target, Target.Offset(0, 11))
   .WrapText = True
  End With
   End If
  Next

person user4912134    schedule 22.03.2017    source источник
comment
Думаю, вам нужно опубликовать весь свой код. если вы используете пользовательские функции Google, я уверен, что вы найдете руководство о том, как звонить.   -  person SJR    schedule 22.03.2017
comment
@SJR Я пробовал гуглить, не зная, как перебрать столбец для вызова функции. Вот почему я обратился сюда за помощью   -  person user4912134    schedule 22.03.2017
comment
Хорошо, опубликуйте код функции. Вы спрашиваете, как это вызвать из кода, который вы разместили выше?   -  person SJR    schedule 22.03.2017
comment
Выше есть макрос. Сейчас выложу код функции   -  person user4912134    schedule 22.03.2017
comment
Являются ли все значения в столбце A строками? Вы хотите, чтобы они были заменены результатом прохождения их через формулу или результаты были помещены в другое место?   -  person SJR    schedule 22.03.2017
comment
Вы, кажется, опубликовали этот вопрос дважды - пожалуйста, не могли бы вы закрыть другой, чтобы люди не тратили свое время, отвечая на него?   -  person SJR    schedule 22.03.2017
comment
Я удалил другой вопрос. Столбец A в настоящее время является строкой, но как только я вызову функцию, мне придется установить шрифт Code128.   -  person user4912134    schedule 22.03.2017


Ответы (2)


Я не совсем уверен, что вы подразумеваете под «установить шрифт Code128», так что это мое лучшее предположение

With ActiveSheet.PageSetup
    .PrintTitleRows = "$1:$1"
    .PrintGridlines = True
    .Orientation = xlLandscape
    .PaperSize = xlPaperA4
    .Zoom = False
    .FitToPagesWide = 1
    .FitToPagesTall = False
End With

For Each Target In Range("A1", Range("A" & Rows.Count).End(xlUp))
    If Target.Value <> vbNullString Then
        Target.Value = Code128(Target.Value)
        Target.Resize(, 12).WrapText = True
    End If
Next
person SJR    schedule 22.03.2017
comment
Как установить стиль шрифта столбца A - person user4912134; 22.03.2017
comment
Это другой вопрос. Похоже, по ссылке есть инструкция по установке шрифта. - person SJR; 22.03.2017
comment
Да, я установил шрифт. Но я не уверен, как установить один столбец, когда Target.Font = Code 128 выдает ошибку - person user4912134; 22.03.2017
comment
Предположение, но попробуйте Target.Font = Code 128 или вы можете сделать это вручную, как в шаге 7. - person SJR; 22.03.2017
comment
Я получаю ошибку времени выполнения 424 в Target.Value = Code128(Target.Value) - person user4912134; 22.03.2017
comment
Вы отметили это как ответ. Значит ли это, что вы решили проблему? - person SJR; 22.03.2017

Application.WorksheetFunction.Code128(tempString)

Убедитесь, что Option Explicit находится в верхней части вашей функции (может не понадобиться, если у вас есть публичная функция, не уверен)

person Mjall2    schedule 22.03.2017