Перевод команд ilogic на VBA

Автор Тема: Перевод команд ilogic на VBA  (Прочитано 7733 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Сергей SSSАвтор темы

  • ADN OPEN
  • Сообщений: 36
  • Карма: 0
Перевод команд ilogic на VBA
« : 24-04-2016, 19:11:53 »
Как перевести эту команду на язык макроса:
modelName = IO.Path.GetFileName(ThisDrawing.ModelDocument.FullFileName)
Как я понимаю- это определение файла базовой модели с полным путем из чертежа.
Set в начале не помогло:
Set modelName = IO.Path.GetFileName(ThisDrawing.ModelDocument.FullFileName)
Ошибка 424 Object required

Оффлайн Windcastle

  • ADN OPEN
  • **
  • Сообщений: 58
  • Карма: 0
Re: Перевод команд ilogic на VBA
« Ответ #1 : 24-04-2016, 19:39:47 »
Set в начале не помогло:
Set modelName = IO.Path.GetFileName(ThisDrawing.ModelDocument.FullFileName)
Ошибка 424 Object required

Добрый вечер, как мне помнится Set ставится только перед данными типа Object!!!
Если modelName не Object, то лучше его таковым сделать :)

Хотя это странно, что Вы пытаетесь получить имя файла через
IO.Path.GetFileName(ThisDrawing.ModelDocument.FullFileName)

Оффлайн Сергей SSSАвтор темы

  • ADN OPEN
  • Сообщений: 36
  • Карма: 0
Re: Перевод команд ilogic на VBA
« Ответ #2 : 24-04-2016, 19:47:59 »
Если modelName не Object, то лучше его таковым сделать :)

Dim modelName As Object
Set modelName = IO.Path.GetFileName(ThisDrawing.ModelDocument.FullFileName)
Это не помогает

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Перевод команд ilogic на VBA
« Ответ #3 : 24-04-2016, 19:48:53 »
Сергей SSS
А что в VBA есть IO.Path.GetFileName? Насколько я помню он есть только в VB.NET
А в VBA стандартной функции для этого нет. Вот вариант:
Код - Visual Basic [Выбрать]
  1. Function FileNameFromPath(strFullPath As String) As String
  2.  
  3.      FileNameFromPath = Right(strFullPath, Len(strFullPath) - InStrRev(strFullPath, "\"))
  4.  
  5. End Function
  6.  
  7. Function FileNameNoExtensionFromPath(strFullPath As String) As String
  8.  
  9.     Dim intStartLoc As Integer
  10.     Dim intEndLoc As Integer
  11.     Dim intLength As Integer
  12.  
  13.     intStartLoc = Len(strFullPath) - (Len(strFullPath) - InStrRev(strFullPath, "\") - 1)
  14.     intEndLoc = Len(strFullPath) - (Len(strFullPath) - InStrRev(strFullPath, "."))
  15.     intLength = intEndLoc - intStartLoc
  16.  
  17.     FileNameNoExtensionFromPath = Mid(strFullPath, intStartLoc, intLength)
  18.  
  19. End Function
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн R.I.Chernov

  • ADN Club
  • *****
  • Сообщений: 568
  • Карма: 18
Re: Перевод команд ilogic на VBA
« Ответ #4 : 25-04-2016, 12:13:09 »
Сергей, не совсем понятно, что вам требуется? Опишите пожалуйста задачу, полагаю ее суть не в "Переводе команд из VBA" . а в получении какого-то результата.
П.С. По логике вещей "IO" - ссылка на объект. В вашем примере не понятно на какой.

П.П.С. Как я понял, вам требуется получить "FullFileName". Если это необходимо для текущего документа, то делается это так (для iLogic нужно удалить слово Set):
Код - Visual Basic [Выбрать]
  1. Sub Test_forum_2()
  2. Dim oDoc As Inventor.Document
  3. Set oDoc = ThisApplication.ActiveDocument
  4. MsgBox (oDoc.FullDocumentName)
  5. End Sub

Если вам требуется получить имя не текущего активного файла, а какого-то другого, то вместо oDoc надо поставить ссылку на другую деталь, сборку или чертеж инвентора.
В программировании я новичок...но ненадолго! ;)

Оффлайн Алексей Романов

  • ADN Club
  • **
  • Сообщений: 87
  • Карма: 20
Re: Перевод команд ilogic на VBA
« Ответ #5 : 27-04-2016, 14:12:44 »
Да уж, ситуация. Попробую разложить по полочкам.
modelName = IO.Path.GetFileName(ThisDrawing.ModelDocument.FullFileName)
Здесь два момента.
ThisDrawing.ModelDocument.FullFileName - это конструкция чисто iLogic: получения полного имени файла модели с первого вида на чертеже. На VBA это будет так:
Код - Visual Basic [Выбрать]
  1. ' активный документ
  2. Dim oDoc As DrawingDocument
  3. Set oDoc = ThisApplication.ActiveDocument
  4. ' первый вид на чертеже
  5. Dim dView As DrawingView
  6. Set dView = oDoc.ActiveSheet.DrawingViews(1)
  7. ' полное имя файла документа модели
  8. Dim dPatch As String
  9. dPatch = dView.ReferencedDocumentDescriptor.FullDocumentName
IO.Path.GetFileName - это чистый VB.NET, получение имени файла без пути. Банальная манипуляция со строками. На VBA это будет так:
Код - Visual Basic [Выбрать]
  1. ' имя файла без пути с расширением
  2. Dim dName As String
  3. dName = Right(dPatch, Len(dPatch) - InStrRev(dPatch, "\"))
  4. ' имя файла без пути и без расширения
  5. dName = Left(dName, Len(dName) - 4)
Удачи!..

Оффлайн R.I.Chernov

  • ADN Club
  • *****
  • Сообщений: 568
  • Карма: 18
Re: Перевод команд ilogic на VBA
« Ответ #6 : 27-04-2016, 22:38:11 »
Да уж, ситуация. Попробую разложить по полочкам
Алексей, не могли бы вы еще немного "разложить по полочкам" для меня? :) Я не понимаю, а для чего такая сложность, с обращением к виду? У меня никогда не стояло такой задачи, но вроде можно получить имя документа с помощью :ThisApplication.ActiveDocument.FullDocumentName ? Или я какой-то тонкой разницы не уловил?
В программировании я новичок...но ненадолго! ;)

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Перевод команд ilogic на VBA
« Ответ #7 : 27-04-2016, 23:48:56 »
Код - Visual Basic [Выбрать]
  1.    ' имя файла без пути с расширением
  2.    Dim dName As String
  3.     dName = Right(dPatch, Len(dPatch) - InStrRev(dPatch, "\"))
  4.     ' имя файла без пути и без расширения
  5.    dName = Left(dName, Len(dName) - 4)
Насчет последнего - это ты загнул. Это будет справедливо только если расширение будет трехсимвольным. В общем случае это не так.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей Романов

  • ADN Club
  • **
  • Сообщений: 87
  • Карма: 20
Re: Перевод команд ilogic на VBA
« Ответ #8 : 28-04-2016, 14:36:33 »
R.I.Chernov, ты просто не понял вопрос, прочитай внимательно про первый момент. Конструкция iLogic возвращает имя файла МОДЕЛИ и это нужно повторить на VBA, а ты говоришь про имя файла чертежа)))
Александр, я не сильно загнул в данном случае, зачем усложнять))) Можно и так:
Код - Visual Basic [Выбрать]
  1. ' имя файла без расширения
  2. dName = Left(dName, InStrRev(dName, ".") - 1)

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Перевод команд ilogic на VBA
« Ответ #9 : 28-04-2016, 14:47:54 »
Можно и так:
Побуду нудным. :) Что будет, если у файла нет расширения?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей Романов

  • ADN Club
  • **
  • Сообщений: 87
  • Карма: 20
Re: Перевод команд ilogic на VBA
« Ответ #10 : 28-04-2016, 15:21:13 »
В данном случае у файла модели Инвентора есть расширение, причем трехбуквенное. Если фирма Autodesk уберет расширения, тогда можно так)))
Код - Visual Basic [Выбрать]
  1. If InStr(dName, ".") > 0 Then
  2.     dName = Left(dName, InStrRev(dName, ".") - 1)
  3. End If