VBA Autocad 2016 как заполнить подшивку данными из Excel?
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > VBA Autocad 2016 как заполнить подшивку данными из Excel?

VBA Autocad 2016 как заполнить подшивку данными из Excel?

Ответ
Поиск в этой теме
Непрочитано 20.11.2016, 22:15 #1
VBA Autocad 2016 как заполнить подшивку данными из Excel?
KomProekt
 
Регистрация: 12.08.2016
Сообщений: 59

Здравствуйте!

Есть задача: из таблицы Excel нужно взять данные и внести их в подшивку Акадовскую (желательно создать новую подшивку с заданными свойствами, заполненными из Excel). Какими методами это можно сделать? Или удобней использовать не VBA, а что то другое для этой задачи (например .Net) ?

Спасибо!
Просмотров: 16134
 
Непрочитано 20.11.2016, 22:58
#2
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,170


Для начала:
- посмотреть здесь, здесь и кучу тем о программной связке Акада и Экселя (поиск в помощь);
- определиться, откуда надо запускать команду - из Акада или из Экселя. Второе гораздо сложнее.
kp+ вне форума  
 
Автор темы   Непрочитано 21.11.2016, 00:04
#3
KomProekt


 
Регистрация: 12.08.2016
Сообщений: 59


Можно и не создавать новую подшивку, а добавить значения в открытую подшивку из таблицы эксель. Подскажите, в Object Model (ActiveX) есть такие методы?
KomProekt вне форума  
 
Непрочитано 21.11.2016, 01:39
#4
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,170


Цитата:
Сообщение от KomProekt Посмотреть сообщение
Можно и не создавать новую подшивку, а добавить значения в открытую подшивку из таблицы эксель.
Т.е. команда на заполнение подшивки все-таки будет подаваться из Акада? Так?

Цитата:
Сообщение от KomProekt Посмотреть сообщение
Подскажите, в Object Model (ActiveX) есть такие методы?
Готового метода вроде IzExcelVPodshiffku, к несчастью, нет (хотя для Автодеск было бы нетрудно его написать, ведь связь таблиц Акада с Эксель написали). Придется применять отдельные методы для чтения из Экселя и отдельные - для открытия подшивки и записи данных в нее. Вы темы по приведенным в #2 ссылкам хотя бы открывали? Там все это обсуждалось

Последний раз редактировалось kp+, 21.11.2016 в 01:45.
kp+ вне форума  
 
Непрочитано 21.11.2016, 02:10
#5
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Цитата:
Сообщение от KomProekt Посмотреть сообщение
Подскажите, в Object Model (ActiveX) есть такие методы?
Есть и методы создания, и модификации.

Цитата:
Сообщение от kp+ Посмотреть сообщение
связь таблиц Акада с Эксель написали
связь написали, а возможность манипулировать связями из VBA, судя по недавним постам, реализовать забыли)
Сергей812 вне форума  
 
Непрочитано 21.11.2016, 06:49
#6
trir


 
Регистрация: 18.12.2010
Сообщений: 5,107


Есть два варианта
1. Через COM - VBA или .NET
2. Прямая работа с dst-файлами
я использую оба метода

пример
Код:
[Выделить все]
="(command ""SetProjValue"" """ & RC[-2] & """ ""name"" ""<новое значение>"")"
Код:
[Выделить все]
    Public Function GetSSDB(editor As acEdInp.Editor) As AcSmDatabase
        Dim pStrOpts As acEdInp.PromptStringOptions = New acEdInp.PromptStringOptions(vbLf & "Путь к подшивке: ")
        pStrOpts.AllowSpaces = True
        Dim PrRes As acEdInp.PromptResult = editor.GetString(pStrOpts)
        If PrRes.Status = acEdInp.PromptStatus.OK Then
            Dim Path As String = PrRes.StringResult
            Try
                If sheetSetManager Is Nothing Then sheetSetManager = New AcSmSheetSetMgr
                Return sheetSetManager.OpenDatabase(Path, False)
            Catch ex As System.Exception
                editor.WriteMessage("error: " & ex.ToString)
                Return Nothing
            End Try
        Else
            Return Nothing
        End If
    End Function

    <CommandMethod("SetCustomProperty")> _
    Public Sub SetCustomProperty()
        Dim editor As Autodesk.AutoCAD.EditorInput.Editor = acApp.Application.DocumentManager.MdiActiveDocument.Editor()
        Dim sheetSetDatabase As AcSmDatabase = GetSSDB(editor)
        If sheetSetDatabase IsNot Nothing Then
            Dim pStrOpts As acEdInp.PromptStringOptions = New acEdInp.PromptStringOptions(vbLf & "Имя свойства: ")
            pStrOpts.AllowSpaces = True
            Dim PrRes As acEdInp.PromptResult = editor.GetString(pStrOpts)
            If PrRes.Status = acEdInp.PromptStatus.OK Then
                Dim PropertyName As String = PrRes.StringResult
                pStrOpts.Message = "Новое значение: "
                PrRes = editor.GetString(pStrOpts)
                If PrRes.Status = acEdInp.PromptStatus.OK Then
                    Dim nValue As String = PrRes.StringResult
                    Try
                        If sheetSetDatabase.GetLockStatus = AcSmLockStatus.AcSmLockStatus_UnLocked Then
                            SetCP(sheetSetDatabase, PropertyName, nValue)
                        Else
                            editor.WriteMessage(sheetSetDatabase.GetFileName & " is Lock")
                        End If
                    Catch ex As System.Exception
                        editor.WriteMessage("error: " & ex.ToString)
                    End Try
                End If
            End If
        End If
    End Sub

    <CommandMethod("SetProjValue", CommandFlags.Interruptible)> _
    Public Sub SetProjValue()
        Dim editor As Autodesk.AutoCAD.EditorInput.Editor = acApp.Application.DocumentManager.MdiActiveDocument.Editor()
        'Path As String, PropertyName As String, nValue As String
        Dim sheetSetDatabase As AcSmDatabase = GetSSDB(editor)
        If sheetSetDatabase IsNot Nothing Then
            Dim pStrOpts As acEdInp.PromptStringOptions = New acEdInp.PromptStringOptions(vbLf & "Имя свойства (Number/nAme/Phase/Milestone): ")
            pStrOpts.AllowSpaces = True
            Dim PrRes As acEdInp.PromptResult = editor.GetString(pStrOpts)
            If PrRes.Status = acEdInp.PromptStatus.OK Then
                Dim PropertyName As String = PrRes.StringResult
                pStrOpts.Message = "Новое значение: "
                PrRes = editor.GetString(pStrOpts)
                If PrRes.Status = acEdInp.PromptStatus.OK Then
                    Dim nValue As String = PrRes.StringResult
                    Try
                        If sheetSetDatabase.GetLockStatus = AcSmLockStatus.AcSmLockStatus_UnLocked Then
                            SetProjP(sheetSetDatabase, PropertyName, nValue)
                        Else
                            editor.WriteMessage(sheetSetDatabase.GetFileName & " is Lock")
                        End If
                        sheetSetManager.Close(sheetSetDatabase)
                    Catch ex As System.Exception
                        editor.WriteMessage("error: " & ex.ToString)
                    End Try
                End If
            End If
        End If
    End Sub

Последний раз редактировалось trir, 21.11.2016 в 08:20.
trir вне форума  
 
Автор темы   Непрочитано 21.11.2016, 11:45
#7
KomProekt


 
Регистрация: 12.08.2016
Сообщений: 59


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Есть и методы создания, и модификации.
Какие это методы?

У меня задача совсем простая. Есть файл эксел, в нем номер проекта и еще несколько параметров. Нужно эти данные по одному нажатию внести в свойства подшивки (новой или уже открытой, как проще).
Команда подается из экселя, что бы потом кнопочку в быстром запуске сделать.

По какой ветке в Object Model (ActiveX) двигаться?
KomProekt вне форума  
 
Непрочитано 21.11.2016, 11:54
1 | #8
trir


 
Регистрация: 18.12.2010
Сообщений: 5,107


Код:
[Выделить все]
    Public Sub SetCP(sheetSetDatabase As AcSmDatabase, PropertyName As String, nValue As String)
        Dim SmEnumProperty As AcSmCustomPropertyBag
        Dim CPV As New AcSmCustomPropertyValue
        SmEnumProperty = sheetSetDatabase.GetSheetSet.GetCustomPropertyBag
        If sheetSetDatabase.GetLockStatus = AcSmLockStatus.AcSmLockStatus_UnLocked Then
            sheetSetDatabase.LockDb(sheetSetDatabase) 'start
            CPV = SmEnumProperty.GetProperty(PropertyName)
            CPV.SetValue(nValue)
            SmEnumProperty.SetProperty(PropertyName, CPV)
            sheetSetDatabase.UnlockDb(sheetSetDatabase) 'end
        End If
    End Sub

    Public Sub SetProjP(sheetSetDatabase As AcSmDatabase, PropertyName As String, nValue As String)
        Dim ss2 As IAcSmSheetSet2
        ss2 = sheetSetDatabase.GetSheetSet
        If sheetSetDatabase.GetLockStatus = AcSmLockStatus.AcSmLockStatus_UnLocked Then
            sheetSetDatabase.LockDb(sheetSetDatabase)
            Select Case PropertyName.ToLower
                Case "n", "number"
                    ss2.SetProjectNumber(nValue)
                Case "a", "name"
                    ss2.SetProjectName(nValue)
                Case "p", "phase"
                    ss2.SetProjectPhase(nValue)
                Case "m", "milestone"
                    ss2.SetProjectMilestone(nValue)
            End Select
            sheetSetDatabase.UnlockDb(sheetSetDatabase)
        End If
    End Sub
Цитата:
По какой ветке в Object Model (ActiveX) двигаться?
ACSMCOMPONENTS20Lib
trir вне форума  
 
Автор темы   Непрочитано 21.11.2016, 16:37
#9
KomProekt


 
Регистрация: 12.08.2016
Сообщений: 59


Почему у меня этот код вообще не видит редактор? Никак на него не реагирует при запуске...
KomProekt вне форума  
 
Непрочитано 21.11.2016, 16:58
#10
trir


 
Регистрация: 18.12.2010
Сообщений: 5,107


какой редактор?
trir вне форума  
 
Автор темы   Непрочитано 21.11.2016, 17:05
#11
KomProekt


 
Регистрация: 12.08.2016
Сообщений: 59


Редактор VBA. Ни через эксель, ни через автокад не видит.
KomProekt вне форума  
 
Непрочитано 21.11.2016, 17:12
#12
trir


 
Регистрация: 18.12.2010
Сообщений: 5,107


Это VB.NET
trir вне форума  
 
Непрочитано 21.11.2016, 17:14
#13
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611


Тут еще такая же тема... http://forum.dwg.ru/showthread.php?t=41088
И тут еще интересный код http://forums.autodesk.com/t5/visual...n/td-p/1776019

Последний раз редактировалось Boxa, 21.11.2016 в 17:33.
Boxa на форуме  
 
Автор темы   Непрочитано 21.11.2016, 22:52
#14
KomProekt


 
Регистрация: 12.08.2016
Сообщений: 59


Цитата:
Сообщение от trir Посмотреть сообщение
Это VB.NET
Т.е. на VB.NET есть возможность, а на VBA сложнее, судя по разрозненному материалу и ноль законченных кодов?)
KomProekt вне форума  
 
Непрочитано 21.11.2016, 22:54
#15
trir


 
Регистрация: 18.12.2010
Сообщений: 5,107


На VBA то же самое, просто на VBA мне не интересно писать. Но этот код переводится на VBA на раз, но мне влом
Работа с COM на VBA и VB/NET мало отличается...
trir вне форума  
 
Непрочитано 21.11.2016, 23:16
#16
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Цитата:
Сообщение от KomProekt Посмотреть сообщение
VBA сложнее, судя по разрозненному материалу и ноль законченных кодов?)
На самом деле, в инете давно гуляет документ от разработчиков аутодеска, где как раз на VBA показаны все основные примеры работы с подшивкой - если хотели бы найти, должны были наткнуться.
Сергей812 вне форума  
 
Автор темы   Непрочитано 21.11.2016, 23:19
#17
KomProekt


 
Регистрация: 12.08.2016
Сообщений: 59


Цитата:
Сообщение от trir Посмотреть сообщение
На VBA то же самое, просто на VBA мне не интересно писать. Но этот код переводится на VBA на раз, но мне влом
Работа с COM на VBA и VB/NET мало отличается...
Ну как так? В начале написано, что вопрос по VBA, а Вы дразните VB.NET. Скажите хотя бы, какими методами из VBA пользоваться?

----- добавлено через ~6 мин. -----
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
На самом деле, в инете давно гуляет документ от разработчиков аутодеска, где как раз на VBA показаны все основные примеры работы с подшивкой - если хотели бы найти, должны были наткнуться.
Третий день в поисках, пока без успеха(

----- добавлено через ~43 мин. -----
Цитата:
Сообщение от trir Посмотреть сообщение
Работа с COM на VBA
Что нужно для этой работы? доп установки или Редактора VBA достаточно?

----- добавлено через ~1 ч. -----
Нашел вот такой код:

Код:
[Выделить все]
'' ОТКРЫТЬ ПОДШИВКУ
Public Sub OpenSheetSet()
'' Create a Reference to the Sheet Set Manager Object
Dim oSheetSetMgr As AcSmSheetSetMgr
Set oSheetSetMgr = New AcSmSheetSetMgr
'' Open a Sheet Set file
Dim oSheetDb As AcSmDatabase
Set oSheetDb = oSheetSetMgr.OpenDatabase("d:\Подшивка.dst", False)
 
'' Lock the Database
LockDatabase oSheetDb
 
'' СОЗДАТЬ СВОЙСТВА ПОДШИВКИ
SetCustomProperty oSheetDb, "Свойство подшивки 1", TextBox1
SetCustomProperty oSheetDb, "Свойство подшивки 2", TextBox2
'' СОЗДАТЬ СВОЙСТВА ЛИСТА
SetCustomProperty oSheetDb, "Свойство листа1", TextBox3, False
SetCustomProperty oSheetDb, "Свойство листа2", TextBox4, False
 
'' Unlock the database
UnlockDatabase oSheetDb
 
End Sub
 
'' Used to Lock the database (SheetSet)
Private Function LockDatabase(oSheetDb As AcSmDatabase) As Boolean
'' Check the status of the database
If oSheetDb.GetLockStatus = AcSmLockStatus_UnLocked Then
oSheetDb.LockDb oSheetDb
LockDatabase = True
Else
LockDatabase = False
End If
End Function
'' Used to Unlock the database (SheetSet)
Private Function UnlockDatabase(oSheetDb As AcSmDatabase) As Boolean
'' Check the status of the database
If oSheetDb.GetLockStatus = AcSmLockStatus_Locked_Local Then
oSheetDb.UnlockDb oSheetDb
UnlockDatabase = True
Else
UnlockDatabase = False
End If
End Function
 
'' Set/Create a Sheet Set Property
Private Sub SetCustomProperty(oSheetDb As AcSmDatabase, _
strName As String, _
strValue As String, _
Optional bSheetSetFlag As Boolean = True)
'' Create a Reference to the Custom Property Bag
Dim cBag As AcSmCustomPropertyBag
Set cBag = oSheetDb.GetSheetSet().GetCustomPropertyBag
'' Create a Reference to a Custom Property Value
Dim cBagVal As New AcSmCustomPropertyValue
cBagVal.InitNew oSheetDb.GetSheetSet() '' cBag
'' Set the Flag for Sheet Set or Sheet Property
If bSheetSetFlag = True Then
cBagVal.SetFlags CUSTOM_SHEETSET_PROP
Else
cBagVal.SetFlags CUSTOM_SHEET_PROP
End If
'' Set the value for the Bag
cBagVal.SetValue strValue
'' Create the property
cBag.SetProperty strName, cBagVal
'' Cleat variable
Set cBagVal = Nothing
End Sub
Но почему подшивка даже не открывается (естественно указал путь к сущ. подшивке)?
KomProekt вне форума  
 
Непрочитано 22.11.2016, 04:50
#18
trir


 
Регистрация: 18.12.2010
Сообщений: 5,107


Доступ к подшивке через COM будет работать только из AutoCAD'а
trir вне форума  
 
Автор темы   Непрочитано 22.11.2016, 10:35
#19
KomProekt


 
Регистрация: 12.08.2016
Сообщений: 59


Цитата:
Сообщение от trir Посмотреть сообщение
Доступ к подшивке через COM будет работать только из AutoCAD'а
В том то и дело, она даже из атокада не открывается.
KomProekt вне форума  
 
Непрочитано 22.11.2016, 10:43
#20
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Что значит, не открывается?
Код:
[Выделить все]
Set oSheetDb = oSheetSetMgr.OpenDatabase("d:\Подшивка.dst", False)
что в переменной oSheetDb после прохода этой строчки при пошаговой отладке?
Сергей812 вне форума  
 
Автор темы   Непрочитано 24.11.2016, 00:53
#21
KomProekt


 
Регистрация: 12.08.2016
Сообщений: 59


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Что значит, не открывается?
Код:
[Выделить все]
Set oSheetDb = oSheetSetMgr.OpenDatabase("d:\Подшивка.dst", False)
что в переменной oSheetDb после прохода этой строчки при пошаговой отладке?
Выдает ошибку: Type mismatch (Error 13)
Что бы это могло значить?
KomProekt вне форума  
 
Непрочитано 24.11.2016, 01:10
#22
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


несоответствие данных, проверяйте - имя файла скорее всего
Сергей812 вне форума  
 
Непрочитано 24.11.2016, 09:57
#23
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,170


Цитата:
Сообщение от KomProekt Посмотреть сообщение
Третий день в поисках, пока без успеха
Выложен в теме по второй ссылке, которая приведена в #2
kp+ вне форума  
 
Непрочитано 24.11.2016, 11:21
#24
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


там информация к размышлению, а ТС ищет готовое решение
Цитата:
Сообщение от KomProekt Посмотреть сообщение
а на VBA сложнее, судя по разрозненному материалу и ноль законченных кодов?)
Сергей812 вне форума  
 
Непрочитано 24.11.2016, 11:45
#25
trir


 
Регистрация: 18.12.2010
Сообщений: 5,107


в очередной раз убедился, что сесть и сделать самому - гораздо быстрее чем искать готовое
trir вне форума  
 
Автор темы   Непрочитано 26.11.2016, 00:57
#26
KomProekt


 
Регистрация: 12.08.2016
Сообщений: 59


Цитата:
Сообщение от trir Посмотреть сообщение
в очередной раз убедился, что сесть и сделать самому - гораздо быстрее чем искать готовое
Это точно! Но когда не можешь сам, нужно спросить у других: Как?
KomProekt вне форума  
 
Непрочитано 26.11.2016, 01:11
#27
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


и в чем на этот раз затруднение?)
Сергей812 вне форума  
 
Автор темы   Непрочитано 26.11.2016, 16:09
#28
KomProekt


 
Регистрация: 12.08.2016
Сообщений: 59


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
и в чем на этот раз затруднение?)
Простенький код из основ:

Код:
[Выделить все]
Public Sub OpenSheetSet()
'' Create a Reference to the Sheet Set Manager Object   Dim oSheetSetMgr As AcSmSheetSetMgr
 Set oSheetSetMgr = New AcSmSheetSetMgr
 
 ' Open a Sheet Set file
  Dim oSheetDb As AcSmDatabase
  Set oSheetDb = oSheetSetMgr.OpenDatabase("h:\1.dst", False)
 
End Sub
Выдаёт ошибку:

Object required (Error 424)

Все проверил, файл на месте, название верное, в чем дело?
KomProekt вне форума  
 
Непрочитано 26.11.2016, 16:19
#29
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


и на какой строчке возникает ошибка? Контроль объявления переменных включен в VBA? Пошагово проходите и смотрите переменные - чем они инициализируются и инициализируются ли вообще

----- добавлено через ~3 мин. -----
и на самом файле подшивки не висит в свойствах - "файл скачен с другого компьютера..." и вообще как с правами доступа на него
Сергей812 вне форума  
 
Непрочитано 26.11.2016, 16:23
#30
trir


 
Регистрация: 18.12.2010
Сообщений: 5,107


в reference добави AcSmComponents Type Library?
что в oSheetSetMgr?
trir вне форума  
 
Автор темы   Непрочитано 26.11.2016, 23:07
#31
KomProekt


 
Регистрация: 12.08.2016
Сообщений: 59


Цитата:
Сообщение от trir Посмотреть сообщение
в reference добави AcSmComponents Type Library?
что в oSheetSetMgr?
AcSmComponents19 1.0 Type Library - добавлена
Print screen в приложении.

права не ограничены, подшивка создана мною, контроль переменных выключен...
Что то тут не так!
Миниатюры
Нажмите на изображение для увеличения
Название: Безымянный.png
Просмотров: 59
Размер:	23.8 Кб
ID:	179815  
KomProekt вне форума  
 
Непрочитано 26.11.2016, 23:14
#32
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


VBA в акаде - это одно большое не так, как ушел в 2013 с него в Net|Interrop - и забыл о его глюках, особенно в 64 битных версиях)

Попробуйте объявить
Код:
[Выделить все]
Dim oSheetDb As Variant
и посмотрите, что будет в переменной и вылетит ли ошибка
Сергей812 вне форума  
 
Непрочитано 26.11.2016, 23:16
#33
trir


 
Регистрация: 18.12.2010
Сообщений: 5,107


Цитата:
You can view the Sheet Set Manager objects in the AutoCAD VBA integrated development environment (VBA IDE) and in Microsoft Visual Studio. To view the objects using the Object Browser in the VBA IDE, add a reference to the AcSmComponents20 1.0 Type Library. The file, AcSmComponents20.tlb, is in the following folder: C:\Program Files\Common Files\Autodesk Shared.
http://help.autodesk.com/view/ACD/20...4-8C909B989F24

Внимательно! читайте документацию
trir вне форума  
 
Автор темы   Непрочитано 26.11.2016, 23:45
#34
KomProekt


 
Регистрация: 12.08.2016
Сообщений: 59


Цитата:
Сообщение от trir Посмотреть сообщение
http://help.autodesk.com/view/ACD/20...4-8C909B989F24

Внимательно! читайте документацию
Запустил на другом компе с 20 библиотекой, результат тот , та же ошибка Object required (Error 424) на том же месте

----- добавлено через ~4 мин. -----
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
VBA в акаде - это одно большое не так, как ушел в 2013 с него в Net|Interrop - и забыл о его глюках, особенно в 64 битных версиях)

Попробуйте объявить
Код:
[Выделить все]
Dim oSheetDb As Variant
и посмотрите, что будет в переменной и вылетит ли ошибка
выдал ошибку дубликата объявления переменной
KomProekt вне форума  
 
Непрочитано 27.11.2016, 00:02
#35
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Цитата:
Сообщение от KomProekt Посмотреть сообщение
выдал ошибку дубликата объявления переменной
старое определение переменной закомментируйте
Сергей812 вне форума  
 
Автор темы   Непрочитано 27.11.2016, 00:09
#36
KomProekt


 
Регистрация: 12.08.2016
Сообщений: 59


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
старое определение переменной закомментируйте
Всмысле? Это сарказм?
KomProekt вне форума  
 
Непрочитано 27.11.2016, 00:20
#37
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


если дубликат переменной - значит оставили старое определение и добавили строчку с тем же именем переменной, но тип Variant. Какие еще могут быть варианты?
Сергей812 вне форума  
 
Автор темы   Непрочитано 27.11.2016, 16:59
#38
KomProekt


 
Регистрация: 12.08.2016
Сообщений: 59


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
если дубликат переменной - значит оставили старое определение и добавили строчку с тем же именем переменной, но тип Variant. Какие еще могут быть варианты?
убрал старое определение, Variant оставил, один хрен та же ошибка 424.
KomProekt вне форума  
 
Непрочитано 27.11.2016, 17:08
#39
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


на какой строчке вылетает то-создание ссылки на менеджер подшивок или при попытке открыть саму подшивку? Что в переменных? Умеете смотреть значения переменных в редакторе VBA?
Сергей812 вне форума  
 
Автор темы   Непрочитано 28.11.2016, 00:31
#40
KomProekt


 
Регистрация: 12.08.2016
Сообщений: 59


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
на какой строчке вылетает то-создание ссылки на менеджер подшивок или при попытке открыть саму подшивку? Что в переменных? Умеете смотреть значения переменных в редакторе VBA?
все так же, вылетает на последней строке, скрин в #31.
KomProekt вне форума  
 
Непрочитано 28.11.2016, 01:10
#41
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Посмотрел на скриншот чуть внимательнее:
1. Кто вас учил определение переменной в комментариях размещать?
2. Смотрим в окно локальных переменных: oSheetSetMgr - тип Variant/Неподдерживаемый тип объекта. Почему так произошло - догадываетесь?
3. Включите, наконец, контроль объявления переменных в коде.
Сергей812 вне форума  
 
Автор темы   Непрочитано 28.11.2016, 22:06
#42
KomProekt


 
Регистрация: 12.08.2016
Сообщений: 59


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
3. Включите, наконец, контроль объявления переменных в коде.
вернул в код.

Стало лучше, ошибка не вылетает, но ничего не происходит и подшивка по прежнему не открывается(
Миниатюры
Нажмите на изображение для увеличения
Название: Безымянный2.jpg
Просмотров: 63
Размер:	44.0 Кб
ID:	179909  
KomProekt вне форума  
 
Непрочитано 28.11.2016, 22:09
#43
trir


 
Регистрация: 18.12.2010
Сообщений: 5,107


утром этот код тестил - всё работало
trir вне форума  
 
Непрочитано 28.11.2016, 22:37
#44
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


И такой же код в спецификации работы с подшивкой от аутодеска. А что подразумеваете под открытием подшивки?
Сергей812 вне форума  
 
Автор темы   Непрочитано 28.11.2016, 23:11
#45
KomProekt


 
Регистрация: 12.08.2016
Сообщений: 59


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
А что подразумеваете под открытием подшивки?
Отображение в диспетчере подшивок. А как иначе?
KomProekt вне форума  
 
Непрочитано 28.11.2016, 23:24
#46
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


ну, наверно, для начала убедиться - что в переменной oSheetDb была получена ссылка на объект БД подшивки. Менеджер подшивок вообще может быть скрыт в акаде - и все, приехали?
Сергей812 вне форума  
 
Автор темы   Непрочитано 28.11.2016, 23:34
#47
KomProekt


 
Регистрация: 12.08.2016
Сообщений: 59


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Менеджер подшивок вообще может быть скрыт
менеджер открыт. Прикладываю скрин. Видно, что ссылка не получена.
Миниатюры
Нажмите на изображение для увеличения
Название: Безымянный2.jpg
Просмотров: 47
Размер:	61.8 Кб
ID:	179912  
KomProekt вне форума  
 
Непрочитано 29.11.2016, 00:00
#48
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


ссылка на менеджер подшивок получена, иначе при попытке обратиться к методу менеджера OpenDatabase сразу получили бы ошибку. А у вас на скриншоте и менеджер подшивок не определен.
Сергей812 вне форума  
 
Непрочитано 29.11.2016, 04:44
#49
trir


 
Регистрация: 18.12.2010
Сообщений: 5,107


Цитата:
Отображение в диспетчере подшивок. А как иначе?
facepalm, абсолютно нет

Цитата:
А у вас на скриншоте и менеджер подшивок не определен.
нет, определён, просто в библиотеке всё так реализовано - что в инспекторе нифига не видно
но можно использовать методы, например:
Цитата:
MsgBox oSheetDb.GetFileName()

Последний раз редактировалось trir, 29.11.2016 в 09:34.
trir вне форума  
 
Непрочитано 29.11.2016, 10:55
#50
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Цитата:
Сообщение от trir Посмотреть сообщение
просто в библиотеке всё так реализовано - что в инспекторе нифига не видно
печально, что в новой 7-ой версии VBA остались прежние глюки. Выкинули бы поддержку VBA напрочь, расширив функционал того же лиспа. ТС можно посоветовать перейти на Interrop под VB.NET - синтаксис VBA, возможности языка NET, возможность переписывания программы блоками кода под NET API по мере освоения.
Сергей812 вне форума  
 
Непрочитано 29.11.2016, 11:01
#51
trir


 
Регистрация: 18.12.2010
Сообщений: 5,107


на VB.NET та же картина, это особенность данной библиотеки - AcSmComponents20.tlb
trir вне форума  
 
Непрочитано 29.11.2016, 14:26
#52
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


я в целом - там хоть защитная обертка в Interrop есть, тогда как в чистом NET API при определенной "удаче" можно вообще сам акад уронить, как два пальца. С текущей задачей все понятно - как ТС не открывал ссылки пункта 2 со спецификацией работы с подшивкой (хотя позже kp+ напомнил про нее), так, похоже и не собирается. Хотя чего бояться экспериментировать в программировании - главное, резервные копии файлов делать и сохранять код перед запуском.
Сергей812 вне форума  
 
Автор темы   Непрочитано 01.12.2016, 22:25
#53
KomProekt


 
Регистрация: 12.08.2016
Сообщений: 59


Цитата:
Сообщение от trir Посмотреть сообщение
нет, определён, просто в библиотеке всё так реализовано - что в инспекторе нифига не видно
Правильно я понял, что по сути подшивка открыта, но не отображается в диспетчере подшивок??

----- добавлено через ~4 мин. -----
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
как ТС не открывал ссылки пункта 2 со спецификацией работы с подшивкой (хотя позже kp+ напомнил про нее), так, похоже и не собирается
Открывал, как же не открывал. Взял от туда файл с основами, от туда и начал. Сразу наткнулся на проблему, которую тут и обсуждаем. Самое простое: просто открыть существующую подшивку. И она вроде как открылась, но в диспетчере ее нет. Нах...на зачем она тогда открылась, если ее не видно и соответственно ничего в ней не поменять вручную!?!
KomProekt вне форума  
 
Непрочитано 01.12.2016, 22:40
#54
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


а зачем менять вручную? Влезли программно в БД подшивки, поменяли что надо и сохранили. Это не эмуляция ввода в комстроку, как в том же лиспе делается в ряде задач. Почитайте спецификацию, там есть как раз и создание новой подшивки.

----- добавлено через ~12 мин. -----
Да и не все так просто )
Сергей812 вне форума  
 
Автор темы   Непрочитано 02.12.2016, 00:00
#55
KomProekt


 
Регистрация: 12.08.2016
Сообщений: 59


Ну хорошо, если подшивка открыта, то почему поля в файле не обновляются при регенерации (если открывать подшивку вручную , то при регенерации поля обновляются) ?
KomProekt вне форума  
 
Непрочитано 02.12.2016, 00:14
#56
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Метод UpdateInMemoryDwgHints .
Сергей812 вне форума  
 
Непрочитано 02.12.2016, 07:14
#57
trir


 
Регистрация: 18.12.2010
Сообщений: 5,107


Цитата:
Правильно я понял, что по сути подшивка открыта, но не отображается в диспетчере подшивок??
да
trir вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > VBA Autocad 2016 как заполнить подшивку данными из Excel?



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Связка AutoCAD с Excel через командную строку. raffnec AutoCAD 9 19.09.2016 10:54
Заполнение размеров в Autocad из Excel zenija2007 AutoCAD 9 18.09.2015 12:53
Как добавить префикс к однострочному тексту в AutoCAD 2016 andrey_artphoto AutoCAD 5 27.05.2015 17:11
Привязка таблицы Excel к чертежу AutoCad Teo-one Программирование 5 22.03.2014 00:11
Таблица из Excel в AutoCAD Elbrus AutoCAD 56 11.06.2012 11:41