Страницы: 1
RSS
Добавить объект для активной книги excel
 
Добрый день! Подскажите, пожалуйста, как мне добавить объект для активной книги и для активного листа excel? Имеется следующий код:
Код
Dim SurferApp As Object

'установка соответствия между переменной SurferApp и программой Surfer:

Set SurferApp = CreateObject("Surfer.Application")
SurferApp.Visible = True

Dim Plot As Object
Set Plot = SurferApp.Documents.Add(1)

Dim Shapes As Object
Set Shapes = Plot.Shapes

Dim MapFrame As Object
Set MapFrame = Shapes.AddClassedPostMap(DataFileName:="X:\EOL_report_R\test.xlsx")

Dim ClassedPostLayer As Object
Set ClassedPostLayer = MapFrame.Overlays(1)
...

Через vba я устанавливаю соответствие с другой программой (Golden Software Surfer), строю там объект(карту - ClassedPostMap) по книге excel (по 3 колонкам) и затем копирую ее обратно в excel. Мне необходимо в строке Set MapFrame = Shapes.AddClassedPostMap(DataFileName:="X:\EOL_report_R\test.xlsx") обратиться к книге excel  не по конкретному пути как у меня и написано в коде, а к активной книге и к активному листу. Возможно ли это сделать в данном случае? Просто необходимо прогнать построение карт для нескольких листов для многих книг по циклу, поэтому обращаться к книге по конкретному пути было бы неудобно.
 
Цитата
dimon007 написал:
как мне добавить объект для активной книги и для активного листа excel?
а зачем добавлять?
эти обьекты уже есть в обьектной модели Excel и называются ActiveWorkbook и ActiveSheet, соответственно
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко,, да, я знаю. Вопрос в том, как в данной ситуации это сделать? Как правильно прописать строчку, на которую я указал? Я пробовал, но выдавалась ошибка "Object doesn't support this property or metod.
 
Ігор Гончаренко, Пробовал следующим образом:
Код
Dim MapFrame As Object

Dim DataFile As Workbook
Set DataFile = ActiveWorkbook

Set MapFrame = Shapes.AddClassedPostMap(DataFile)


Появляется ошибка "Type mismatch"
В чем может быть проблема?
 
проделайте действия руками с включеным макрорекордером
потом посмотрите полученный макрос, может там что-то подскажет что Вам нужно писать в макрос и как
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко, к сожалению, макрорекордером не получится, так как я обращаюсь к другой программе. Он не видит эти действия.
 
Что мешает записать в переменную путь к активной книге и скормить ее MapFrame?
 
Dima S,да, это можно сделать, но проблема в том, что мне нужно прогнать этот код для нескольких листов в книге, а программа Golden Software Surfer может обращаться только к первому листу книги. Поэтому если бы я подал для DataFileТName текущую книгу и текущий лист excel, то проблема бы решилась.
Изменено: dimon007 - 31.08.2019 17:00:17
 
Цитата
dimon007 написал:
Shapes.AddClassedPostMap(DataFileName:="X:\EOL_report_R\test.xlsx")
Вот здесь вы передаете строку с адресом файла.
А потом пытаетесь передать объект Книга.
Получите полный путь к активной книге и пробуйте передать его:
Код
DataFile = ActiveWorkbook.FullName
Set MapFrame = Shapes.AddClassedPostMap(DataFile)
Изменено: Sceptic - 31.08.2019 17:53:19
 
Sceptic, спасибо большое! Помогло! не хватало в коде FullName. Все работает. Спасибо!
 
Sceptic, а можно как то при этом так же обратиться только к activeWorksheet? Пробовал вот так, но выдает ошибку "Object doesn't support this property or method".
Код
DataFile = ActiveWorkbook.Worksheets(2)
Set MapFrame = Plot.Shapes.AddClassedPostMap(DataFile)
Изменено: dimon007 - 31.08.2019 18:58:43
 
Вопрос не столько про Excel, сколько про этот Surfer. Я с ним никогда не работал. Попробуйте вот так:
Код
DataFile = ActiveWorkbook.FullName
DataSheet = "sheet=" & ActiveSheet.Name

Set MapFrame = Plot.Shapes.AddClassedPostMap2(DataFileName:=DataFile, DataFileOptions:=DataSheet )
 
Sceptic,спасибо Вам огромное! Все работает, помогло.
Страницы: 1
Наверх