2013-12-11 73 views
0

我有一个宏,我在网上找到,并已用于允许我导出活动工作簿内的所有图表对象。当我拥有它自己的正常工作簿时,它似乎工作得很好。VB个人工作簿错误,其中宏运行时,我每次打开Excel

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

如何防止每次打开应用程序时运行此代码?它是一个优秀的设置或宏代码固有的错误?

我在我的个人工作簿中有其他的宏,看起来正常工作(只有在通过工具> 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 
+0

其中VBA项目(我的意思是哪个对象模块)放置了这个代码?你能找到来自Thi的Workbook_Open事件吗? sWorkbook'对象模块并向我们提供代码? – 2013-12-11 14:05:44

+0

该代码目前生活在Module 1中。我将如何找到这些事件来向您发送代码? – user3091348

+0

好吧我找到了“ThisWorkbook对象”,目前这个对象中没有代码,我可以看到 – user3091348

回答

0

我不会把这个宏放在“每次打开excel”的位置运行。这不是你的意图。相反,我会将这个宏保存在一个插件中,并在Office-Ribbon中添加一个简单的按钮。 这样,你的宏应该显示出来,但是在你点击按钮之前不要做任何事情。 构建宏的按钮并不复杂,它包含以下步骤: 1.将宏存储为插件(* .xlam)。你将重定向到%Appdata%中的一个文件夹,这就好了。 Excel在那里存储所有的插件。 1a:注意:不要扔掉你正常的xlsm文件 - 编辑插件很困难,所以我通常编辑宏并简单地保存。 1b:注意:确保在将宏保存为插件之前,从宏中删除不需要的工作表。如果你忘记了这一点,你的插件将会变得很大,并且会大大减慢启动速度。 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选项(这是一个有点四种不同的Excel版本,所以你必须自己查查吧

其它信息:有关功能区的XML 的一般信息可以在这里找到: http://gregmaxey.mvps.org/word_tip_pages/customize_ribbon_main.html

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

相关问题