VB个人工作簿错误,每次打开Excel时,宏都会运行

时间:2013-12-11 14:03:09

标签: excel vba excel-vba

我有一个宏,我在网上找到并一直用来允许我导出活动工作簿中的所有图表对象。当我将它放在自己的正常工作簿中时似乎工作得很好。

但是,我希望这是一个可以在任何给定工作簿上使用的通用函数,因此我将此代码放在我的个人excel工作簿中。执行此操作后,我注意到代码现在每次打开我的Excel应用程序时都会运行,而且我基本上会打开一堆空的“.png”文件。

如何在每次应用程序打开时阻止此代码运行?它是一个excel设置还是宏代码固有的错误?

我的个人工作簿中有其他宏似乎正常工作(仅在通过工具> VB>宏菜单选择时运行),所以我觉得代码出了问题。任何帮助将不胜感激。

'the main problematic function'
    Sub ExportAllPossibleCharts()
        Dim i As Integer, exportCount As Integer
        Dim fileNum As String, fileBase As String
        Dim sheetObj As Worksheet
        Dim chartObj As Chart


    fileBase = ActiveWorkbook.FullName
    fileBase = Replace(fileBase, ".xlsx", "")
    exportCount = 0

    'First, export all charts that are in their own sheets'

    For Each chartObj In ActiveWorkbook.Charts
        fileNum = NiceFileNumber(exportCount)
        exportCount = exportCount + 1

        'Do the export'
        chartObj.Export fileBase & "_chart" & fileNum & ".png"
    Next

    'Then, export all charts that are embedded inside normal sheets'
    For Each sheetObj In ActiveWorkbook.Worksheets
        For i = 1 To sheetObj.ChartObjects.Count
            fileNum = NiceFileNumber(exportCount)
            exportCount = exportCount + 1

            'Do the export'
            sheetObj.ChartObjects(i).Activate
            ActiveChart.Export fileBase & "_chart" & fileNum & ".png"
        Next i
    Next
End Sub


'small nicety to ensure two-digits for better file sorting'
Function NiceFileNumber(num As Integer) As String
    If num < 10 Then
        NiceFileNumber = "0" & num
    Else
        NiceFileNumber = num
    End If
End Function

1 个答案:

答案 0 :(得分:0)

我不会将此宏放在“每次打开Excel时运行”位置。那不是你想要的。相反,我会将此宏保存在插件中,并在Office-Ribbon中添加一个简单的按钮。 这样,您的宏应该显示,但在您单击按钮之前不要执行任何操作。 为宏构建Button并不复杂,它包含以下步骤: 1.将宏存储为插件(* .xlam)。您将重定向到%Appdata%中的文件夹,这没关系。 Excel存储所有插件。 1a:注意:不要丢弃正常的xlsm文件 - 编辑插件很困难,所以我通常编辑宏并再次保存。 1b:注意:确保在将其保存为插件之前从宏中删除不需要的工作表。如果你忘记了这一点,那么你的插件会变得很大,并且会大大减慢excel的启动速度。 2:关闭所有Excel实例并启动办公室的xml编辑器,如“Microsoft Office的自定义UI编辑器” 3:将Office 2007自定义ui部件插入到文件中 4:将以下xml插入文件:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
  <ribbon>
    <tabs>
      <tab id="Best" label="Best Tools">
        <group id="MyGroup" visible="true" label="GroupLabel"> 
          <button id="MyMacroID" imageMso="TableIndexes" size="large" 
            label="Export" 
            onAction="DoMacro" /> 
 </group>
      </tab>
    </tabs>
  </ribbon>
</customUI>

如果您的插件中有“Public Sub DoMacro(obj as variant)”,这将调用您的宏。 5.在excel-options中激活你的插件(这是一个不同的四个excel版本,所以你必须自己查找。

其他信息: 有关Ribbon-Xml的更多常规信息,请访问: http://gregmaxey.mvps.org/word_tip_pages/customize_ribbon_main.html

按钮的图像(xml中的imageMso =“TableIndexes”)可以自定义为大量按钮,从microsoft下载文件以查看哪些可用:http://www.microsoft.com/en-us/download/details.aspx?id=11675