1 (изменено: Constantin77, 2023-02-16 18:31:53)

Тема: VBS: добавить SparkLine на лист Excel

Здравствуйте!
Прошу подсказать, как можно добавить скриптом VBS (именно VBS - не VBA) "спарклайны" на лист Excel.

Попробовал так:

spXL.Worksheets(1).Range(spXL.Worksheets(1).Cells(1,2),spXL.Worksheets(1).Cells(1,4)).SparklineGroups.Add Type:=xlSparkLine, SourceData:=spXL.Worksheets(1).Range(spXL.Worksheets(1).Cells(6,2), spXL.Worksheets(1).Cells(154,4))

Но так, к сожалению, не работает.

2

Re: VBS: добавить SparkLine на лист Excel

Что (как) именно "не работает"?
У вас  константа xlSparkLine в vbs-скрипте определена?

3 (изменено: Constantin77, 2023-02-17 16:49:49)

Re: VBS: добавить SparkLine на лист Excel

1. Синтаксическая ошибка.
2. Это константа Excel и VBS ee "не понимает"?

Поменял на

Type:=1

Снова "синтаксическая ошибка".

4

Re: VBS: добавить SparkLine на лист Excel

1. Да, константы Excel "по-умолчанию" недоступны в vbs.
2. В vbs все переменные имеют тип variant. Нельзя, как в vba, указать тип переменной при объявлении. Соответственно, не может быть никакого "as SparklineGroups".

5 (изменено: Constantin77, 2023-02-17 18:00:15)

Re: VBS: добавить SparkLine на лист Excel

Попробовал так:

set range1 = spXL.Worksheets(1).range (spXL.Worksheets(1).Cells(1,2),spXL.Worksheets(1).Cells(1,4))
set range2 = spXL.Worksheets(1).Range(spXL.Worksheets(1).Cells(6,2), spXL.Worksheets(1).Cells(154,4)) 
range1.SparklineGroups.Add 1, range2

Ошибка: Несоответствие типа: 'range1.SparklineGroups.Add'.

6

Re: VBS: добавить SparkLine на лист Excel

Constantin77, приветствую.

В общем, на основе кода из первого поста:

spXL.Worksheets(1).Range(spXL.Worksheets(1).Cells(1,2),spXL.Worksheets(1).Cells(1,4)).SparklineGroups.Add Type:=xlSparkLine,SourceData:=spXL.Worksheets(1).Range(spXL.Worksheets(1).Cells(6,2), spXL.Worksheets(1).Cells(154,4))

Вот, примерно так у меня получилось.
2 варианта: создание новой книги Excel или открытие существующей.

Const xlSparkLine = 1 ' VBS не знает о константах VBA

Set spXL = CreateObject("Excel.Application") ' создаём новый экземпляр Excel...

Set spWorkBook = spXL.Workbooks.Add                            ' ...1) в нём создаём новую книгу
'Set spWorkBook = spXL.Workbooks.Open("D:\Test_SparkLine.xlsx") ' ...2) или в нём открываем нужную книгу, требуется полный путь

Set spWorkSheet = spWorkBook.Worksheets(1)   ' ...в книге работаем с Лист1

With spWorkSheet

    ' Немного ещё разгрузим код от длинных строк:
	Set rDest   = .Range(.Cells(1,2), .Cells(1,4))
	Set rSource = .Range(.Cells(6,2), .Cells(154,4))

	rSource.FormulaR1C1Local = "=R[-1]C + 1" ' заполним хоть какими-то значениями (если книга новая)

	' VBS не знает об именованных параметрах методов VBA:
	rDest.SparklineGroups.Add xlSparkLine, rSource.Address ' в VBA: Type:=xlSparkLine, SourceData:=.Range(.Cells(6,2), .Cells(154,4)).Address

End With

' Открытый программой Excel будет невидимым, откроем его пользователю:
spXL.Visible = True

' Либо, если нужно закрыть Excel программой:
'spWorkBook.Save True ' закрыть книгу с сохранением
'spXL.Quit ' закрыть Excel
' Для полного выхода - не забываем все Set-переменные "уничтожать", т.к. Excel может остаться в памяти.
'Set spXL        = Nothing
'Set spWorkBook  = Nothing
'Set spWorkSheet = Nothing
'Set rDest   = Nothing
'Set rSource = Nothing

7

Re: VBS: добавить SparkLine на лист Excel

andypetr, спасибо большое!

8

Re: VBS: добавить SparkLine на лист Excel

Constantin77, на здоровье!