Липкие этикетки для случайной последовательности - PullRequest
0 голосов
/ 02 ноября 2018

Я новичок в VBA. Что мне нужно сделать, так это прикрепить ярлыки, как показано на рисунке для разных проектов. Такой текст [XXX….] В Word будет заменен макросом в Excel, который я нашел в Интернете (см. Ниже) в зависимости от проекта. Текст без скобок XXX… останется неизменным для каждой наклеенной этикетки. У меня есть такая часть процесса Excel, где размещается исходная информация: Пример

Однако у меня есть 2 особые ситуации / проблемы с текстом, которые я не могу решить:

  1. В зависимости от проекта, мне нужно разное количество наклеек. Иногда это 30, иногда 70. Итак, я хотел бы изменить код, который мне нужен, чтобы реализовать специальное поле в Excel, где я мог бы ввести точное значение меток, которые мне нужны. Как я могу это сделать?
  2. Самая большая красная буква [X] будет заменена на основе случайной последовательности A или B. Таким образом, мы имеем, например, 70 липких меток и случайная последовательность 1-A, 2-B, 3-A и т. Д. До 70 (но это может быть другая последовательность для следующего проекта). Как я могу это сделать?

Я не прошу код для этой задачи (но если вы так любезны, я буду очень признателен). По крайней мере, я хотел бы знать, как я могу сделать это в Excel VBA, чтобы получить ярлыки в Word.

Заранее спасибо.

Sub Generator()
    Dim ObWord As Word.Application
    Dim objDoc As Word.document
    Dim file As String
    Set ob1 = ActiveWorkbook.ActiveSheet
    f_r = Selection.Row
    stb = Selection.Column
    f_c = Selection.CurrentRegion.Columns(Selection.CurrentRegion.Columns.Count).Column
    path_f = ThisWorkbook.Path
    file = Application.GetOpenFilename("Excel Files (*.docx;*.doc), *docx;*.doc")
    If Dir(file) = Empty Then
        Exit Sub
    Else
        Set ObjWord = CreateObject("Word.Application")
        With ObjWord
            .Visible = True
            .Documents.Open Filename:=file
            Set objDoc = .ActiveDocument
        End With
        With objDoc.Range
            For j = 1 To f_c
                isk_zn = ob1.Cells(1, j)
                zamen_zn = ob1.Cells(f_r, j)
                .Find.ClearFormatting
                .Find.Replacement.ClearFormatting
                With .Find
                    .Text = isk_zn
                    .Replacement.Text = zamen_zn
                    .Forward = True
                    .wrap = wdFindContinue
                    .Format = False
                    .MatchCase = False
                    .MatchWholeWord = True
                    .MatchWildcards = False
                    .MatchSoundsLike = False
                    .MatchAllWordForms = False
                End With
                .Find.Execute Replace:=2
            Next j
            FName = ob1.Cells(f_r, stb)
            objDoc.SaveAs Filename:=path_f & "\" & FName
            objDoc.Close
            ObjWord.Quit
        End With
        Set objDoc = Nothing
        Set ObjWord = Nothing
        ob1.Activate
    End If
End Sub

1 Ответ

0 голосов
/ 02 ноября 2018

Вам не нужен VBA для создания меток из данных в Excel, поскольку это встроенная функция.

Вот информация о том, как:

Независимо от того, действительно ли вы пытаетесь напечатать адреса, процесс один и тот же.


Что касается вашего кода, я исправил отступ, чтобы было легче увидеть, что происходит. Я бы предложил добавить строку Option Explicit в верхней части [каждого] модуля [всегда], чтобы помочь "заставить" вас правильно объявить и обработать ваши переменные, объекты и т. Д.

В вашем коде не объявлены следующие переменные:

ob1, f_r, stb, f_c, path_f, file, ObjWord, j, isk_zn, zamen_zn, FName

... и по крайней мере один из них написан с ошибкой (ObjWord против ObWord).

Смотри также:

... и Обучающие программы :

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