Огромное спасибо и благодарность за помощь модератору Юрий М и пользователю Sanja
Код VBA: #10 22 Ноя 2016 22:50:01 работает и является решением на поставленный вопрос: "Выбор фигуры по тексту из выпадающего списка"
Код был переделан под необходимые нужды:
Код
Sub Plan()
Dim sNumber As String, Shp As Shape
Dim sxema As String
sxema = Cells(22, 13)
For Each Shp In ActiveSheet.Shapes
If Shp.name Like "*Plan*" Then Shp.Visible = msoFalse
Next
sNumber = Split(sxema)(0)
Select Case sNumber
Case "1": ActiveSheet.Shapes.Range(Array("Plan1")).Visible = msoTrue
Case "2": ActiveSheet.Shapes.Range(Array("Plan2")).Visible = msoTrue
End Select
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Dim sNumber As String, Shp As Shape
If Not Intersect(Target, Range("A3")) Is Nothing Then
For Each Shp In ActiveSheet.Shapes
Shp.Visible = msoFalse
Next
sNumber = Split(Target)(1)
Select Case sNumber
Case "№1": ActiveSheet.Shapes.Range(Array("Рисунок 2")).Visible = msoTrue
Case "№2": ActiveSheet.Shapes.Range(Array("Group 3")).Visible = msoTrue
'Дальше по аналогии
End Select
End If
End Sub
Ну есть проблема код закрывает все фигуру на листе даже которые не относятся к выпадающему списку. Как можно слетать так, чтобы скрытыми были фигуры из списка. (нужен только пример)
К сожалению не получается сделать так. (это не рисунок) Уже пытался сделать по теме: "Выбор фото из выпадающего списка". Выдает ошибку: "неверная ссылка"
Задача в следующем: "Необходимо выбрать фигуру из выпадающего списка или на крайний случай по условия". Прошу Вас помочь или подсказать возможные решение задачи, возникшие при работе с фигурами в «excel».
Задача прикреплена в файле. (на листе 1 «выпадающий список», на листе 2 «данные по фигурам».)
Так, уже теплее. Теперь откройте Автокад вручную и не загружайте файл. И снова пошагово по F8 пройдитесь по коду. Добавьте только в код строку из сообщения #8
1. Открыл только "морду" AutoCAD. 2. Добавил строчку (смотреть ниже) в скрипт #4 (17 Окт 2016 00:55:32)
Код
If Err Then MsgBox "Ошибка регистрации AutoCAD", vbCritical, "Сбой!": Exit Sub
Добавил ниже строки
Код
Set Acad = CreateObject("AutoCAD.Application")
3. При открытой "морде" AutoCAD файл запускается и работает. 4. Если "AutoCAD" не запущен, то происходит остановка выполнения скрипта и выводит ошибку. Остановка выполнения скрипта:
Код
If Err Then IsNew = True
Err.Clear
Set Acad = CreateObject("AutoCAD.Application")
#15
Цитата
Вижу из сообщения #11 что в VBE-References установлена ссылка на AutoCAD 2012 Type Library, поэтому попробуйте еще такую версию кода:
1. Открыл только "морду" AutoCAD. 2. Запустил скрипт #16 (17 Окт 2016 11:32:31) 3. При открытой "морде" AutoCAD файл запускается и работает. 4. Если "AutoCAD" не запущен, то происходит остановка выполнения скрипта и выводит ошибку.
И еще на всякий случай добавьте ниже строки Set Acad = CreateObject("AutoCAD.Application") такую вот строчку кода If Err Then MsgBox "Ошибка регистрации AutoCAD", vbCritical, "Сбой!": Exit Sub
Закройте все окна Autocad и в пошаговом режиме отладки кода по нажатию F8 определите, на какой строчке кода возникает проблема.
Программа AutoCAD закрыта . При проверки кода с пошаговым выполнением скрипта: Ошибка: "Microsoft Excel ожидает, пока другое приложение завершит действие OLE."
Код
Set Acad = CreateObject("AutoCAD.Application")
Дальше выполняет следующие строки скрипта:
Код
End If
cad.Visible = True
On Error GoTo exit_
При выполнении скрипта:
Код
With Acad.Documents
Завершает скрипт и переход на:
Код
If Err Then MsgBox Err.Description, vbCritical, "Error"
Попробовал поменять имя файла autoCAD на имя которого нет, для выполнения функции если нет то создать новый файл autoCAD. Происходит тоже самое, что и выше переход:
Код
If Err Then MsgBox Err.Description, vbCritical, "Error"
Sub OpenDwg()
Const FileDwg = "I:\document\drawings.dwg"
Dim Acad As Object
On Error Resume Next
Set Acad = CreateObject("AutoCAD.Application")
With Acad.Documents
.Open FileDwg
End With
If Err Then MsgBox Err.Description, vbCritical, "Error"
End
Ошибка осталась. Долго загружает AutoCAD и выводит ошибку с "Microsoft Excel ожидает, пока другое приложение завершит действие OLE."
Скрипт VBA:
Код
Sub CreateDwg()
Const FileDwg = "I:\document\drawings.dwg" '<-- менять здесь
Dim Acad As Object, IsNew As Boolean
On Error Resume Next
Set Acad = GetObject(, "AutoCAD.Application")
If Err Then
IsNew = True
Err.Clear
Set Acad = CreateObject("AutoCAD.Application")
End If
Acad.Visible = True
On Error GoTo exit_
With Acad.Documents
If Dir(FileDwg) = "" Then
' Если файла FileDwg на месте нет, то создать новый
.Add
.SaveAs FileDwg
Else
' Файл FileDwg уже есть - открыть его
'.Open FileDwg
Shell """" & Acad.Path & "\acad.exe"" " & """" & FileDwg & """"
End If
End With
exit_:
If Err Then MsgBox Err.Description, vbCritical, "Error"
End
Ошибка "Microsoft Excel ожидает, пока другое приложение завершит действие OLE."
Самое интересное в том, что если сделать:
1. Запустить файл "AutoCAD" и оставить его открытым. 2. Запустить "второй" скрипт VBA то файл "AutoCAD" запускается и выводит: открыть файл только для чтения ? Нажимаем ОК и файл загружается.
Проблема в процессе загрузки файла autoCAD через скрипт VBA
Создаю новую тему, так как старая тема: "Запуск AutoCAD через Excel" закрыта и отправлено в архив. Вопрос в ошибке проявляющая при выполнении скрипта VBA "Microsoft Excel ожидает, пока другое приложение завершит действие OLE." Скрипт VBA:
Код
Sub CreateDwg()
Const FileDwg = "I:\document\drawings.dwg" '<-- менять здесь
Dim Acad As Object, IsNew As Boolean
On Error Resume Next
Set Acad = GetObject(, "AutoCAD.Application")
If Err Then
IsNew = True
Err.Clear
Set Acad = CreateObject("AutoCAD.Application")
End If
On Error GoTo exit_
With Acad.Documents
If Dir(FileDwg) = "" Then
' Если файла FileDwg на месте нет, то создать новый
.Add
.SaveAs FileDwg
Else
' Файл FileDwg уже есть - открыть его
.Open FileDwg
End If
End With
exit_:
If Err Then MsgBox Err.Description, vbCritical, "Error"
End Sub
Скрипт работал пока файл AutoCAD весил не много, сейчас файл весит 29 Мбайт. Прошу помочь в решении данной проблемы (я понимаю, что файл долго загружается и происходит завершение процесса) ? Возможно решения вопроса: Ждать до конца выполнения exe, открываемого из excel