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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.02.2012, 11:49   #11
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

На тех данных, что приведены в этой теме - никакой ошибки при вводе отсутствующих данных нет.
Вообще я бы делал иначе (конечно, зависит от задачи в целом) - если данные во втором файле в процессе не меняются, то при открытии этого файла (куда вводим) я бы читал сразу все данные из второго файла в словарь (т.е. один разе его открыли-прочитали-закрыли, потратив время на чтение данных ОДИН раз), и затем при вводе дуб/шар/
болт в D сразу из памяти (словаря) извлекал нужное значение в G. Если пары нет - можно в G не писать ничего или так и писать "данных нет, введите свою цену".

Ещё вариант (без макросов) - забить в шаблон в G формулы на комбинации ЕСЛИ(ВПР()). Т.е. для присутствующих извлекаем цену с помощью ВПР(), для новых пишем что-то своё, пустые оставляем пустыми.
Когда всё заполнено - можно заменить формулы на значения, чтоб убить ссылки на другой файл.
Для новой работы берём новый шаблон с уже забитыми формулами.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 06.02.2012, 12:01   #12
slone2179
Форумчанин
 
Аватар для slone2179
 
Регистрация: 22.04.2011
Сообщений: 155
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
На тех данных, что приведены в этой теме - никакой ошибки при вводе отсутствующих данных нет.
Ошибка выходит, если такие данные отсутствуют. Или я не так понял.

Вообще я бы делал иначе (конечно, зависит от задачи в целом) - если данные во втором файле в процессе не меняются, то при открытии этого файла (куда вводим) я бы читал сразу все данные из второго файла в словарь (т.е. один разе его открыли-прочитали-закрыли, потратив время на чтение данных ОДИН раз), и затем при вводе дуб/шар/
болт в D сразу из памяти (словаря) извлекал нужное значение в G. Если пары нет - можно в G не писать ничего или так и писать "данных нет, введите свою цену".

Ещё вариант (без макросов) - забить в шаблон в G формулы на комбинации ЕСЛИ(ВПР()). Т.е. для присутствующих извлекаем цену с помощью ВПР(), для новых пишем что-то своё, пустые оставляем пустыми.
Когда всё заполнено - можно заменить формулы на значения, чтоб убить ссылки на другой файл.
Для новой работы берём новый шаблон с уже забитыми формулами.
Ошибка выходит, если такие данные отсутствуют. Или я не так понял. Насчет словаря интересно. Был бы примерчик.
С ВПР не подходит, т.к. нужно постоянно формулу копировать вниз. Но вообще задача уже на финишной, осталось только если нет данных, то ввести свои. И конечно хотелось узнать как реализовать, чтобы вводишь начальные буквы, а в раскрывающемся списке появляются отфильтрованные данные.
Вложения
Тип файла: rar vba.rar (258.0 Кб, 13 просмотров)
slone2179 вне форума Ответить с цитированием
Старый 06.02.2012, 12:08   #13
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Ну ошибку в данном случае выдаёт "проверка ввода"
Можно вместо неё использовать комбобокс, на котром кстати можно реализовать и "чтобы вводишь начальные буквы, а в раскрывающемся списке появляются отфильтрованные данные."
Но это работа не на 5 минут (хотя пример где-то был...)

P.S.Нашёл пример - текстбокс с листбоксом. Не всё моё - но я там что-то добавлял/правил...
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 06.02.2012 в 12:16.
Hugo121 вне форума Ответить с цитированием
Старый 06.02.2012, 12:13   #14
slone2179
Форумчанин
 
Аватар для slone2179
 
Регистрация: 22.04.2011
Сообщений: 155
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Ну ошибку в данном случае выдаёт "проверка ввода"
Можно вместо неё использовать комбобокс, на котром кстати можно реализовать и "чтобы вводишь начальные буквы, а в раскрывающемся списке появляются отфильтрованные данные."
Но это работа не на 5 минут (хотя пример где-то был...)
Ну вот от этой проверки ввода бы избавиться....... За пример был бы очень благодарен.
slone2179 вне форума Ответить с цитированием
Старый 06.02.2012, 12:15   #15
slone2179
Форумчанин
 
Аватар для slone2179
 
Регистрация: 22.04.2011
Сообщений: 155
По умолчанию

Т.е. не от проверки избавиться, прошу прощения,а добавить условие на ввод своих данных.
slone2179 вне форума Ответить с цитированием
Старый 06.02.2012, 12:15   #16
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

См. выше - добавил. Вводите буквы в первый столбец.
P.S. Только что заменил вложение - предыдущее не позволяло вводить произвольные данные.
Текстбокс появляется при даблклике - при одинарном клике просто проверка ввода с возможностью ввести что угодно.
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 06.02.2012 в 12:25.
Hugo121 вне форума Ответить с цитированием
Старый 06.02.2012, 12:20   #17
slone2179
Форумчанин
 
Аватар для slone2179
 
Регистрация: 22.04.2011
Сообщений: 155
По умолчанию

Да это то, что надо по поиску. Но в этом примере получается нельзя вводить свои данные? Жалко. Можно ли добавить в условие если нет данных ну типа Empty, то вводи свои?
slone2179 вне форума Ответить с цитированием
Старый 06.02.2012, 12:36   #18
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Можно, я выше дописал комментарий.
Можно ещё в коде покопаться - вот например на скору руку так:

Код:
Private Sub TextBox1_Change()
    Dim iLastRow As Long, X As Long, i&, flag As Boolean
    iLastRow = Sheets(2).Cells(Rows.Count, 1).End(xlUp).Row
    Me.ListBox1.Clear
    If Len(Me.TextBox1) <> 0 Then
        Me.ListBox1.Visible = True
        X = 0
        With ListBox1
            For i = 1 To iLastRow
                If UCase(Sheets(2).Cells(i, 1)) Like "*" & UCase(Me.TextBox1) & "*" Then
                    .AddItem ""
                    .List(X, 1) = Sheets(2).Cells(i, 1).Value
                    X = X + 1
                Else
                    If Not flag Then
                        .AddItem ""
                        .List(X, 1) = Me.TextBox1.Text
                        X = X + 1
                        flag = True
                    End If
                End If
            Next
        End With
    Else
        Me.ListBox1.Visible = False
    End If
End Sub
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 06.02.2012, 12:44   #19
slone2179
Форумчанин
 
Аватар для slone2179
 
Регистрация: 22.04.2011
Сообщений: 155
По умолчанию

Последний вопрос. Что нужно написать If Not myF Is Nothing Then ....... возможность вводить свои данные
slone2179 вне форума Ответить с цитированием
Старый 06.02.2012, 12:46   #20
slone2179
Форумчанин
 
Аватар для slone2179
 
Регистрация: 22.04.2011
Сообщений: 155
По умолчанию

If Not myF Is Nothing Then
ThisWorkbook.Sheets(1).Range("D" & myR) = писать свое
slone2179 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа в Delphi с Excel файлами! Leximus Общие вопросы Delphi 5 02.10.2010 11:37
связи между файлами excel redfield Microsoft Office Excel 0 04.05.2010 16:22
Резервное копирование папки с файлами xls (Excel 2003) vfv Microsoft Office Excel 11 12.03.2010 17:05
Работа с файлами из Excel axell_pnz Microsoft Office Excel 4 16.11.2009 11:10
работа с excel файлами через Delphi Winss Помощь студентам 6 08.09.2007 17:54