Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Несколько вопросов по VBA в excel

7.6K
07 мая 2005 года
den-911
17 / / 17.12.2004
Всем привет помогите пожалйста!!!
1. Как создать массив из ячеек которые находяться в одной книги а прога в другой? И нада проверять открыта она или закрыта.
2.Как в ListBox записи отсортировать по алфавиту и в нем мне надо сделать ScrollBar если записи будут не влизать а в настройках ListBox я ни как найти не могу! Это вообще возможно?
3. И еще в моей форме в поле вариант нельзя ни чего вписывать надо только кнопками увеличивать число до 30(максимум) а по умолчанию стоит 1 и я что не нашел в VBA ни масок ни чего подобного как в Delphi для выполнения этой задачи. Как это сделать?
5.2K
07 мая 2005 года
HuntGT
35 / / 17.12.2004
Цитата:
Originally posted by den-911
Всем привет помогите пожалйста!!!
1. Как создать массив из ячеек которые находяться в одной книги а прога в другой? И нада проверять открыта она или закрыта.
2.Как в ListBox записи отсортировать по алфавиту и в нем мне надо сделать ScrollBar если записи будут не влизать а в настройках ListBox я ни как найти не могу! Это вообще возможно?
3. И еще в моей форме в поле вариант нельзя ни чего вписывать надо только кнопками увеличивать число до 30(максимум) а по умолчанию стоит 1 и я что не нашел в VBA ни масок ни чего подобного как в Delphi для выполнения этой задачи. Как это сделать?


Парень я только начал учить ВБа но скажу что внешние файлы ВБа не может ипользовать
решение:
попробуй в Access! там можно разместь в нутрь одного файла и картинки и музыку и др... ТЫ ПОНЯЛ...

7.6K
07 мая 2005 года
den-911
17 / / 17.12.2004
X)- Я делаю это не для удовольствия а т.к. сильно надо, и нуна сделать в экселе до среды!!! :!!!: ;)
275
08 мая 2005 года
pashulka
985 / / 19.09.2004
1) Если под прогой подразумевается рабочая книга .xls то можно сделать всё значительно проще :

- Извлекаете нужное количество значений из ячеек другой рабочей книги. Для этого можно воспользоваться самыми обычными ссылками.
- Присваиваете значениям этого диапазона - значения этого же диапазона, например : Range("A1:C10").Value = Range("A1:C10").Value
- Сортируете диапазон ячеек, который содержит извлечённые значения.
- Связываете ListBox с этим диапазоном, посредством использования свойства RowSource или присваиваете свойству List значения диапазона ячеек.

2) Если записи будут превышать размер ListBox, то вертикальная полоса прокрутки появится автоматически.

3a) Для того чтобы запретить ввод в TextBox достаточно установить свойство Locked=True
3б) Что касается счётчика SpinButton, то у него есть два свойства Min & Max, которые позволят Вам установить нужные границы.
7.6K
09 мая 2005 года
den-911
17 / / 17.12.2004
Я вроде как разобрался со всеми ранее возикшими вопросами но теперь у меня проблема по серьезней! Мне надо отсортировать массив который состоит из букв! Как это сделать не понятно? у меня есть процедура сортировки но она работает только если в массив состит из цифр... И нельзя сортировать в книге а потом обратно засовывать в массив!
275
09 мая 2005 года
pashulka
985 / / 19.09.2004
Если Вы или Ваш преподаватель, принципиально не хотите использовать более простой способ, то используйте для сравнения строковых переменных макрофункцию StrComp, например :

 
Код:
iStrComp = StrComp("Яблоко", "Груша") ' 1
iStrComp = StrComp("Груша", "Яблоко") ' -1
7.6K
09 мая 2005 года
den-911
17 / / 17.12.2004
pashulka

А можно немного по подробней
У меня просто создается динамический массив который состоит из 3-х записей и они String в каждой переменной по предложению(например: B]Непрерывность функции в точке) и по первой букве мне их надо отсортировать по алфовиту.
А можно ли сортировать в ListBox? у меня массив туда все выводит! и мне главное чтоб там было отсортированно!
275
09 мая 2005 года
pashulka
985 / / 19.09.2004
Ну если исходить из Ваших слов, то алгоритм сортировки Вам уже известен, а значит нужно "сравнивать" не числовые значения, а строковые. Если нужно более подробно, то можете посмотреть вот здесь http://algolist.manual.ru/

Что касается самого ListBox, то насколько я знаю свойства отвечающее за сортировку элементов в этом элементе управления нет (VBA). Однако можно добавлять/удалять элементы можно, например :

 
Код:
Private Sub CommandButton1_Click()
ListBox1.AddItem ListBox1.List(2), 0
ListBox1.RemoveItem 3
End Sub


Примечание :
- Для корректной работы примера необходимо наличие как минимум трёх элементов списка.
- Не забывайте, что нумерация элементов ListBox/ComboBox начинается с нуля.
7.6K
09 мая 2005 года
den-911
17 / / 17.12.2004
Я уже пытался посмотреть на разных сайтах про сортировки но я ни чего не понимаю в Cи а там все примеры написаны на нем, да и потом в Си много функий которых VBA не поддерживает.
Если не сложно не могли бы вы помочь отсортировать массив по алфовиту в VBA?
А мой алгоритм не подходит для строк ни как кстати вот он:
 
Код:
For k = 1 To i
     For j = 1 To i - 1
      If Sorting(j) > Sorting(j + 1) Then
       Sorting(j) = Sorting(j) - Sorting(j + 1)
       Sorting(j + 1) = Sorting(j) + Sorting(j + 1)
       Sorting(j) = Sorting(j + 1) - Sorting(j)
      End If
     Next j
    Next k
275
09 мая 2005 года
pashulka
985 / / 19.09.2004
Я тоже C в глаза не видел, однако алгоритм (как правило) не имеет "национальности" и Ваш не является исключением из правил. Так что он может использоваться и для сравнения строк, только нужно использовать макрофукцию StrComp (см. второй пост)

 
Код:
With ListBox1: iCountList = .ListCount - 1

For iCount = iCountList To 1 Step -1
    For iCountTemp = iCountList To 1 Step -1
        If StrComp(.List(iCountTemp), .List(iCountTemp - 1)) = -1 Then
           .AddItem .List(iCountTemp), iCountTemp - 1
           .RemoveItem iCountTemp + 1
        End If
    Next
Next
7.6K
10 мая 2005 года
den-911
17 / / 17.12.2004
Огромное Спасибо:D :!!!: У меня теперь все работает ну ура!!!
275
10 мая 2005 года
pashulka
985 / / 19.09.2004
На самом деле надо добавить один момент, собственно ради чего я и предложил использовать StrComp, а именно :
Код:
With ListBox1: iCountList = .ListCount - 1

For iCount = iCountList To 1 Step -1
    For iCountTemp = iCountList To 1 Step -1
        If StrComp(.List(iCountTemp), .List(iCountTemp - 1), vbTextCompare) = -1 Then
           .AddItem .List(iCountTemp), iCountTemp - 1
           .RemoveItem iCountTemp + 1
        End If
    Next
Next

End With

В противном случае можно обойтись и без использования этой макрофункции, т.е.
Код:
With ListBox1: iCountList = .ListCount - 1

For iCount = iCountList To 1 Step -1
    For iCountTemp = iCountList To 1 Step -1
        If .List(iCountTemp) < .List(iCountTemp - 1) Then
           .AddItem .List(iCountTemp), iCountTemp - 1
           .RemoveItem iCountTemp + 1
        End If
    Next
Next

End With

Однако вышеупомянутый код не будет корректно сравнивать эти две строки - "Яблоко", "груша" но это тоже решаемо :
Код:
Option Compare Text

With ListBox2: iCountList = .ListCount - 1

For iCount = iCountList To 1 Step -1
    For iCountTemp = iCountList To 1 Step -1
        If .List(iCountTemp) < .List(iCountTemp - 1) Then
           .AddItem .List(iCountTemp), iCountTemp - 1
           .RemoveItem iCountTemp + 1
        End If
    Next
Next

End With

P.S. Конечно можно одновременно задать сравнение строк без учета регистра символов и применить макрофункцию StrComp, но IMHO это совершенно излишне. Тем не менее такая возможность существует.
Код:
Option Compare Text

With ListBox1: iCountList = .ListCount - 1

For iCount = iCountList To 1 Step -1
    For iCountTemp = iCountList To 1 Step -1
        If StrComp(.List(iCountTemp), .List(iCountTemp - 1)) = -1 Then
           .AddItem .List(iCountTemp), iCountTemp - 1
           .RemoveItem iCountTemp + 1
        End If
    Next
Next

End With
275
11 мая 2005 года
pashulka
985 / / 19.09.2004
Те, кто принципиально не хочет использовать ячейки рабочего листа для сортировки текстовых данных, могут использовать любой из двух нижеприведённых вариантов. Любой из них будет работать шустрее, чем опубликованный первоначальный вариант, так как общее количество повторений циклов ~ в два раза меньше.

Код:
With ListBox1: iCountList = .ListCount - 1

For iCount = iCountList To 1 Step -1
    For iCountTemp = 0 To iCount - 1
        If StrComp(.List(iCountTemp + 1), .List(iCountTemp), vbTextCompare) = -1 Then
           .AddItem .List(iCountTemp + 1), iCountTemp
           .RemoveItem iCountTemp + 2
         End If
    Next
Next

End With


Код:
Option Compare Text

With ListBox1: iCountList = .ListCount - 1

For iCount = iCountList To 1 Step -1
    For iCountTemp = 0 To iCount - 1
         If .List(iCountTemp + 1) < .List(iCountTemp) Then
           .AddItem .List(iCountTemp + 1), iCountTemp
           .RemoveItem iCountTemp + 2
         End If
    Next
Next

End With


Примечание :
Для увеличения быстродействия кода можно манипулировать не с элементами списка, а непосредственно с самим массивом.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог