首页 > 解决方案 > 随机序列的粘性标签

问题描述

我是 VBA 新手。我需要做的是粘性标签,就像不同项目的图片所示。Word 中的此类文本 [XXX….] 将被我在 Internet 中找到的 Excel 中的宏替换(见下文),具体取决于项目。对于每个粘性标签,没有括号 XXX... 的文本将保持不变。我在放置源信息的过程中有这样的 Excel 部分:示例

但是,我有两个无法解决的文本特殊情况/问题:

  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

标签: excelvbams-word

解决方案


您不需要 VBA 从 Excel 中的数据生成标签,因为这是一个内置功能。

以下是有关如何操作的信息:

无论您尝试打印的是否是实际地址,过程都是相同的。


至于您的代码,我修复了缩进,因此更容易看到发生了什么。我建议Option Explicit在 [every] 模块 [always] 的顶部添加该行,以帮助“强制”您正确声明和处理变量、对象等。

在您的代码中,未声明以下变量:

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

...并且至少有一个拼写错误(ObjWordvs ObWord)。

也可以看看:

...和教程


推荐阅读