标签: word-vba

从函数,子或类型返回多个值?

所以我想知道,如何从VBA中的函数,子或类型返回多个值?我有这个主要的子应该从几个函数收集数据,但一个函数只能返回它看起来的一个值.那么如何将多个返回给子?

vba function return-value word-vba

31
推荐指数
6
解决办法
16万
查看次数

宏将MS Word表导出到Excel工作表

我有一个包含许多表的word文档.有谁知道如何编写宏来将这些表导出到不同的Excel工作表?

excel vba export ms-word word-vba

25
推荐指数
2
解决办法
8万
查看次数

从Word文档中获取标题

如何使用VBA获取word文档中所有标题的列表?

vba ms-word word-vba

22
推荐指数
2
解决办法
5万
查看次数

获取VBA中的子目录列表

  • 我想获得目录中所有子目录的列表.
  • 如果可行,我想将其扩展为递归函数.

然而,我最初获得子目录的方法失败了.它只显示包括文件在内的一切:

sDir = Dir(sPath, vbDirectory)
Do Until LenB(sDir) = 0
    Debug.Print sDir
    sDir = Dir
Loop
Run Code Online (Sandbox Code Playgroud)

该列表以".."和几个文件夹开头,以".txt"文件结尾.


编辑:
我应该补充说,这必须在Word中运行,而不是Excel(许多功能在Word中不可用),它是Office 2010.


编辑2:

可以使用确定结果的类型

iAtt = GetAttr(sPath & sDir)
If CBool(iAtt And vbDirectory) Then
   ...
End If 
Run Code Online (Sandbox Code Playgroud)

但这给了我新的问题,所以我现在正在使用基于的代码Scripting.FileSystemObject.

recursion vba ms-word ms-office word-vba

20
推荐指数
3
解决办法
4万
查看次数

VBA是否包含注释块语法?

在VBA中,有一种简短的方法可以像java一样注释掉一段代码/*...*/吗?

vba excel-vba access-vba word-vba outlook-vba

20
推荐指数
3
解决办法
8万
查看次数

在visual basic中的指定索引处从字符串获取char

如上所述如何从visual basic中的指定索引处获取char?我浏览谷歌这些不起作用:

s(index), s.Chars(index),s,Characters(index)

那么如何在指定的索引处获取char?

vba word-vba

18
推荐指数
1
解决办法
11万
查看次数

Me关键字的行为不一致

我注意到模板文件Me中VBA代码中关键字的行为是不同的,这取决于文档是否具有ActiveX控件.

  • 带有ActiveX控件的文档:Me引用从模板创建的新文件.
  • 没有ActiveX控件的文档:Me引用模板而不是新文件.

为了演示这种奇怪的行为,我做了两个示例文件:

两个文件都是相同的,它们之间的唯一区别是一个有一个Button而另一个没有.两个文件的VBA代码如下:

Private Sub Document_New()
    Selection.TypeText "Me keyword is referencing """ & Me.Name & """."
End Sub
Run Code Online (Sandbox Code Playgroud)

如果您从这些模板创建新文件,您将意识到结果是不同的:

WithActiveX.dotm的内容是

Me关键字引用"Document1".< - 由上面的代码生成的字符串

而WithoutActiveX.dotm的内容是

Me关键字引用"WithoutActiveX.dotm".< - 由上面的代码生成的字符串

我做了几个测试,得出结论,不一致的来源是ActiveX控件的存在(没有与控件相关的代码:它只存在于文档中).

这是设计还是只是一个bug?

编辑2017-06-13:这里描述的错误似乎是部分修复的,但它仍然是可重现的.现在,只有在使用其中一个模板(如空白文档)创建新文档之前,才会打开Word实例.

vba word-vba

18
推荐指数
1
解决办法
616
查看次数

将从excel粘贴的图表的文件大小减小为word

我一直在通过将excel文档中的一些图表和数据复制到word文档来创建报表.我正在粘贴内容控件,所以我ChartObject.CopyPicture在excel和ContentControl.Range.Pasteword中使用.这是在循环中完成的:

Set ws = ThisWorkbook.Worksheets("Charts")
With ws
For Each cc In wordDocument.ContentControls

    If cc.Range.InlineShapes.Count > 0 Then
        scaleHeight = cc.Range.InlineShapes(1).scaleHeight
        scaleWidth = cc.Range.InlineShapes(1).scaleWidth
        cc.Range.InlineShapes(1).Delete
        .ChartObjects(cc.Tag).CopyPicture Appearance:=xlScreen, Format:=xlPicture
        cc.Range.Paste
        cc.Range.InlineShapes(1).scaleHeight = scaleHeight
        cc.Range.InlineShapes(1).scaleWidth = scaleWidth
    ElseIf ...
Next cc
End With
Run Code Online (Sandbox Code Playgroud)

使用Office 2007创建这些报告产生的文件大约为6MB,但在Office 2010中创建它们(使用相同的工作表和文档)会产生大约10倍的文件.

在解压缩docx之后,我发现额外的大小来自emf文件,这些文件对应于使用VBA粘贴的图表.它们的范围从360到900 KB之间,它们是5-18 MB.而且图形效果并不明显.

更进一步,它似乎与图表风格有关.我创建了一个新的电子表格并插入了7个数据点和相应的2D饼图.使用默认样式,它复制为79 KB emf,而使用样式26复制为10 MB emf.当我使用Office 2007时,图表将复制为700 KB emf.这是代码:

Sub CopyAndPaste()
    ThisWorkbook.Worksheets("Charts").ChartObjects("Chart 1").CopyPicture Appearance:=xlScreen, Format:=xlPicture
    GetObject(, Class:="Word.Application").ActiveDocument.Range.Paste
End Sub
Run Code Online (Sandbox Code Playgroud)

我能够使用格式的CopyPicture xlBitmap,虽然它稍微小一点,但它比Office 2007生成的emf大,质量明显更差.还有其他减少文件大小的选项吗?理想情况下,我想为使用Office 2007的图表生成一个具有相同分辨率的文件.有没有任何方法只使用VBA(不修改电子表格中的图表)?我可以轻松地复制为对象而无需链接文档?

vba ms-word excel-vba word-vba .emf

18
推荐指数
1
解决办法
3238
查看次数

VBA如何获取当前用户应用程序数据文件夹的路径?

一般来说,

使用VBA,如何确定当前用户Application Data文件夹的位置?

FileSystemObjects特殊文件夹只知道3个文件夹

  • WindowsFolder
  • SystemFolder
  • 临时文件夹

具体来说,我需要Word宏将文件复制到Application Data文件夹下的文件夹.

例如,在VB.Net中我可以My.Computer.FileSystem.SpecialDirectories.CurrentUserApplicationData用来做这件事

windows filesystems word-vba

16
推荐指数
2
解决办法
6万
查看次数

通过自定义按钮运行宏时,VBA错误"参数数量错误或属性分配无效"

我有一个宏,我通过自定义UI编辑器添加的选项卡/组/按钮调用 -

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
    <ribbon startFromScratch="false">
        <tabs>
            <tab id="tabCustomActions" label="Custom ActionsXXX" insertAfterMso="TabDeveloper">
                <group id="GroupTLA" label="TLA Actions">
                    <button id="buttonFormatTLA" label="Format as TLA" image="TLALogo" size="large" onAction="start_tla" />
                </group>
            </tab>
        </tabs>
    </ribbon>
</customUI>
Run Code Online (Sandbox Code Playgroud)

按钮显示很好,带有我的自定义徽标,但是当我点击按钮时,我得到以下错误 -

VBA错误

通常情况下,此错误后未打开VBA,如果我打开开发人员控制台然后尝试单击按钮,则VBA中的代码不会被指示为问题.

奇怪的是,如果我尝试手动运行宏,它可以正常工作,没有错误.有没有人有任何想法如何解决这个问题?

如果您希望查看它,这是我在Pastebin中的完整代码.谢谢.

tabs vba ribbon word-2007 word-vba

13
推荐指数
1
解决办法
1万
查看次数