Форум пользователей Visio

Форум по вопросам применения и программирования в Visio
Текущее время: 28 мар 2024, 15:20

Часовой пояс: UTC + 3 часа [ Летнее время ]


Правила форума


При размещении файлов предпочтительным является формат vsd (а не vsdx/vsdm)
Размещая ваши вложения на форуме не используйте имена файлов содержащих кириллицу, в противном случае файл будет иметь имя .<расширение файла> !

Для форматирования ваших сообщений используйте BBCodes, описание используемых на форуме BBCodes.



Начать новую тему Ответить на тему  [ Сообщений: 88 ]  На страницу Пред.  1, 2, 3, 4, 5  След.
Автор Сообщение
 Заголовок сообщения: Re: азы вба
СообщениеДобавлено: 17 май 2012, 00:37 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
с помощью стандартных средств поиска экселя (в выше указанном примере) у меня ничего не вышло, написал свой код
Код:
Sub mymacro()
Dim m1(10) As String
Dim m2(10) As String
Dim m3(10) As String
Dim s As String
i = 0
For y = 1 To 10
Debug.Print y
s = Cells(y, 1).Text
If s = "город" Then
i = i + 1
m1(i) = Cells(y, 2).Text   ' содержимое столбца B
m2(i) = Cells(y, 3).Value  ' содержимое столбца C
m3(i) = Cells(y, 4).Value  ' содержимое столбца D
End If
Next y
Debug.Print "В выделенном диапазоне " & i & " совпадения"
End Sub

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: азы вба
СообщениеДобавлено: 17 май 2012, 00:50 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
Изображение

в окне вба проекта выбираем UserForm1 (выделен красным квадратом) жмем правую кнопку мыши (ПКМ),
видим меню.
1. Если надо удалить форму, жмем Remove UserForm1 (см. в зеленый квадрат)
1. Если надо удалить кнопки и др. содержимое формы, жмем View Code (см. в желтый квадрат)

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: азы вба
СообщениеДобавлено: 17 май 2012, 06:47 
Не в сети
Ветеран
Аватара пользователя

Зарегистрирован: 14 май 2012, 00:07
Сообщений: 150
Использую Visio c: 2012
Отрасль: Связь
Должность: Ведущий инженер
Уровнь квалификации: Vba, Vb, Java, Java Script
Очков репутации: 1

Добавить очки репутацииУменьшить очки репутации
спасибо большое за ответ...число (10) это я так понял диапазон строк?а как теперь это все в массив записать, что бы потом в файл записать? что бы в тхт файле если больше 1 находки то запись цикла через какое нибудь слово разделялось ну например "следующая находка"?


Последний раз редактировалось egoist 17 май 2012, 07:00, всего редактировалось 1 раз.

Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: азы вба
СообщениеДобавлено: 17 май 2012, 06:49 
Не в сети
Ветеран
Аватара пользователя

Зарегистрирован: 14 май 2012, 00:07
Сообщений: 150
Использую Visio c: 2012
Отрасль: Связь
Должность: Ведущий инженер
Уровнь квалификации: Vba, Vb, Java, Java Script
Очков репутации: 1

Добавить очки репутацииУменьшить очки репутации
в одномерный массив что бы через ентер в столбик все записывалось.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: азы вба
СообщениеДобавлено: 17 май 2012, 10:19 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
да, я ограничился таблицей из 10 строк и 4 столбцов

можно и в текстовый файл загнать то, что получится. только нужно подключить предварительно библиотеку для работы с файловой системой
Microsoft Scripting Runtime - файл scrrun.dll. А также нужен файл куда писать будем, в моем случае это "f:\My.txt"

Код:
Sub mymacro()
Dim fso As FileSystemObject
Dim ts As TextStream
Set fso = CreateObject("Scripting.FileSystemObject")
Dim m1(10) As String
Dim m2(10) As String
Dim m3(10) As String
Dim s As String
i = 0
For y = 1 To 10
Debug.Print y
s = Cells(y, 1).Text
If s = "город" Then
i = i + 1
m1(i) = Cells(y, 2).value ' запись в массив m1 строки с номером i
m2(i) = Cells(y, 3).Value ' запись в массив m1 строки с номером i
m3(i) = Cells(y, 4).Value ' запись в массив m1 строки с номером i
Set ts = fso.OpenTextFile("f:\My.txt", ForAppending, True)     ' открываем существующий текстовый  файл my.txt для пополнения
ts.WriteLine "совпадение №" & i & ": " & m1(i) & Chr(9) & m2(i) & Chr(9) & m3(i)  ' добавляем новую строку этого файла содержимое наших массивов в строке i
ts.Close ' закрываем текстовый файл
End If
Next y
End Sub

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: азы вба
СообщениеДобавлено: 17 май 2012, 10:24 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
можно обойтись без записи в массив. так оно короче будет :)
Код:
Sub mymacro()
Dim fso As FileSystemObject
Dim ts As TextStream
Set fso = CreateObject("Scripting.FileSystemObject")
Dim s As String
For y = 1 To 10
s = Cells(y, 1).Text
If s = "город" Then
Set ts = fso.OpenTextFile("f:\My.txt", ForAppending, True)     ' открываем существующий текстовый  файл my.txt для пополнения
ts.WriteLine "совпадение №" & i & ": " & Cells(y, 2).value & Chr(9) & Cells(y, 3).value & Chr(9) & Cells(y, 4).value  ' добавляем в новую строку этого файла содержимое из ячеек B, C, D
ts.Close ' закрываем текстовый файл
End If
Next y
End Sub


занесение данных в массив я применяю, только при работе с несколькими приложениями. например, из под визио открываю эксель нахожу какие-то значения, заношу в массив. далее я из массива данные переношу в визио

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: азы вба
СообщениеДобавлено: 17 май 2012, 14:01 
спасибо огромное если не сложно не могли бы написать как это будет выглядись если из под визио запускать?


Пожаловаться на это сообщение
Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: азы вба
СообщениеДобавлено: 17 май 2012, 16:07 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
главное не забыть подключить библиотеку Microsoft Excel 14.0 Object Library
Код:
Sub mymacro()
Dim fso As FileSystemObject
Dim ts As TextStream
Set fso = CreateObject("Scripting.FileSystemObject")
' начало кода открытия документа excel
Dim oExcel As Excel.Application ' !!! не забыть подключить библиотеку Microsoft Excel 14.0 Object Library
Set oExcel = CreateObject("Excel.Application")
Dim sp As Excel.Workbook
Dim sht As Excel.Sheets
pth = ThisDocument.Path ' по умолчанию будет искать файл экселя в папке с этим документом визио
Dim ffs As FileDialogFilters
Dim sFileName As String
oExcel.Visible = True
Dim fd As FileDialog
Set fd = oExcel.FileDialog(msoFileDialogOpen)
With fd
.AllowMultiSelect = False
.InitialFileName = pth
Set ffs = .Filters
    With ffs
        .Clear
        .Add "Excel", "*.xlsx"
    End With
oExcel.FileDialog(msoFileDialogOpen).Show
End With
sFileName = oExcel.FileDialog(msoFileDialogOpen).SelectedItems(1)
Set sp = oExcel.workbooks.Open(sFileName)
sp.Activate
' конец кода открытия Excel
Dim s As String
Dim i As Integer
i = 0
For y = 1 To 10
s = Cells(y, 1).Text
If s = "город" Then
i = i + 1
Set ts = fso.OpenTextFile("f:\My.txt", ForAppending, True)     ' открываем существующий текстовый  файл my.txt для пополнения
ts.WriteLine "совпадение №" & i & ": " & Cells(y, 2).Value & Chr(9) & Cells(y, 3).Value & Chr(9) & Cells(y, 4).Value  ' добавляем в новую строку этого файла содержимое из ячеек B, C, D
ts.Close ' закрываем текстовый файл
End If
Next y
sp.Close SaveChanges:=False
oExcel.Application.Quit
End Sub

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: азы вба
СообщениеДобавлено: 17 май 2012, 19:22 
спасибо большое...а если нет этой библиотеке по екселю?то ее надо качать и регистрировать в системе?по другому ни как?есть какой нибудь простой способ регистрации библиотек в системе?


Пожаловаться на это сообщение
Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: азы вба
СообщениеДобавлено: 17 май 2012, 20:58 
получается этот макрос будет работать только на том компе где есть эта библиотека?


Пожаловаться на это сообщение
Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: азы вба
СообщениеДобавлено: 18 май 2012, 00:09 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
если, на компе стоит эксель то библиотека должна быть.
14 версия для эксель 2010
12 для 2007
11 для 2003

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: азы вба
СообщениеДобавлено: 18 май 2012, 07:06 
Не в сети
Ветеран
Аватара пользователя

Зарегистрирован: 14 май 2012, 00:07
Сообщений: 150
Использую Visio c: 2012
Отрасль: Связь
Должность: Ведущий инженер
Уровнь квалификации: Vba, Vb, Java, Java Script
Очков репутации: 1

Добавить очки репутацииУменьшить очки репутации
Спасибо за помощь, и наверное последний вопрос так как наверное я уже надоел тупые вопросы задавать :D можно ли как нибудь полученное значение переменной из юзерформ2 перенести в юзерформ1 ? Ну то есть что бы они как то были связанны друг с другом?


Последний раз редактировалось egoist 18 май 2012, 07:26, всего редактировалось 1 раз.

Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: азы вба
СообщениеДобавлено: 18 май 2012, 07:25 
Не в сети
Ветеран
Аватара пользователя

Зарегистрирован: 14 май 2012, 00:07
Сообщений: 150
Использую Visio c: 2012
Отрасль: Связь
Должность: Ведущий инженер
Уровнь квалификации: Vba, Vb, Java, Java Script
Очков репутации: 1

Добавить очки репутацииУменьшить очки репутации
на юзерформе 1 есть кнопока "дополнительные параметры" которая делает
Лоад юзерформ2 и юзерформ2. Сшоу
В ней просто сказывается пару значений переменных например а будет равно 2, и как сделать что бы после указания значения и закрытия юзерформ2 эти значения перешли в юзерформ1 ? Возможно?


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: азы вба
СообщениеДобавлено: 18 май 2012, 16:22 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
вот ссылка на готовый файл http://odnoznachnost.narod.ru/store/vba.zip

долго сам не мог разобраться. не объявил переменные ключевым словом Public, думал раз они над сабом стоят значит видны по всем формам

в Module1
Код:
Public p1 As Integer
Public p2 As Integer
Public p3 As Integer
Sub nw()
Load UserForm1
UserForm1.Show
End Sub


В UserForm1
Код:
Sub UserForm1_load()
p1 = ""
p2 = UserForm2.txt_1.Value
p3 = ""
End Sub
Private Sub cmd1_Click()
Load UserForm2
UserForm2.Show
End Sub
Private Sub cmdExit_Click()
Unload UserForm1
End Sub
Private Sub txt1_Change()
p1 = UserForm1.txt1.Value
p3 = p1 + p2
UserForm1.txt3.Value = p3
End Sub


В UserForm2
Код:
Sub UserForm2_load()
Set p1 = UserForm1.txt1.Value
Debug.Print "OK"
End Sub
Private Sub cmd_Exit_Click()
Unload UserForm2
End Sub
Private Sub cmdOK_Click()
UserForm1.txt2.Value = p2
UserForm1.txt3.Text = p3
Unload UserForm2
End Sub
Sub txt_1_Change()
p2 = UserForm2.txt_1.Value
p3 = p1 + p2
End Sub

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: азы вба
СообщениеДобавлено: 18 май 2012, 23:07 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
Цитата:
2. Ключевое слово Public определяет область видимости процедуры, и не может применяться для определения переменных.
чтобы переменные a и b были видны во всех процедурах, их нужно объявить в самом начале кода

в своем первом сообщении я так писал ! :(
на самом деле ошибался я - как раз сегодня я столкнулся с этим. Неявно объявлял переменные перед сабом в разделе "Эта книга". Если в этом разделе перед переменной написать ключевое слово Public то будет ошибка!
Поместить саб в раздел Module1, а переменные нужно объявлять явно - ключевым словом Public

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: азы вба
СообщениеДобавлено: 19 май 2012, 12:38 
Не в сети
Ветеран
Аватара пользователя

Зарегистрирован: 14 май 2012, 00:07
Сообщений: 150
Использую Visio c: 2012
Отрасль: Связь
Должность: Ведущий инженер
Уровнь квалификации: Vba, Vb, Java, Java Script
Очков репутации: 1

Добавить очки репутацииУменьшить очки репутации
Спсибо. А зачем нужны Module1, Module2, и т.д. и ClassModule? к ним как то можно обращаться?


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: азы вба
СообщениеДобавлено: 19 май 2012, 13:43 
Не в сети
Ветеран
Аватара пользователя

Зарегистрирован: 14 май 2012, 00:07
Сообщений: 150
Использую Visio c: 2012
Отрасль: Связь
Должность: Ведущий инженер
Уровнь квалификации: Vba, Vb, Java, Java Script
Очков репутации: 1

Добавить очки репутацииУменьшить очки репутации
Цитата:
В UserForm2
Код:
Sub UserForm2_load()
Set p1 = UserForm1.txt1.Value


он ругается на .txt1. пишет Method or data member not found


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: азы вба
СообщениеДобавлено: 20 май 2012, 22:33 
Не в сети
Ветеран
Аватара пользователя

Зарегистрирован: 14 май 2012, 00:07
Сообщений: 150
Использую Visio c: 2012
Отрасль: Связь
Должность: Ведущий инженер
Уровнь квалификации: Vba, Vb, Java, Java Script
Очков репутации: 1

Добавить очки репутацииУменьшить очки репутации
У меня ещё такой вопрос я совершенно не знаю что делать((
программа полностью написана, программа довольно большая, суть программы в том что она расставляет шейпы по страницам в задданных координатах...Используется ОДИН набор в нём около 120 шейпов которые он расставляет...программа работает отлично всё делает как надо но только на том компе на котором она была написана...то есть я переношу этот документ визио с макросом на другой комп пытаюсь запустить а она пишет ошибку в строке когда загружаю набор
Код:
Set stnObj = Documents("Набор.vss")
вот указывает на stnObj и пешет ошибка набор не найден...хотя набор открыт из визио, совершенно не понимаю в чём дело потому что на моём компе работает а на соседнем нет(((

может это из за того что набор очень большой? он 3 метра весит и в нём около 120 шейпов? Очень нужна помощь...


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: азы вба
СообщениеДобавлено: 21 май 2012, 08:22 
Не в сети
Ветеран

Зарегистрирован: 21 окт 2011, 12:01
Сообщений: 939
Откуда: г. Екатеринбург
Использую Visio c: 2011
Очков репутации: 127

Добавить очки репутацииУменьшить очки репутации
возможно в визио в настройках не прописаны пути к наборам твоих фигур.
т.е. на одном компе настроено, на другом нет.
в визио 2007 например это делается в: Сервис-Параметры-Дополнительно - кнопка "пути к файлам"


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: азы вба
СообщениеДобавлено: 21 май 2012, 10:05 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
Цитата:
Спсибо. А зачем нужны Module1, Module2, и т.д. и ClassModule? к ним как то можно обращаться?


Я учил программирование в институте в 92-94 годах, нам конечно рассказывали про модули и классы! Но сейчас уже не помню :)
Теперь осваиваю VBA без серьезной научной базы, честно говоря никогда не задумывался зачем нужны Module1 и т.д., ведь есть модуль "Эта книга" в Эксель и "ThisDocument" в Visio?
Раньше вроде было ограничение на размер модуля 64k, если размер модуля был больше то программа работала медленно. Но это было в прошлом веке, когда компы были большие и медленные :)
Не знаю действует, ли это ограничение сейчас. Как вариант, разбиение на модули упрощает экспорт этих самых модулей - экспортировав модуль ThisDocument из другого файла затрется собственный.
Класс, что-то более серьезное чем модуль. Но до них я еще не дошел…

На практике обнаружил, что если все процедуры (сабы) имеют уникальные имена то нет проблем - в любом месте кода просто обращаешся к ним. Но если процедура sub ttt() есть и в Module1, и в Module2, то при обращении к процедуре нужно указать в каком модуле она расположена.

Код:
Module2
Sub ttt()
MsgBox "ttt"
End Sub
Sub mmm()
Module1.ttt
End Sub


http://www.cyberforum.ru/visual-basic/thread283523.html - здесь немного написано про классы и модули

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 88 ]  На страницу Пред.  1, 2, 3, 4, 5  След.

Часовой пояс: UTC + 3 часа [ Летнее время ]



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7


Вы можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Вы можете создать форум бесплатно PHPBB3 на Getbb.Ru, Также возможно сделать готовый форум PHPBB2 на Mybb2.ru
Русская поддержка phpBB