#excel #vba #ms-word #excel-charts
#превосходить #vba #ms-word #excel-диаграммы
Вопрос:
Я создаю диаграмму в Word с помощью макроса. Чего я хотел бы добиться, так это скопировать наборы записей во встроенный лист Excel этой диаграммы. После извлечения набора записей я вызываю вспомогательный элемент MakeChart. Когда копируется второй набор записей, я хотел проверить, занята ли первая ячейка, и в случае, если это так, перейдите к следующей, и только когда будет найдена первая ближайшая пустая ячейка, скопируйте набор записей. Я использовал приведенный ниже код:
Private Sub MakeChart() Dim actDocument As Document Dim shp As Word.InlineShape Dim chrt As Word.Chart Dim wb As Excel.Workbook, sourcesheet As Excel.Worksheet Set actDocument = ActiveDocument Set shp = actDocument.InlineShapes.AddChart2(Type:=xlXYScatterLinesNoMarkers) Set chrt = shp.Chart chrt.ChartData.Activate Set wb = chrt.ChartData.Workbook Set sourcesheet = wb.ActiveSheet sourcesheet.Activate sourcesheet.Range("A1").Select While ActiveCell.value lt;gt; "" ActiveCell.Offset(0, 1).Activate Wend ActiveCell.CopyFromRecordset rst rst.Close End Sub
Я получаю ошибку времени выполнения 91: Переменная объекта или с переменной блока, не заданной в строке с
While ActiveCell.value lt;gt; ""
Я подозреваю, что Word не поддерживает множество выражений, которые я нашел для решения проблем, связанных с диаграммами, так как большинство из них использовались в Excel. Есть ли другой способ, которым я должен ссылаться или активировать текущую ячейку, или подойти к проблеме? Цель в качестве вывода состоит в том, чтобы найти ближайшую пустую ячейку справа, в которую можно скопировать набор записей.
Комментарии:
1.
Dim lastCell As Range
,Set lastCell = sourcesheet.Cells(1, sourceSheet.Columns.Count).End(xlToLeft)
,lastCell.CopyFromRecordset ...
— мое предположение.2. @BigBen — это должно быть
Dim lastCell as Excel.Range
3. @TimothyRylatt — да, хороший улов, по-моему, я так и думал, но мои пальцы, конечно, не напечатали это.
4. Спасибо за совет! Я пытаюсь настроить код так, чтобы он не создавал новую диаграмму, а загружал набор записей в существующую диаграмму в виде новой строки. Я попытался ограничить функцию MakeChart до точки добавления графика, а затем определить новую функцию для добавления в нее данных, которую я могу вызывать столько раз, сколько у меня есть новый набор записей. В этом коде у меня те же строки, начинающиеся с ‘set chrt = shp. Диаграмма» , но сначала я хотел выбрать/активировать диаграмму с помощью » Set shp = ActiveDocument. Линейные формы(1). Выберите». Я получаю ожидаемую ошибку функции или переменной на . Выберите деталь. Есть какие-нибудь советы по этому поводу?
5. Что ж, мне удалось быстро обойти это. У меня проблема с предложенным вами кодом в том, что он перезаписывает последний заполненный столбец на листе первым столбцом нового набора записей.