Люди, помогите с Vba!

  • Автор темы Guest_Serafim_*
  • Дата начала
Статус
Закрыто для дальнейших ответов.
G

Guest_Serafim_*

Гость
#1
Задание горит! Препод по информатике и словом не обмолвился как писать программу, только дал вот эти шаблоны:

Код:
Function Size ()
Dim count as integer
count = 1
while cells (count + 1,1)
<> " "
count = count + 1
Wend
size = count 
end Function

Sub Bad (n as integer, k as integer)
k = 0 for i = 2 to n
if cells (i, 2) = 2 oR cells (i, 3) = 2
k = k + 1
Range (cells (k, 6), cells (k, 9))
.value = range (cells (i, 1) cells (i, 4)). value

End if
next i 
End Sub


Sub Main ()
Dim n as integer, msg as String, m as integer 
n = size ()
msg = "N = "& n - 1
MsgBox (msg)
Call Bad (n,m)
msg = "Bad Students = "&m
msgbox ("GameIsOver!")
End Sub
А собственно задание состоит в следующем:

Вывести по одному разу товары, представленные в списке. Определить товар с минимальной ценой. По запросу с экрана ввести курс доллара и вывести список с ценой в рублях и в долларах (Таблица (любая) – список со следующими полями: товар, фирма, страна, цена).

Помогите (если не трудно, с объяснениями - я ж всё таки хочу научиться!)!!!
 
G

GreatLion

Гость
#2
Держи. Я ответил тебе. Надеюсь не поздно( только вчера заметил)
Посмотреть вложение zadacha.rar
Пояснения вроде написал.
Что не понятно спрашивай, не мучайся. :)
Тока я не понял, что это значит:
"Вывести по одному разу товары, представленные в списке."
Поэтому это я не реализовал.
Так что, давай, учись.
 
G

Guest

Гость
#3
Спасибо большое! Только я не могу никак увидеть собственно программу. Я посмотрел - работает исправно. А где её собственно форма так и не нашёл. Нажимал ctrl+a мне просто выводится окошко, что-то вроде, если навожу на Sub, то Sub и ещё что-то там... на английском, а я в нём плох... Ты не мог объянсить поподробнее?

А вывести товары по одному раз, как я понял, это просто в таком вот окошке, как появляется N=4 должны появляться товары по очереди и по одному...
 
G

GreatLion

Гость
#4
Меню(вверху, самое обычное):

Сервис -> Макрос -> Редактор Visual Basic (Alt + F11)

Далее слева вверху будет дерево этой книги. Открой папку Forms и двойной щелчок по UserForm1 и ты увидишь форму. Далее двойной щелчок на форму, и откроется код.

Вот. Вроде все добавил, улучшил пояснения.
Посмотреть вложение zadacha.rar

Когда ты жмешь ctrl+a , то запускается макрос. Он в свою очередь открывает окно, которое ты видел. Окно, при загрузка запускает основную функция, которая считает кол-во строк, самый дешевый товар. А как только ты введешь число и нажмешь на кнопку, то прога начнет считать стоимость в $.

Пояснения в коде формы. :D
 
G

Guest_Serafim_*

Гость
#5
Ой... пасиба! Не знаю как и благодарить... ;) ты мне очень помог :D

Можно ещё кое-что уточнить?
1.Cells - создание столбца?
2.Cells(i, 5) = Val(Cells(i, 4)) / kurs - вот эта строчка означает, что если клетка (i, 5) равна клетке (i, 4) то клетку (I, 4) мы поделим на курс доллара?
3.Next i - для чего нужен этот код?
4.Unload Me - это выгрузка формы? А можно более простым языком, а то я что-то не могу понять смысла фразы... это означает, что все эти Cells. которые мы записали будут выгружены в Exсel?

Ещё раз спасибо.
 
G

GreatLion

Гость
#6
1.Cells - это массив клеточек Excell'я.
Cells(строка, столбец).

2.Нет. Это значит в клеточку с координатами(i,5) записать результат деления переведенного в числовое значение клеточки с координатами(i,4) на курс доллара.
Т.е. :
Сначала Cells(i,4) переводится в число.
Потом оно делится на курс.
А потом записывается в Cells(i,5).

Когда ты указываешь x,y в Cells, т.е. Cells(y,x), то Cells можно так сказать, представляет собой клеточку. Ты можешь в нее писать и читать из нее, т.е. присваивать ей значение или присваивать ее значение чемунибудь другому, т.е. , если сказать проще, то Cells представляет собой переменную.

3. Next i - он закрывает цикл Next. Т.е. он говорит компилятору, что это конец участка кода, который будет повторяться в цикле Next с переменной i. Начало - это само объявление Next.

4.Можешь это удалить. Вообще - это просто выгружает форму, т.е. удаляет ее. После этого на форме ничего не произойдет, ее не будет вооще. Тока почему-то это не работает, так что можешь это удалить.
А cells выгружаются в Excell сразу, как только присваиваешь им значение.

Ну вроде все объяснил. B)
 
G

Guest_Serafim_*

Гость
#7
Вроде разобрался... B)
Ещё раз, огромное тебе спасибо!
 
S

Serafim

Гость
#8
Для: GreatLion

Извини, что снова отвлекаю, но у меня новый вопрос...
В общем, как ты создал визуальный модуль? Вопрос не праздный, т.к. это действительно что-то новенькое и в обязательную программу его создание не входит... Только не говори удалять его... мне интересно, как его создать.
И ещё, как создать меню? Т.е. чтобы например появилось окошко с выбором, что нужно. Нажимаешь цифру и работает только, что нужно тебе. Т.е. например 1-Товары по одному разу, 2-Цена в долларах, 3-Минимальный товар и т.д.
Вот такой нам шаблон дали:

Код:
resp = InputBox("1-Size, 2-Bad, 3-FirstLetter, Other-Quit")
Select Case resp
Case 1
MsgBox ("N=" & n - 1)
Case 2
Call Bad(n, k)
Case 3
Call Letter(n, l, ln)
Case Else
resp = MsgBox("Clean Results?", vbYes, vbNo)
If resp = vbYes Then
Call Clean(n, k, ln)
msg Box("GameOver!")
Exit Sub
End Select
я попытался сделать по аналогии, но ничего не выходит. Например у нас был код Sub Bad, а затем мы уже писали Call Bad... т.е. я так понял вызвать можно только то, что с Sub'ом, а в программе я такого не нашёл... в общем, если не трудно - помоги?!

Да, и ещё вопрос, как сделать так, чтобы всё это безобразие можно было, либо сохранить, либо загрузить?

Заранее огромное спасибо! :D
 
G

GreatLion

Гость
#9
Извини, что долго не писал, но очень занят был...
Вообщем вот то что получилось. Пришлось ввнести изменения, но коментарии написал, должо быть понятно. Больше функций пришлось вынести в модуль(там где и процедура макросов пишется). Call - необязательно, можно ибез него. вообще легче вызывать
процедуры так: ИМЯПРОЦЕДУРЫ ПАРАМ1,ПАРАМ2
а функции так: ПЕРЕМЕННАЯ = ИМЯФУНКЦИИ(ПАРАМ1, ПАРАМ2).
функция - это там где Function,
а процедуры - это там где Sub.

Сохраняется вся эта бредятина месте с файлом xls. B)
Посмотреть вложение zadacha.rar
 
S

Serafim

Гость
#10
Спасибо огромное! У меня у самого получилось прописать меня посредством Call, но там такая глюченная версия VBA, кароч пришлось описывать что такое resp, т.е. resp as integer и так всё-всё... но я с начала не понял как это делать... уже разобрался... препод тоже пьянчуга - сел исправлять ошибку, а в результате обдал меня перегаром и удалил пол проги прежде чем понять, что resp нужно было описать... в общем, вещь не в этом...
Ты можешь объяснить как создавать визуальную форму (userform)?
Зараниее пасиба! B)
 
G

GreatLion

Гость
#11
Да энто не так и сложно. Открываешь редактор VB, а далее в меню Insert->UserForm. Форма вставляется и вперед. Там можно и не только формы вставлять, а также и модули и модули классов.
 
S

Serafim

Гость
#12
Так, хорошо, а как тогда создать эту Userform? :huh:
 
G

Guest

Гость
#13
Когда откроешь редактор ВБ, то в меню выбери пункт Insert, а потом подпункт UserForm. Форма создастся. все.
 
S

Serafim

Гость
#14
<!--QuoteBegin-GreatLion+17:12:2005, 07:34 -->
<span class="vbquote">(GreatLion @ 17:12:2005, 07:34 )</span><!--QuoteEBegin-->Да энто не так и сложно. Открываешь редактор VB, а далее в меню Insert->UserForm. Форма вставляется и вперед. Там можно и не только формы вставлять, а также и модули и модули классов.
[snapback]28457" rel="nofollow" target="_blank[/snapback]​
[/quote]

У меня снова появился вопросик по-поводу визуальных форм. В общем, как мне сделать так, чтобы меню было не Case, а через нажатие кнопочки и вся моя таблица отображалась уже не собственно в Excel, а в ListBox? Т.е. при запуске программы появлялось окошко с кнопочками - Размер, Курс,..., Загрузка, Сохранение, а справа от них, ну или слева, поле в котором все мои действия будут отображаться (и будет отображаться сама таблица).
Вот я пытался сделать, но у меня много ошибок и все ответы всё равно выдаются отдельно, а не в ListBox. И если я отменяю сохранение или любую другую комманду, то выдаётся ошибка...
 

Вложения

Статус
Закрыто для дальнейших ответов.