Экспорт диаграммы Excel в wmf или emf?

Я пытаюсь экспортировать диаграмму из Excel в формат wmf или emf.

Код работает, если вы экспортируете в GIF, но не с WMF в качестве filtername.

Это работает:

Chart.Export FileName:="current_sales.gif", FilterName:="GIF" 

Но

 Chart.Export FileName:="current_sales.wmf", FilterName:="WMF" 

не дает ошибку:

Ошибка времени выполнения «1004»: определенная пользователем или объектная ошибка

Powerpoint позволяет экспортировать в WMF. И я «успешно» экспортировал, скопировав график в Powerpoint и получив Powerpoint для экспорта изображения в WMF, но должен быть более простой способ – я надеюсь.

Интересно, может ли быть способ регистрации фильтра WMF для Excel, но я не уверен, как это сделать. Пожалуйста помоги! Благодарю.

Эта копия, метод сохранения работал для меня, я помещал ее в 3 раздела (декларации, сохраняет как функцию EMF, а также раздел выбора / копирования / вызова функций):

* Я нашел эту статью, подробно описывающую, как сохранить в EMF, а затем немного ее использовать для использования ActiveChart вместо произвольного выбора.

Прежде всего, пару объявлений:

 Option Explicit Private Declare Function OpenClipboard _ Lib "user32" ( _ ByVal hwnd As Long) _ As Long Private Declare Function CloseClipboard Lib "user32" () As Long Private Declare Function GetClipboardData _ Lib "user32" ( _ ByVal wFormat As Long) _ As Long Private Declare Function EmptyClipboard Lib "user32" () As Long '// CreateMetaFileA DeleteEnhMetaFile Private Declare Function CopyEnhMetaFileA _ Lib "gdi32" ( _ ByVal hENHSrc As Long, _ ByVal lpszFile As String) _ As Long Private Declare Function DeleteEnhMetaFile _ Lib "gdi32" ( _ ByVal hemf As Long) _ As Long 

Это фактическое сохранение как функция emf (использование CopyEnhMetaFileA и DeleteEnhMetaFile объясняется в статье):

 Public Function fnSaveAsEMF(strFileName As String) As Boolean Const CF_ENHMETAFILE As Long = 14 Dim ReturnValue As Long OpenClipboard 0 ReturnValue = CopyEnhMetaFileA(GetClipboardData(CF_ENHMETAFILE), strFileName) EmptyClipboard CloseClipboard '// Release resources to it eg You can now delete it if required '// or write over it. This is a MUST DeleteEnhMetaFile ReturnValue fnSaveAsEMF = (ReturnValue <> 0) End Function 

Затем выберите раздел выбора, копирования и вызова функций:

 Sub SaveIt() Charts.Add ActiveChart.ChartArea.Select Selection.Copy If fnSaveAsEMF("C:\Excel001.emf") Then MsgBox "Saved", vbInformation Else MsgBox "NOT Saved!", vbCritical End If End Sub 

Энди подробно ответил на это здесь .

Через эту запись в форуме вы можете найти чудесную страницу Excel Стивена Буллена и загрузить утилиту PastePicture, которая показывает, как вы можете экспортировать в формат WMF.

Он в основном копирует диаграмму, вставляет ее в буфер обмена как изображение и сохраняет его содержимое в файл WMF в нескольких строках кода.

Забавно, этот плакат имел ту же самую проблему на этом форуме здесь, попал в эту интересную статью в ExcelForum по этому поводу .

Надеюсь, это вам поможет, с наилучшими пожеланиями, Том.

Давайте будем гением компьютера.