Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.07.2011, 10:23   #21
СтаниславАВ
Форумчанин
 
Регистрация: 10.10.2010
Сообщений: 107
По умолчанию

Проблемы с макросом DimFirm:
Цитата:
'Список фирм из базы (составляем и сортируем)
Public DimFirm() As String 'массив с названиями фирм
Option Explicit
'компонуем таблицу из базы данных адресов
Public Sub CreateDim()
Call FillDim 'заполнение таблицы фирмами из базы
Call SortDim 'сортируем таблицу
End Sub
'заполнение таблицы фирмами из базы
Private Sub FillDim()
Dim i As Integer 'строка очередной фирмы
Dim j As Byte 'столбец очередной фирмы
Dim kol As Integer 'количество адресов
With shHome
For i = 1 To rowH 'просматриваем все используемые ячейки
For j = 1 To colH
If Not IsEmpty(.Cells(i, 3)) Then 'если ячейка не пустая - заносим в таблицу
kol = kol + 1 'количество найденных фирм увеличиваем на 1
ReDim Preserve DimFirm(1 To kol) 'добавляем ячейку
On Error Resume Next
DimFirm(kol) = shHome.Cells(i, 3).Comment.Text 'переносим название фирмы из комментария в таблицу
End If
Next
Next
End With
End Sub
'сортируем таблицу (пузырьковый метод)
Private Sub SortDim()
Dim kol As Byte: kol = UBound(DimFirm) 'размерность массива
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim min As String
Dim buf As String
If kol >= 1 Then 'а вдруг массив только из 1-й ячейки!?
For i = 1 To kol - 1 'от 1-го до предпоследнего
min = DimFirm(i + 1): k = i + 1
For j = i + 1 To kol 'от i-го до последнего
If DimFirm(j) < min Then 'если нашли меньше
min = DimFirm(j) 'запоминаем значение
k = j 'запоминаем позицию
End If
Next
If min < DimFirm(i) Then 'если нашли меньше - меняем местами
buf = DimFirm(i): DimFirm(i) = min: DimFirm(k) = buf
End If
Next
End If
End Sub
СтаниславАВ вне форума Ответить с цитированием
Старый 24.07.2011, 10:24   #22
СтаниславАВ
Форумчанин
 
Регистрация: 10.10.2010
Сообщений: 107
По умолчанию

Код:
'Список фирм из базы (составляем и сортируем)
Public DimFirm() As String 'массив с названиями фирм
Option Explicit
'компонуем таблицу из базы данных адресов
Public Sub CreateDim()
   Call FillDim 'заполнение таблицы фирмами из базы
   Call SortDim 'сортируем таблицу
End Sub
'заполнение таблицы фирмами из базы
Private Sub FillDim()
   Dim i As Integer 'строка очередной фирмы
   Dim j As Byte 'столбец очередной фирмы
   Dim kol As Integer 'количество адресов
   With shHome
      For i = 1 To rowH 'просматриваем все используемые ячейки
         For j = 1 To colH
            If Not IsEmpty(.Cells(i, 3)) Then 'если ячейка не пустая - заносим в таблицу
                kol = kol + 1 'количество найденных фирм увеличиваем на 1
                ReDim Preserve DimFirm(1 To kol) 'добавляем ячейку
                On Error Resume Next
                DimFirm(kol) = shHome.Cells(i, 3).Comment.Text 'переносим название фирмы из комментария в таблицу
            End If
         Next
      Next
   End With
End Sub
'сортируем таблицу (пузырьковый метод)
Private Sub SortDim()
   Dim kol As Byte: kol = UBound(DimFirm) 'размерность массива
   Dim i As Integer
   Dim j As Integer
   Dim k As Integer
   Dim min As String
   Dim buf As String
   If kol >= 1 Then 'а вдруг массив только из 1-й ячейки!?
      For i = 1 To kol - 1 'от 1-го до предпоследнего
         min = DimFirm(i + 1): k = i + 1
         For j = i + 1 To kol 'от i-го до последнего
            If DimFirm(j) < min Then 'если нашли меньше
               min = DimFirm(j) 'запоминаем значение
               k = j 'запоминаем позицию
            End If
         Next
         If min < DimFirm(i) Then 'если нашли меньше - меняем местами
            buf = DimFirm(i): DimFirm(i) = min: DimFirm(k) = buf
         End If
      Next
   End If
End Sub
Так лучше будет
СтаниславАВ вне форума Ответить с цитированием
Старый 24.07.2011, 10:27   #23
kuklp
Участник клуба
 
Регистрация: 02.05.2010
Сообщений: 1,390
По умолчанию

Сергей писал:
"1 DimFirm имя модуля и одновременно имя переменной-красная карточка."
Переименуйте либо одно - либо другое.
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728
kuklp вне форума Ответить с цитированием
Старый 24.07.2011, 10:28   #24
СтаниславАВ
Форумчанин
 
Регистрация: 10.10.2010
Сообщений: 107
По умолчанию

А вот форма вывода:
Код:
'окно для вставки ЖКУ
Option Explicit
'"Стереть всё" - очищаем новый список
Private Sub AllLeft_Click()
   ListBox2.Clear 'очищаем список с выбранными фирмами
   Вставка_ЖКУ.Caption = ListBox2.ListCount 'в заголовке диалога количество выбранных фирм - 0!
End Sub
'"Добавить всё" - перенести все фирмы в новый список
Private Sub AllRight_Click()
   If Not IsEmpty(shHome) Then
      If Not Dublicate Then ListBox2.Clear 'очищаем список выбранных фирм если запрещено дублирование адресов
      Dim i As Byte 'порядковый номер фирмы из основного списка
      For i = 0 To ListBox1.ListCount - 1 'от первой и до последней фирмы в основном списке
         ListBox2.AddItem ListBox1.List(i) 'добавляем её в список выбранных фирм
      Next
      Вставка_ЖКУ.Caption = ListBox2.ListCount 'в заголовке диалога количество выбранных фирм
   End If
End Sub
'"Отмена" - ничего не делаем, выгружаем форму
Private Sub Cancel_Click()
   Unload Me 'выгружаем диалог
   Call DeletePublicVars 'уничтожаем переменные уровня проекта
End Sub

Private Sub Label1_Click()

End Sub

'"Светим" адрес выбранной фирмы (среди выбранных адресов)
Private Sub ListBox1_Click()
   Call SvetimAdres(ListBox1.Value)
End Sub
'щелчок на основном (левом) списке - перенос выбранной фирмы в новый (правый) список
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
   Call ToRight_Click 'добавляем выбранную фирму в новый список
End Sub
'"Светим" адрес выбранной фирмы (среди имеющихся алресов)
Private Sub ListBox2_Click()
      Call SvetimAdres(ListBox2.Value)
End Sub
'щелчок на новом (левом) списке - удаление из него выбранной фирмы
Private Sub ListBox2_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
   Call ToLeft_Click 'удаляем из нового списка выделенную фирму
End Sub
'"ОК" - готовим к печати выбранные адреса
Private Sub OK_Click()
   If ListBox2.ListCount <> 0 Then
      Call CreateStick 'если что-то выбрали - переносим адреса
   Else: Exit Sub 'если ничего не выбрали - выход из процедуры
   End If
   Unload Me 'выгружаю диалог
   'и выделяем последнюю непустую ячейку
   Dim RC As Integer 'строка последней заполненной ячейки
   RC = ListBox2.ListCount \ 3
   If ListBox2.ListCount Mod 3 > 0 Then RC = RC + 1
   
    If Intersect(ActiveCell, Range("Расходы[Код]")) Is Nothing Then
    MsgBox "Выделите ячейку в столбце Код", 64: Exit Sub
   
   Dim cc As Byte 'столбец последней заполненной ячейки
   With shNew
      For cc = 1 To 3
         If IsEmpty(.Cells(RC, cc + 1)) Then
            .Cells(RC, cc).Select
            Exit For
         End If
      Next
   End With
End Sub

Private Sub SpinButton1_Change()
Label4.Caption = Date + SpinButton1.Value
End Sub

Private Sub SpinButton2_Change()
Label5.Caption = Date + SpinButton2.Value
End Sub

'"Добавить" - добавляем выбранную фирму в новый список
Private Sub ToRight_Click()
   If ListBox1.ListIndex = -1 Then Exit Sub 'выход если ни одна фирма не выбрана
   Dim i As Byte 'очередная новая выбранная фирма
   If Not Dublicate Then 'если запрещено дублирование, то надо посмотреть нет ли уже этой фирмы в новом списке
      If ListBox2.ListCount > 0 Then 'если новый список уже не пуст
         For i = 0 To ListBox2.ListCount - 1 'просматриваем его
            If ListBox1.Value = ListBox2.List(i) Then 'если такая фирма уже выбрана
               Exit Sub 'то не добавляем её в новый список
            End If
         Next
      End If
   End If
   ListBox2.AddItem ListBox1.Value 'добавляем выбранную фирму в новый список
   Вставка_ЖКУ.Caption = ListBox2.ListCount 'в заголовке диалога количество выбранных фирм
End Sub
'"Стереть" - удаляем из нового списка выделенную фирму
Private Sub ToLeft_Click()
   If ListBox2.ListIndex = -1 Then Exit Sub 'если ничего не выбрано то выход
   ListBox2.RemoveItem ListBox2.ListIndex 'удаляем выбранную фирму
   Вставка_ЖКУ.Caption = ListBox2.ListCount 'в заголовке диалога количество выбранных фирм
End Sub
'при открытии формы - заполнение левого списка фирмами из базы
'(если в базе хоть что-то есть)
Private Sub UserForm_Activate()
   If Not IsEmpty(shHome) Then Call FillLeft '"заливаем" список фирм
End Sub
'Дублирование разрешено (запрещено)
Private Function Dublicate() As Boolean
   Dublicate = CheckBox1.Value
End Function
'заполнение левого списка фирмами из базы
Private Sub FillLeft()
   Call CreateDim 'составить отсортированный список фирм
   Вставка_ЖКУ.ListBox1.List = DimFirm 'загрузить список в диалог
End Sub
СтаниславАВ вне форума Ответить с цитированием
Старый 24.07.2011, 10:31   #25
СтаниславАВ
Форумчанин
 
Регистрация: 10.10.2010
Сообщений: 107
По умолчанию

Удалил .Comment из макроса DimFirm
СтаниславАВ вне форума Ответить с цитированием
Старый 24.07.2011, 10:39   #26
СтаниславАВ
Форумчанин
 
Регистрация: 10.10.2010
Сообщений: 107
По умолчанию

Попрежнему ошибка в макросе DimFirm
Вложения
Тип файла: rar 2011 Бюджет1.rar (114.9 Кб, 7 просмотров)
СтаниславАВ вне форума Ответить с цитированием
Старый 24.07.2011, 10:44   #27
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Вот как вам помогать,если вы не делаете никаких выводов.Посмотрите,как я переименовал модуль.Причем здесь коменты.
Я бы советовал начать с нуля.Больше смотреть не буду
Вложения
Тип файла: rar 2011 Бюджет1.rar (105.5 Кб, 16 просмотров)
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 24.07.2011, 10:51   #28
СтаниславАВ
Форумчанин
 
Регистрация: 10.10.2010
Сообщений: 107
По умолчанию

Цитата:
Сообщение от doober Посмотреть сообщение
Вот как вам помогать,если вы не делаете никаких выводов.Посмотрите,как я переименовал модуль.Причем здесь коменты.
Я бы советовал начать с нуля.Больше смотреть не буду
Прошу прощения за назойливость. Просто за образец брал чужой макрос. И сам в нём разбирался.
СтаниславАВ вне форума Ответить с цитированием
Старый 24.07.2011, 10:53   #29
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Посмотрите здесь,возможно и пригодится
Молоток добавляет данные.Надо еще и дату выбрать
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 24.07.2011, 10:57   #30
СтаниславАВ
Форумчанин
 
Регистрация: 10.10.2010
Сообщений: 107
По умолчанию

Цитата:
Сообщение от doober Посмотреть сообщение
Посмотрите здесь,возможно и пригодится
Молоток добавляет данные.Надо еще и дату выбрать
Спасибо. Попрактикуюсь. А ссылку на макрос Красный_свет или DimFirm указывать?
СтаниславАВ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод из ListBox в Мемо alekstav Общие вопросы Delphi 11 25.08.2014 22:33
Вывод столбца из таблицы в ListBox хомякec БД в Delphi 7 03.05.2011 19:16
Вывод системных каталогов в ListBox whiskey Общие вопросы .NET 1 22.12.2010 09:28
Вывод построчно в listbox! alexey_nv86 Microsoft Office Excel 11 07.11.2010 16:04
Вывод изображений из списка ListBox ChEaTeR-abc Помощь студентам 6 13.07.2010 16:55