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

Тема в разделе "Другие", создана пользователем Guest_Serafim_*, 24 ноя 2005.

Статус темы:
Закрыта.
  1. Guest_Serafim_*

    Guest_Serafim_* Гость

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

    Код (Text):
    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
    А собственно задание состоит в следующем:

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

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

    GreatLion Гость

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

    Guest Гость

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

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

    GreatLion Гость

    Меню(вверху, самое обычное):

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

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

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

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

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

    Guest_Serafim_* Гость

    Ой... пасиба! Не знаю как и благодарить... ;) ты мне очень помог :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?

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

    GreatLion Гость

    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)
     
  7. Guest_Serafim_*

    Guest_Serafim_* Гость

    Вроде разобрался... B)
    Ещё раз, огромное тебе спасибо!
     
  8. Serafim

    Serafim Гость

    Для: GreatLion

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

    Код (Text):
    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
     
  9. GreatLion

    GreatLion Гость

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

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

    Serafim Гость

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

    GreatLion Гость

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

    Serafim Гость

    Так, хорошо, а как тогда создать эту Userform? :huh:
     
  13. Guest

    Guest Гость

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

    Serafim Гость

    <!--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. И если я отменяю сохранение или любую другую комманду, то выдаётся ошибка...
     

    Вложения:

    • zadacha.rar
      Размер файла:
      15,3 КБ
      Просмотров:
      78
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей