Страницы: 1
RSS
форма Ввода / Редактирования / Удаления данных, редактирование и удаление данных из базы данных
 
Доброго времени суток. Предположим есть форма ввода данных для листа "БД" в приложенном файле для которой сделана форма ввода данных на листе "Таблица", т.к. Лист "БД" будет защищен и скрыт, возникла необходимость редактировать данные и удалять их при помощи вызова формы "ввода", но без отображения Листа "БД" (Все данные с листа будут при помощи формул перетаскиваться в Лист "Таблица"). То есть если в форме "ввода" ввести выбрать допустим Склад №3 и Молоко и Ввести количество 500., затем при необходимости удалить или редактировать число (такой же комбинаций) также выбрать  Склад №3 и Молоко и корректировать кол-во) . Заранее спасибо.
Изменено: Ov198 - 19.09.2018 15:11:27
 
Очень грамотное решение. Только не понял в чём именно проблема?
Не стреляйте в тапера - он играет как может.
 
Ts.Soft, проблема в том что не знаю как редактировать занесенные ранее данные без отражения Листа "БД" (только по форме ввода). То есть оживить Кнопки "Редактировать" и Удалить (удалить нужно будет целую строку в "БД", а если это трудно удалить целую строку то хотя б значение чтобы формулы не считали ее) Вы случайно не знаете?! Спасибо за участие.
 
В принципе ничего особо сложного нет.
Создаёте форму и выбираете просмотр кода

Потом выбираете созданный объект (кнопка и т.п.)

Затем выбираете событие для выбранного объекта и получаете процедуру которая будет обрабатывать это событие.

Ну а там уже пишите нужный код который выполнит нужные действия на нужном листе.
Изменено: Ts.Soft - 19.09.2018 15:54:00
Не стреляйте в тапера - он играет как может.
 
А макрорекордером пробовали записать удаление строки? Получите такой код:
Код
Rows("13:13").Select
Selection.Delete Shift:=xlUp
Потом его желательно подкорректировать:
Код
Rows("13:13").Delete Shift:=xlUp
Ну а чтобы этот код при вызове из формы удалил строку не на активном, а на нужном скрытом листе необходимо явно это указать:
Код
Sheets("База").Rows("13:13").Delete Shift:=xlUp
Не стреляйте в тапера - он играет как может.
 
Ts.Soft, я видимо не так сформулировал нужду, нужен "макрос кода", который будет возвращать количество из Листа "БД" (получается из базы данных) в диалоговое окно для дальнейшего удаления или корректировки. Спасибо = )  
 
RAN, и Вам спасибо =))
 
Странно, что операционист-корректировщик должен работать, не видя объекта для корректировки!
Чем вызвана такая Супер-Секретность?!
Даже в Банках операционисты с документами богатых клиентов (в БД) работают в режиме реального времени.
Какой-то очень уж "геморройный" у Вас алгоритм!  :D
 
Ov198, Мотя права в той части, что нелепо редактировать то, чего не видно - количество. См. пример, в котором количество найденной позиции отображается. Проверку на ввод в ТекстБокс НЕ числа не делал.
 
Мотя, для "порядку" (с) . Спасибо за советы, буду думать. Хотя я б сказал что видно в общей таблице.
 
Юрий М, спасибо огромное все отлично работает. Единственное вопрос возникает с возможностью редактирования (то есть замены значения на новое по тем же критериям не удаляя всю строку, а лишь замена цифры. Предполагается что значения будет одно для каждого уникального набора условий). Подскажите это возможно?! Если поможете с кодом то буду очень признателен.  
 
Это реализовано, только я опять забыл точку ))
Замените процедуру:
Код
Private Sub CommandButton2_Click()
    With Sheets("БД")
        .Cells(iRow, 3) = CDbl(Me.TextBox1)
    End With
End Sub


P.S. Строки 12:16 на первом листе можно удалить: дублировал для отладки.
 
Юрий М, спасибо еще раз. Выручили. Буду пробовать.
 
Юрий М,  добрый день. Очень извиняюсь что поднимаю снова эту тему, Вы мне очень помогли, но есть один нюанс с опцией удаления. К сожалению он удаляет не только то что выбрано в UserForm но и еще одну строку, если повторно нажать удаление. Пример во вложений. (Это файл с которым Вы мне помогли Выше), почему т тогда не заметил, а сейчас собрал макрос в общем файле и заметил что немного некорректно работает. Если удобно, не могли бы Вы подсказать как быть. А Если Вы б подсказали как обратиться вместо диапазона в коде макроса к умной таблице на старнице "БД" было б просто шикарно. Спасибо. Очень Вам признателен.
Изменено: Ov198 - 22.10.2018 13:23:57
 
Цитата
Ov198 написал:
К сожалению он удаляет не только то что выбрано в UserForm но и еще одну строку, если повторно нажать удаление.
Опишите последовательность действий, чтобы я мог получить эту ошибку.
 
Юрий М, После вызова формы - выставляем параметры   (склад: №1 , товар: фрукты) макрос возвращает кол-во 100. Затем нажимаем удалить, чтобы он удалить 100. Макрос удаляет 100, но если еще раз нажать то он удаляет еще и 600 из овощей со склада №3. Если не будет трудно подскажите пож-та еще и с обращением к умной таблице в этих процедурах. Я в поисковике пытался через (часть кода), но выдает ошибку:
Код
Option Explicit

Dim ShSklad As Worksheet
Dim SkladListObj As ListObject

Dim Sklad As String, Tovar As String, iRow As Long


Sub Finder()
Dim i As Long, LastRow As Long, Flag As Boolean

Set ShSklad = ThisWorkbook.Worksheets("БД")
Set SkladListObj = ShSklad.ListObjects("Таблица1")


    If Sklad = "" Or Tovar = "" Then Exit Sub
    With SkladListObj
        LastRow = .Cells(Rows.Count, 1).End(xlUp).Row
        For i = 2 To LastRow
            Debug.Print .Cells(i, 1)
            If .Cells(i, 1) = Sklad Then
                Debug.Print .Cells(i, 2)
                If .Cells(i, 2) = Tovar Then
                    Me.TextBox1 = .Cells(i, 3)
                    iRow = i
                    Flag = True
                    Exit For
                End If
            End If
        Next
    End With
    If Flag = False Then Me.TextBox1 = "Не найдено"
End Sub
Изменено: Ov198 - 22.10.2018 14:12:14
 
Думаю, что самый простой способ - это добавить переменную и проверять её состояние. Перед самой первой процедурой добавьте:
Код
Dim Sklad As String, Tovar As String, iRow As Long, Flag As Boolean
И поменяйте процедуру кнопки удаления:
Код
Private Sub CommandButton3_Click()
    If Flag = False Then
        Sheets("БД").Rows(iRow).Delete
        Flag = True
    Else
        Exit Sub
    End If
End Sub
Про проблему с умной таблицей не понял. Перебирайте в ней строки, как в обычном диапазоне.
 
Спасибо, Юрий. Сейчас буду пробовать. Я так понял макрос ведь ищет по всему диапазону, так что проблемы как таковой и нет. Хотел обратиться к диапазону как к умной таблице (она просто есть на стр. "БД", умная таблица "Таблица1"., но почему т не выходит в этом коде или я неправильно обращаюсь. Но я так понимаю это уже тема для другого вопроса и лучше ее тут не обсуждать (просто как бы пример один и думал спросит сразу чтобы тем не создавать много). Не смертельный вопрос, буду думать сам почему не работает обращение к умной таблице. Еще раз огромное спасибо.  
 
Цитата
Ov198 написал: я так понимаю это уже тема для другого вопроса и лучше ее тут не обсуждать
Совершенно верно.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
Страницы: 1
Наверх