小编Kaz*_*wor的帖子

将从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
查看次数

如何可靠地获取Word文档中的页数?

我正在使用自动化对Word文档进行大量更改,然后运行VBA宏,其中包括检查文档不超过一定数量的页面.

我正在使用ActiveDocument.Information(wdNumberOfPagesInDocument)获取页数,但此方法返回的结果不正确.我认为这是因为Word尚未更新文档的分页以反映我所做的更改.

ActiveDocument.ComputeStatistics(wdStatisticPages) 也遇到同样的问题.

我试着坚持打电话ActiveDocument.Repaginate,但这没什么区别.

我确实有一些运气,在文档的末尾添加一个段落,然后再次删除它 - 但该黑客似乎不再有效(我最近从Word 2003迁移到Word 2010).

有什么方法可以强制Word 实际重新组合,和/或等到重新分页完成后?

vba ms-word word-vba word-2010

11
推荐指数
3
解决办法
2万
查看次数

如何在Excel VBA中访问Word公共变量

我正在尝试自动化Excel VBA正在完成所有工作的一些报告生成.我的雇主有一套标准化的模板,所有文件都应该从中生成.我需要从Excel VBA填充其中一个模板.Word模板广泛使用VBA.

这是(部分)我的Excel VBA代码:

Sub GenerateReport() ' (Tables, InputDataObj)
  ' code generating the WordApp object (works!)

  WordApp.Documents.Add Template:="Brev.dot"

  ' Getting user information from Utilities.Userinfo macro in Document
  Call WordApp.Run("Autoexec") ' generating a public variable
  Call WordApp.Run("Utilities.UserInfo")
  ' more code
End sub
Run Code Online (Sandbox Code Playgroud)

在Word VBA Autoexec模块中,user定义并声明了一个名为的公共变量.模块中的UserinfoUtilities组件填充user.这两个例程都是在没有任何VBA投诉的情况下运行的.我希望能够访问user我的Excel VBA中的变量,但我收到以下错误

编译错误:尚未在此上下文中创建的变量.

如何在Excel VBA中访问Word VBA变量?我认为它或多或少是一样的?

编辑:user变量是Type仅使用String属性定义的用户.复制填充user变量的Word VBA函数绝对可行,只需要比我更多的工作......

excel vba ms-word excel-vba word-vba

9
推荐指数
1
解决办法
1166
查看次数

MVC:将模型/模型数据传递给控制器​​的视图?

如果视图需要从模型访问数据,您认为控制器应该:

a)将模型传递给视图
b)将模型的数据传递给视图
c); 它不应该是控制器的关注点.让视图直接访问模型以检索数据.只让控制器提供视图所需的一些参数来过滤模型中的数据.
d)这取决于具体情况.
e)以上都不是,但[...]

谢谢

在评论中对用户删除的答案进行了一些辩论后,可能需要澄清.我对MVC架构的看法偏向于Zend Framework(php),其中默认情况下控制器中的操作具有分配给它的默认视图.因此,模型不是决定哪个视图是合适的,而是控制器.你觉得模型应该决定哪种观点合适吗?我认为让视图基于模型构建的唯一方法是让控制器将模型传递给视图.是否还有其他技术可以让视图在不涉及控制器的情况下访问模型?或者让控制器将模型传递给视图是否完美,以便可以根据模型属性构建视图?

language-agnostic model-view-controller design-patterns

5
推荐指数
1
解决办法
6910
查看次数

如何使用vba代码将值写入单元格而不进行自动类型转换?

这个问题看起来很简单,但我找不到解决方案(我已经在考虑它了:))

好的,所以我只想使用vba代码将一个特定的值放入excel单元格中,就像这样简单:

Cells(1,1).Value2 = "123,456"
Run Code Online (Sandbox Code Playgroud)

问题:这是一个字符串(故意),但excel总是将其转换为数字,并将该数字放入单元格,而不是我想要的字符串.

我怎么能强迫excel不要转换它,只是把我想要的(字符串)放入单元格?

谢谢,

string excel vba type-conversion

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

如何在MS Word中检索形状的名称?

在Excel中,我们在左上角有"名称框",但我找不到在Word中检索形状名称的方法.我怎么做?

vba ms-word word-vba

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

Excel VBA:在向MS-Word添加文本时设置字体样式和大小

我想使用Excel VBA创建一个word文档,并添加各种字体样式和大小的文本.这是我的代码:

Sub CreateNewWordDoc()
    Dim wrdDoc As Word.Document
    Dim wrdApp As Word.Application
    Set wrdApp = CreateObject("Word.Application")
    Set wrdDoc = wrdApp.Documents.Add

    Dim charStart As Long
    Dim charEnd As Long

    With wrdDoc
        For i = 1 To 3
            charStart = wrdApp.Selection.Start
            .Content.InsertAfter (" some text")
            charEnd = wrdApp.Selection.End
            If i = 1 Then
                'set the text range (charStart,charEnd) to e.g. Arial, 8pt
            Else
                If i = 2 Then
                    'set the text range (charStart,charEnd) to e.g. Calibri, 10pt
                Else
                    'set the text range …
Run Code Online (Sandbox Code Playgroud)

fonts vba ms-word excel-vba word-vba

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

使用VBA更改Powerpoint 2013中幻灯片元素的颜色

我有一个150张幻灯片的powerpoint演示文稿,我想根据公司的品牌重塑努力进行修改.我们以前的绿松石色已用于文字,线条,形状和形状填充.我想构建一个贯穿整个演示文稿的VBA脚本,并一举修改所有幻灯片,并用我们新的深灰色替换这种蓝色.

旧的企业颜色是RGB(0,176,240) - 绿松石

新的企业颜色是RGB(71,67,65) - 深灰色

我在互联网上尝试过多种不同的vba,但无法让它正常工作.以下是旧颜色的典型幻灯片的屏幕截图 - 所有蓝色项目都应更改为深灰色:

截图

来自一个有用的论坛成员的这段VBA代码非常适合填充形状 - 如果可以重新设计包含任何文本和形状轮廓和线条,那么它将是完美的.

Sub ChangeShapeColor()

    Dim oSh As Shape
    Dim oSl As Slide

    ' Look at each slide in the current presentation:
    For Each oSl In ActivePresentation.Slides

        ' Look at each shape on each slide:
        For Each oSh In oSl.Shapes

            ' IF the shape's .Fill.ForeColor.RGB = turqoise color:
            If oSh.Fill.ForeColor.RGB = RGB(0, 176, 240) Then

                ' Change it to corporate dark grey:
            oSh.Fill.ForeColor.RGB = RGB(71, 67, 65)

            End If

        Next …
Run Code Online (Sandbox Code Playgroud)

powerpoint vba powerpoint-vba powerpoint-2013

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

如何仅使用 Html 和 CSS 在滚动上创建固定/粘性标题?

这是我的 Html。我想使用 html 和 css 修复顶部的导航项,我尝试了很多方法,但无法修复它。没有 JavaScript 或 jQuery 如何构建它?

<div class="contain">
  <p>
    Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones 
    no quo, maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae 
    gloriatur ius te, id agam omnis evertitur eum. Affert laboramus repudiandae nec 
    et. Inciderint efficiantur his ad. Eum no molestiae voluptatibus.
  </p>
</div>
<nav>
  <div class="navWide">
    <div class="wideDiv">
      <a href="#">Link 1</a>
      <a href="#">Link 2</a>
      <a href="#">Link 3</a>
    </div>
  </div>
  <div class="navNarrow">
    <i class="fa …
Run Code Online (Sandbox Code Playgroud)

html css

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

尝试使用DAO从Access外部(Outlook/Excel)连接到有效的数据库会生成3343无法识别的数据库格式错误

谢谢你的网站.精彩的信息.

简而言之,我试图从Outlook(2007)执行以下代码,尽管它在Excel中也失败了.工作很棒INSIDE Access!

Sub Test

    Dim db As DAO.Database
    Dim rs As DAO.Recordset

    Const dbPath As String = "C:\Users\e574651.GLOBAL\Documents\Northwind 2007.accdb"
    On Error Resume Next
    Set db = DAO.OpenDatabase(dbPath)
    'Set rs = db.OpenRecordset("customers")

    Debug.Print Err.Number, Err.Description

End Sub
Run Code Online (Sandbox Code Playgroud)

3343无法识别的数据库格式'C:\ Users\e574651.GLOBAL\Documents\Northwind 2007.accdb'.

我可以使用ADO整天访问(没有双关语)这个数据库,我怀疑问题在于以下ADO语句:

ADOConn.Provider ="Microsoft.ACE.OLEDB.12.0"

如何使用DAO提供此功能?

我在VBA首选项中包含了对DAO 3.6库的引用.我已经包含了其他Microsoft 12.0库引用,所以我要么破坏了某些东西,要么省略了一些东西.

任何帮助将不胜感激.

谢谢!

vba dao

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