iStrComp = StrComp("Яблоко", "Груша") ' 1
iStrComp = StrComp("Груша", "Яблоко") ' -1
Несколько вопросов по VBA в excel
1. Как создать массив из ячеек которые находяться в одной книги а прога в другой? И нада проверять открыта она или закрыта.
2.Как в ListBox записи отсортировать по алфавиту и в нем мне надо сделать ScrollBar если записи будут не влизать а в настройках ListBox я ни как найти не могу! Это вообще возможно?
3. И еще в моей форме в поле вариант нельзя ни чего вписывать надо только кнопками увеличивать число до 30(максимум) а по умолчанию стоит 1 и я что не нашел в VBA ни масок ни чего подобного как в Delphi для выполнения этой задачи. Как это сделать?
Цитата:
Originally posted by den-911
Всем привет помогите пожалйста!!!
1. Как создать массив из ячеек которые находяться в одной книги а прога в другой? И нада проверять открыта она или закрыта.
2.Как в ListBox записи отсортировать по алфавиту и в нем мне надо сделать ScrollBar если записи будут не влизать а в настройках ListBox я ни как найти не могу! Это вообще возможно?
3. И еще в моей форме в поле вариант нельзя ни чего вписывать надо только кнопками увеличивать число до 30(максимум) а по умолчанию стоит 1 и я что не нашел в VBA ни масок ни чего подобного как в Delphi для выполнения этой задачи. Как это сделать?
Всем привет помогите пожалйста!!!
1. Как создать массив из ячеек которые находяться в одной книги а прога в другой? И нада проверять открыта она или закрыта.
2.Как в ListBox записи отсортировать по алфавиту и в нем мне надо сделать ScrollBar если записи будут не влизать а в настройках ListBox я ни как найти не могу! Это вообще возможно?
3. И еще в моей форме в поле вариант нельзя ни чего вписывать надо только кнопками увеличивать число до 30(максимум) а по умолчанию стоит 1 и я что не нашел в VBA ни масок ни чего подобного как в Delphi для выполнения этой задачи. Как это сделать?
Парень я только начал учить ВБа но скажу что внешние файлы ВБа не может ипользовать
решение:
попробуй в Access! там можно разместь в нутрь одного файла и картинки и музыку и др... ТЫ ПОНЯЛ...
X)- Я делаю это не для удовольствия а т.к. сильно надо, и нуна сделать в экселе до среды!!! :!!!: ;)
- Извлекаете нужное количество значений из ячеек другой рабочей книги. Для этого можно воспользоваться самыми обычными ссылками.
- Присваиваете значениям этого диапазона - значения этого же диапазона, например : Range("A1:C10").Value = Range("A1:C10").Value
- Сортируете диапазон ячеек, который содержит извлечённые значения.
- Связываете ListBox с этим диапазоном, посредством использования свойства RowSource или присваиваете свойству List значения диапазона ячеек.
2) Если записи будут превышать размер ListBox, то вертикальная полоса прокрутки появится автоматически.
3a) Для того чтобы запретить ввод в TextBox достаточно установить свойство Locked=True
3б) Что касается счётчика SpinButton, то у него есть два свойства Min & Max, которые позволят Вам установить нужные границы.
Я вроде как разобрался со всеми ранее возикшими вопросами но теперь у меня проблема по серьезней! Мне надо отсортировать массив который состоит из букв! Как это сделать не понятно? у меня есть процедура сортировки но она работает только если в массив состит из цифр... И нельзя сортировать в книге а потом обратно засовывать в массив!
Код:
А можно немного по подробней
У меня просто создается динамический массив который состоит из 3-х записей и они String в каждой переменной по предложению(например: B]Непрерывность функции в точке) и по первой букве мне их надо отсортировать по алфовиту.
А можно ли сортировать в ListBox? у меня массив туда все выводит! и мне главное чтоб там было отсортированно!
http://algolist.manual.ru/
Что касается самого ListBox, то насколько я знаю свойства отвечающее за сортировку элементов в этом элементе управления нет (VBA). Однако можно добавлять/удалять элементы можно, например :
Примечание :
- Для корректной работы примера необходимо наличие как минимум трёх элементов списка.
- Не забывайте, что нумерация элементов ListBox/ComboBox начинается с нуля.
Ну если исходить из Ваших слов, то алгоритм сортировки Вам уже известен, а значит нужно "сравнивать" не числовые значения, а строковые. Если нужно более подробно, то можете посмотреть вот здесь
Что касается самого ListBox, то насколько я знаю свойства отвечающее за сортировку элементов в этом элементе управления нет (VBA). Однако можно добавлять/удалять элементы можно, например :
Код:
Private Sub CommandButton1_Click()
ListBox1.AddItem ListBox1.List(2), 0
ListBox1.RemoveItem 3
End Sub
ListBox1.AddItem ListBox1.List(2), 0
ListBox1.RemoveItem 3
End Sub
Примечание :
- Для корректной работы примера необходимо наличие как минимум трёх элементов списка.
- Не забывайте, что нумерация элементов ListBox/ComboBox начинается с нуля.
Если не сложно не могли бы вы помочь отсортировать массив по алфовиту в 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
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
Код:
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
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
Огромное Спасибо:D :!!!: У меня теперь все работает ну ура!!!
Код:
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
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
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
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
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
Код:
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
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
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
Примечание :
Для увеличения быстродействия кода можно манипулировать не с элементами списка, а непосредственно с самим массивом.