В настоящее время я получаю ошибку ' Связанный файл недоступен ' при попытке вручную открыть наборы данных для встроенных диаграмм в Word после успешного обновления этих наборов данных с помощью сценария VBA. Я пытаюсь создать проект, который позволит пользователям автоматически обновлять серию встроенных диаграмм на основе пользовательского листа, который создается ежемесячно.
Для поддержки этого проекта я пытался найти способ, с помощью которого я могу обновлять данные диаграммы в Word, используя VBA, избегая при этом метода ChartData.Activate
( в конечном итоге приводит к сбою программы из-за бремени последовательных действий открытия / закрытия [context: у меня около 300 диаграмм в самый большой из этих отчетов] ).
Я попытался обновить данные с помощью прямого вызова ChartData.Workbook и ChartData.ActivateChartDataWindow , оба из которых позволяют мне успешно обновлять данные. Однако после успешного обновления я получаю следующую ошибку при попытке доступа к набору данных вручную и больше не могу получить к нему доступ через макрос:
Связанный файл недоступен
Я знаю, что, возможно, я упускаю что-то простое или, возможно, неправильно подхожу к этому, перебирая Word, но хотел выкинуть его туда, чтобы посмотреть, есть ли у кого-нибудь решение, которое может решить / объяснить, что вызывает потерю этих «ссылок» к встроенным наборам данных?
Снимок экрана с диаграммой (спереди)
Снимок экрана с диаграммой (данные)
Чтобы попытаться оптимизировать тестирование; Я создал урезанную версию общего кода, который я использовал для устранения неполадок:
Dim x As Integer 'Counter used to breakout of routine once 1 chart updated.
Dim strChartTitle As String
Dim objChart As InlineShape
Dim objTargetWorkbook As Workbook
Dim objTargetWorksheet As Worksheet
x = 0
For Each objChart In ActiveDocument.InlineShapes
strChartTitle = objChart.Chart.ChartTitle.Text
If x = 1 Then
Exit Sub
ElseIf strChartTitle Like "EHR Transactions Summary (By Endpoint)*" Then
'objChart.Chart.ChartData.Activate
objChart.Chart.ChartData.ActivateChartDataWindow
Set objTargetWorkbook = objChart.Chart.ChartData.Workbook
Set objTargetWorksheet = objTargetWorkbook.ActiveSheet
objTargetWorksheet.Range("C1:D11").Copy objTargetWorksheet.Range("B1")
objTargetWorksheet.Range("D1").Value = DateAdd("m", 1, objTargetWorksheet.Range("C1").Value)
x = 1
objTargetWorkbook.close
End If
Next objChart