背景:我在Word中使用了大量专门的VBA宏,用于文档格式设置。在Word 2003中,这些宏是从自定义工具栏激活的。我最近已过渡到Word 2007,并希望能够从用VS 2010创建的新Word功能区中运行这些现有的VBA宏。但是,我不知道如何从新的功能区按钮调用现有的宏。
问题:如何从C#Word加载项中调用存储在.dotm模板中的现有VBA宏?
任何帮助将不胜感激。
我想在MS Word文档中对每个粗体句子做第一个字母.什么是实现这一目标的好方法?
如何确定Word VBA宏中表的选择处于活动状态的当前行?
我尝试过所有变种都没有成功:
MsgBox Selection.Range
MsgBox Selection.Rows.Item.Index
Run Code Online (Sandbox Code Playgroud) 我有一些Word文档,每个文档包含几百页的科学数据,其中包括:
问题是,以Word的形式存储这些数据对我们来说效率不高.所以我们希望将所有这些信息存储在数据库(MySQL)中.我们想将这些格式转换为LaTex.
有没有办法使用VBA迭代所有的子脚本和上标和方程?
如何迭代数学方程式?
有没有办法使用VBA将RTF文本从Access数据库中的备注字段复制到Word文档.我目前有这个代码,但它产生html文本(文本包含标签而不是格式化).
' Query the database and get the sales for the specified customer
Set rs = CurrentDb.OpenRecordset("SELECT * FROM Sales WHERE Sales.[ID] ='" & Forms![customers]![id] & "'")
'Check to see if the recordset actually contains rows
If Not (rs.EOF And rs.BOF) Then
rs.MoveFirst
Do Until rs.EOF = True
' Create file and add rtf text
Set ts = fso.CreateTextFile("c:\temp\temp.rtf", True)
ts.Write rs(3)
ts.Close
' Add a row
doc.Tables(1).Rows.Add
' Get the number of the added row to add data
i …Run Code Online (Sandbox Code Playgroud) 我有一个单词2013宏,这需要相当长的时间才能完成.
宏正在重新格式化文档,并且屏幕在宏运行时不断更新,我猜这是大部分时间花费的时间.
如何在宏中禁用单词中的屏幕更新并在宏完成时刷新它?
我试图使用VBA复制Word中的表行,而不使用Selection对象或剪贴板.也就是说,我想要一个与现有行具有相同内容的新行.
为此,我首先创建一个新的(空)行,并循环遍历源行中的每个单元格,并将其内容复制到目标行中的相应单元格中.
为了复制每个单元格,我得到一个Range引用源单元格的整个内容Range的对象,以及目标单元格的等效对象,然后执行以下操作:
oToRange.FormattedText = oFromRange.FormattedText
Run Code Online (Sandbox Code Playgroud)
这在Office 2003上运行良好,并且大部分时间都在Office 2010上运行.但是,我遇到了一个特定场景的实际问题.我(大大)简化了这个场景,以展示问题的核心.
在下图中,外(灰色)2R x 1C表中有两个单元格.第二行是要复制的行.第一行是我创建的新行,我想要复制第二行的内容.

您会注意到第二行包含嵌套表.
当我在Word 2003中运行下面的代码时,它完美地工作,我得到以下结果:

但是,在Word 2010中,相同的代码会产生以下结果:

如您所见,单元格内容已在目标表格单元格之前(和之外)插入.
值得一提的是,如果我在嵌套表之后放置一些东西,那么它不再是源单元格中的最后一个东西,那么就不会出现这个问题.
这是我正在使用的完整VBA代码:
Dim oDoc As Word.Document
Set oDoc = ThisDocument
Dim oFromRange As Range
Set oFromRange = ThisDocument.Tables(1).Cell(2, 1).Range
oFromRange.End = oFromRange.End - 1
Dim oToRange As Range
Set oToRange = ThisDocument.Tables(1).Cell(1, 1).Range
oToRange.End = oToRange.End - 1
oToRange.FormattedText = oFromRange.FormattedText
Run Code Online (Sandbox Code Playgroud)
注意:调整到源和目标范围Cell.Range的末尾是必要的,因为包括单元格结束标记,我不想复制它.
我该怎么做才能说服它将内容放在目标单元格内(就像Word 2003那样),而不是之前呢?
如何在每次保存文档之前使Microsoft Word运行VBA宏?可以在不将宏添加到文档本身的情况下完成吗?
使用正则表达式查找文本时,我在某处出错了.
这是我正在使用的代码.
findText = "(Event Handling|Event Handling \(EH\))"
Debug.Print findText
With Selection.Find
.Text = findText
.Replacement.Text = "Replaced"
.Forward = True
.Wrap = wdFindAsk
.Format = False
.matchCase = False
.MatchWholeWord = False
.MatchWildcards = True
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute
Selection.Find.Execute Replace:=wdReplaceAll
Run Code Online (Sandbox Code Playgroud)
我试图找到Event Handling或Event Handling (EH)在通道中,但OR运算符不工作.
当我试图Event Handling单独找到它的时候.同样的Event Handling (EH).但是与OR运算符一起|它不起作用.为什么?
我在VBA中还很陌生,我还没有完全习惯语法,所以对我的问题听起来很愚蠢感到抱歉。
我正在Word 2010中使用RequisitePro40和VBA 7.0。在我的一个模块中,我具有以下循环和If条件:
Dim rqRequirements As ReqPro40.Requirements
Dim rqRequirement As ReqPro40.Requirement
Const eAttrValueLookup_Label = 4
Dim a As Integer
...
For Each vReqKey In rqRequirements
Set rqRequirement = rqRequirements(vReqKey)
If rqRequirement.AttrValue("MyAttreName", eAttrValueLookup_Label).text <> Null Then
a = 1
End If
If rqRequirement.AttrValue("MyAttreName", eAttrValueLookup_Label).text = Null Then
a = 2
End If
Next
Run Code Online (Sandbox Code Playgroud)
在循环的每次迭代中,将同时执行a = 1和a = 2!
基于此,相等和不相等运算符为“ =”和“ <>”。因此,我希望为字符串执行a = 1或a = 2。我的语法有问题吗?还是ReqPro相关问题?
我也尝试使用“ Is”和“ IsNot”运算符,但它们导致编译器错误:类型不匹配
有人可以帮我弄这个吗?
更新: …
word-vba ×10
vba ×8
ms-word ×7
access-vba ×1
c# ×1
ms-access ×1
office-2010 ×1
regex ×1
requirements ×1
row ×1
vsto ×1