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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.12.2014, 09:54   #1
Евгений Таб
Форумчанин
 
Аватар для Евгений Таб
 
Регистрация: 09.08.2013
Сообщений: 202
По умолчанию Уведомление если данные уже содержатся

Коллеги, доброе утро!

Необходим инструмент для уведомления пользователя при срабатывании коммандбаттон.

Суть :

Нажимаем GO и перед нами строка, в которую нужно внести цифры, через точку(могут быть и буквы) и может быть просто одно значение без точки.
После введения нажимаем занести в отчет в данные улетают в столб А.

Вопрос в следующем.

Если я ввожу число которое уже есть в диапазоне 1 столба, например 6678658, то он выдаст UserForm с уведомлением что данные уже существуют, поменяйте данные и не даст сработать коду.

Спасибо!
Вложения
Тип файла: zip ПРИМЕРЧИК.zip (16.4 Кб, 12 просмотров)
Евгений Таб вне форума Ответить с цитированием
Старый 19.12.2014, 05:30   #2
Евгений Таб
Форумчанин
 
Аватар для Евгений Таб
 
Регистрация: 09.08.2013
Сообщений: 202
По умолчанию

Пробывал через расцепить данные, но выдает ошибки ((((
Евгений Таб вне форума Ответить с цитированием
Старый 19.12.2014, 06:13   #3
maksim_serg
Форумчанин
 
Аватар для maksim_serg
 
Регистрация: 25.03.2010
Сообщений: 417
По умолчанию

код в форме на кнопке:
Код:
Private Sub CommandButton1_Click()
    Dim m
    m = WorksheetFunction.Transpose(Range(Cells(1, 1), Sheets(1).Cells(Rows.Count, 1).End(xlUp)).Value)
    If InStr(1, "%" & Strings.Join(m, "%") & "%", "%" & Me.TextBox1 & "%") > 0 Then
            MsgBox "Значение """ & Me.TextBox1 & """ уже существует" & vbNewLine & _
                    "он выдаст UserForm с уведомлением что данные уже существуют, поменяйте данные и не даст сработать коду"
        Else
            Sheets(1).Cells(Rows.Count, 1).End(xlUp).Offset(1) = Me.TextBox1
    End If
    
End Sub
maksim_serg вне форума Ответить с цитированием
Старый 19.12.2014, 06:30   #4
Евгений Таб
Форумчанин
 
Аватар для Евгений Таб
 
Регистрация: 09.08.2013
Сообщений: 202
По умолчанию

Цитата:
Сообщение от maksim_serg Посмотреть сообщение
код в форме на кнопке:
Код:
Private Sub CommandButton1_Click()
    Dim m
    m = WorksheetFunction.Transpose(Range(Cells(1, 1), Sheets(1).Cells(Rows.Count, 1).End(xlUp)).Value)
    If InStr(1, "%" & Strings.Join(m, "%") & "%", "%" & Me.TextBox1 & "%") > 0 Then
            MsgBox "Значение """ & Me.TextBox1 & """ уже существует" & vbNewLine & _
                    "он выдаст UserForm с уведомлением что данные уже существуют, поменяйте данные и не даст сработать коду"
        Else
            Sheets(1).Cells(Rows.Count, 1).End(xlUp).Offset(1) = Me.TextBox1
    End If
    
End Sub

Хм, он спокойно добавил
4
343
23423

и не уведомил

Он уведомляет если это число просто стоит в ячейке а не через точку.
Евгений Таб вне форума Ответить с цитированием
Старый 19.12.2014, 06:35   #5
maksim_serg
Форумчанин
 
Аватар для maksim_serg
 
Регистрация: 25.03.2010
Сообщений: 417
По умолчанию

я плохо понимаю что вам нужно
колдуйте с этой строкой:
Код:
 If InStr(1, "%" & Strings.Join(m, "%") & "%", "%" & Me.TextBox1 & "%") > 0 Then
например так:
Код:
If InStr(1, Strings.Join(m, "%"), Me.TextBox1) > 0 Then
или так:
Код:
If InStr(1, Strings.Join(m, "%"),"." &  Me.TextBox1 & ".") > 0 Then
или даже вот так:
Код:
If InStr(1, "." & Strings.Join(m, ".") & ".","." &  Me.TextBox1 & ".") > 0 Then

Последний раз редактировалось maksim_serg; 19.12.2014 в 06:37.
maksim_serg вне форума Ответить с цитированием
Старый 19.12.2014, 11:23   #6
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

есть предположение, что достаточно такого варианта
Код:
If InStr(Join(m), Me.TextBox1) > 0 Then
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 19.12.2014, 12:29   #7
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Думаю как-то так - но "вылизывать" некогда...
Код:
Private Sub TextBox1_Change()
    If Right(Me.TextBox1, 1) = "." Then
        For Each el In Split(Me.TextBox1, ".")
            If prov(el) Then Me.TextBox1 = Left(Me.TextBox1, Len(Me.TextBox1) - 1)
        Next
    End If
End Sub

Private Sub CommandButton1_Click()
    Dim arr
    arr = Split(Me.TextBox1, ".")

    If Not prov(arr(UBound(arr))) Then Sheets(1).Cells(Rows.Count, 1).End(xlUp).Offset(1) = Me.TextBox1

End Sub

Function prov(s) As Boolean
    Dim m
    m = WorksheetFunction.Transpose(Range(Cells(1, 1), Sheets(1).Cells(Rows.Count, 1).End(xlUp)).Value)
    If InStr(1, "%" & Replace(Strings.Join(m, "%"), ".", "%") & "%", "%" & s & "%") > 0 Then
        MsgBox "Значение """ & s & """ уже существует" & vbNewLine & _
               "он выдаст UserForm с уведомлением что данные уже существуют, поменяйте данные и не даст сработать коду"
        prov = True
    End If
End Function
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 19.12.2014, 12:41   #8
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Цитата:
но "вылизывать" некогда...
ну, начинается...
Игорь, и что теперь? Евгений Таб должен все за тебя доделывать?
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 19.12.2014, 12:48   #9
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Ага
А можно и не доделывать - оно и так работает.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 19.12.2014, 13:39   #10
Евгений Таб
Форумчанин
 
Аватар для Евгений Таб
 
Регистрация: 09.08.2013
Сообщений: 202
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Ага
А можно и не доделывать - оно и так работает.
Гранмерси

Решил поправить код под столбец H, чето он ругается на меня.
Я бы даже сказал матерится

Что нужно отредактировать что переписать под столб H.

Спасибо!
Евгений Таб вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дан двумерный массив, в котором содержатся латинские маленькие буквы, затем вводится предложение с клавиатуры, если из элементов м Richik123 Паскаль, Turbo Pascal, PascalABC.NET 8 22.04.2012 17:34
Описать переменную "круг", в которой содержатся все данные для построения круга в декартовой системе координат (на паскале) Софи12 Помощь студентам 2 15.02.2012 22:03
если запись в реестре уже есть bymyny Общие вопросы Delphi 1 28.10.2010 19:20
Запрет запуска программы на VBA в случае если Excel уже открыт kovalevskivf Microsoft Office Excel 4 01.09.2009 11:22
Как передать данные уже в запущеную программу dr.Chas Общие вопросы Delphi 15 18.06.2008 22:16