Как разработать приложение на VBA for Application?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Vilkov
Обычный пользователь
Обычный пользователь
 
Сообщения: 58
Зарегистрирован: 27.07.2005 (Ср) 17:09

Сообщение Vilkov » 29.07.2005 (Пт) 12:38

ну там на фрейме много контролов, и много тексбоксов нужны только эти два.

Sedge
Alternative Choice
Alternative Choice
Аватара пользователя
 
Сообщения: 1049
Зарегистрирован: 16.05.2002 (Чт) 18:23
Откуда: Somewhere-In-The-Net

Сообщение Sedge » 29.07.2005 (Пт) 12:46

Ээээ :?:
Код: Выделить всё
If TextBox1.Text = "" Then Exit Sub
If TextBox2.Text = "" Then Exit Sub
...

Vilkov
Обычный пользователь
Обычный пользователь
 
Сообщения: 58
Зарегистрирован: 27.07.2005 (Ср) 17:09

Сообщение Vilkov » 29.07.2005 (Пт) 13:18

надо в цикле пересмотреть все боксы.
если хотябы один пустой то кнопка не загорается, если все заполнены то загорается.
предлагаешь обращаться напрямую к каждому текстбоксу и каждый проверять?

Vilkov
Обычный пользователь
Обычный пользователь
 
Сообщения: 58
Зарегистрирован: 27.07.2005 (Ср) 17:09

Сообщение Vilkov » 29.07.2005 (Пт) 13:27

да и правда на хрен этот цикл :)))))))))))))))
ты прав. что-то стормозил.........

Vilkov
Обычный пользователь
Обычный пользователь
 
Сообщения: 58
Зарегистрирован: 27.07.2005 (Ср) 17:09

Сообщение Vilkov » 29.07.2005 (Пт) 14:50

Sedge
откуда звезды берутся?Я идиот! Убейте меня, кто-нибудь!Я идиот! Убейте меня, кто-нибудь!???


можешь дать ссылку как свой объект написать или в кратце сам написать?

Vilkov
Обычный пользователь
Обычный пользователь
 
Сообщения: 58
Зарегистрирован: 27.07.2005 (Ср) 17:09

Сообщение Vilkov » 31.07.2005 (Вс) 12:50

Друзья, подскажите, пожалуста, как сделать:
1. создать форму, и удалить из кода вба (если так можно)
2. убрать на форме кнопку закрыть.
3. не получается сделать чтобы прогресс бар на ней работал.

этот код не работает
UserForm1.Enabled = False
UserForm2.Show
UserForm2.ProgressBar1.Min = LBound(Premium.Forest)
UserForm2.ProgressBar1.Max = UBound(Premium.Forest)
UserForm2.ProgressBar2.Min = LBound(Premium.Quarter)
UserForm2.ProgressBar2.Max = UBound(Premium.Quarter)
UserForm2.Label4.Caption = UBound(Premium.Forest)
' ProgressBar3.Min = LBound(Premium.Forest)
' ProgressBar3.Max = UBound(Premium.Forest)
For i = LBound(Premium.Forest) To UBound(Premium.Forest)
UserForm2.ProgressBar1.Value = i
UserForm2.Label5.Caption = i
' ProgressBar3.Value = i

With Premium.Forest(i)
.PolicyNumber = Sheets(Link.Premium.ListName).Cells(i + 1, 1).Value
.SaleOffice = Sheets(Link.Premium.ListName).Cells(i + 1, 2).Value
.MinStartDate = Sheets(Link.Premium.ListName).Cells(i + 1, 3).Value
.Comp1 = Sheets(Link.Premium.ListName).Cells(i + 1, 4).Value
.Comp2 = Sheets(Link.Premium.ListName).Cells(i + 1, 5).Value
.SumOfWP = Sheets(Link.Premium.ListName).Cells(i + 1, 6).Value
For j = LBound(Premium.Quarter) To UBound(Premium.Quarter)
UserForm2.ProgressBar2.Value = j
If i = 1 Then
Premium.Quarter(j) = Sheets(Link.Premium.ListName).Cells(i, Premium.PeriodTotalCount - Premium.PeriodCount + j).Value
Else
.SumOfEP(j).EP = Sheets(Link.Premium.ListName).Cells(i, Premium.PeriodTotalCount - Premium.PeriodCount + j).Value
End If
Next j
End With
Next i
Workbooks(Link.Premium.Name).Close
UserForm2.Hide
UserForm1.Enabled = True

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 01.08.2005 (Пн) 6:53

Это ответ на второй вопрос, код для ВБ. Насколько я помню, в VBA у формы нет hWnd, так что искать надо через FindWindow

Код: Выделить всё
Private Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, ByVal bRevert As Long) As Long
Private Declare Function RemoveMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, _
        ByVal wFlags As Long) As Long

Const MF_BYPOSITION = &H400&
Public Sub RemoveCloseMenu(frm As Form)
    Dim hSysMenu As Long
    hSysMenu = GetSystemMenu(frm.hwnd, 0)
    Call RemoveMenu(hSysMenu, 6, MF_BYPOSITION)
    Call RemoveMenu(hSysMenu, 5, MF_BYPOSITION)
End Sub
А я все практикую лечение травами...

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 01.08.2005 (Пн) 6:57

1. создать форму, и удалить из кода вба (если так можно)

А как же она будет создаваться, если ты ее из кода удалишь?... :wink:
3. не получается сделать чтобы прогресс бар на ней работал.

Прогресбар работает ВСЕГДА! Только надо установить Min и Max, а затем изменять Value...
А я все практикую лечение травами...

Vilkov
Обычный пользователь
Обычный пользователь
 
Сообщения: 58
Зарегистрирован: 27.07.2005 (Ср) 17:09

Сообщение Vilkov » 01.08.2005 (Пн) 9:31

Twister
а разве в ВБА нельзя как в дельфи
userform1.create;
userform1.showmodal;
userform1.delete;


Я идиот! Убейте меня, кто-нибудь!????
Ну типа я из формы1 создаю форму2 на которой и отражается объект прогресс. а потом она удаляется эта форма.
я посмотрел по-моему в ВБА так нельзя.
все-таки большой минус.

в чем фишка почему прогресс бар у меня не работает.
естественно я поставил изменение велью, но программа доходит до
userform2.show и останавливается, управление передается на форму2.
она естественно без кода. что мне закачку делать на второй форме?
так вообще прогресс работает, если его ставить на первую форму.

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 01.08.2005 (Пн) 9:40

Обработку прогрессбара в отдельный поток запихни...

Код: Выделить всё
userform1.create;
userform1.showmodal;
userform1.delete;

Не пойму, зачем те форму создавать? Просто покажи ее (ShowModal) и скрой потом...
А я все практикую лечение травами...

Vilkov
Обычный пользователь
Обычный пользователь
 
Сообщения: 58
Зарегистрирован: 27.07.2005 (Ср) 17:09

Сообщение Vilkov » 01.08.2005 (Пн) 10:26

Twister
да она блин висит возле первой формы, в смысле в дереве.
ну не нужна она, не привык я чтобы впрограмме было что-то лишнее.
а как это в отледьный поток запихнуть прогрессбар?Я идиот! Убейте меня, кто-нибудь!Я идиот! Убейте меня, кто-нибудь!???
будть другом, можешь написать?Я идиот! Убейте меня, кто-нибудь!Я идиот! Убейте меня, кто-нибудь!??7

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 01.08.2005 (Пн) 11:09

ну не нужна она, не привык я чтобы впрограмме было что-то лишнее.

Ну это ж не делфи... Если хош, можешь ее генерировать на лету, с помощью АПИ (но это, имхо, изврат)
а как это в отледьный поток запихнуть прогрессбар?Я идиот! Убейте меня, кто-нибудь!Я идиот! Убейте меня, кто-нибудь!???
будть другом, можешь написать?Я идиот! Убейте меня, кто-нибудь!Я идиот! Убейте меня, кто-нибудь!??


Пользуй функцию CreateThread (смотри справку по АПИ). Создай процедуру в которой будет выполняться работа с прогрессом, и в параметре CreateThread укажи AddressOf этой процедуры...
А я все практикую лечение травами...

Vilkov
Обычный пользователь
Обычный пользователь
 
Сообщения: 58
Зарегистрирован: 27.07.2005 (Ср) 17:09

Сообщение Vilkov » 01.08.2005 (Пн) 11:12

СПАСИБО...

Пред.

Вернуться в Visual Basic 1–6

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

Сейчас этот форум просматривают: Google-бот и гости: 69

    TopList