2013-12-11 100 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

相關問題