Страницы: 1
RSS
Добавление номера машины из одной таблицы в одну из двух новых
 
Здравствуйте и с Новым годом всех! Постараюсь объяснить понятно свою задачу. У меня есть файл, на листе 2 есть две таблицы, куда заносятся номера машин в зависимости от того, к какой из двух компаний относится машина. Здесь я все заполняю вручную и ставлю + или -, это значит выписался ли пропуск на машину или нет.
Теперь мне нужно сделать самое сложное. На первом листе я ввожу номер машины, нажимаю на кнопку и нужно чтобы макрос проверял к какой из двух таблиц относится номер и заносил в одну из двух новых, которые на первом листе. Я написал простую функцию на листе 1 в ячейке AN1 и AN2 (но для макроса по идее можно оставить и одну из этих строк) и примерно понимаю как должен работать макрос (я ввожу номер, он проверяет, стоит ли + на листе 2 (если нет, то макрос останавливается), потом + или - стоит в ячейке AN1 и разносит по соответствующим таблицам), но мне не хватает знаний и я не понимаю как сделать так, чтобы он заполнял только в пустые ячейки, а не начинал с уже заполненных. Что посоветуете почитать?
 
С наступившим!
Самое сложное - понять нафига в этих таблицах фигурируют эти + - и что нам с этим делать.
 
Когда я заношу на сайте номера машин, они не все могут занестись по некоторым причинам и это нужно будет сделать через время. Поэтому я ставлю +, если машина занеслась в базу и - если нет.
 
Ну а макрос что должен делать - если "+" как у всех в примере то нужно копировать номер в последнюю свободную столбца, а если "-" то игнорировать?
Или "-" на втором листе вообще быть не может, и нужно смотреть на первый лист или только на плюсы во втором?
Изменено: Hugo - 01.01.2021 19:38:14
 
Hugo, второй лист нужен больше для меня. Смотрите мой порядок действий. Мне присылают номера машин, я заношу их в базу на сайте для пропусков, потом заношу их к себе на лист 2 (если все занеслись успешно, то везде будут +. Если какой-то номер занести не получилось то ставится -). Затем я на сайте отслеживаю воспользовался ли водитель машины пропуском и когда. После этого я на 1 листе пишу номер машины и макрос должен проверить из какой из 2х таблиц на втором листе эта машина и занести в одну из 2х таблиц на первом листе (в зависимости от того из какой машины компания) ну и бонусом хотелось бы прикрутить штуку, которая проверяет стоит ли + на втором листе, а если нет, то не дает занести машину на первом листе. Надеюсь понятно
 
Т.е. макрос должен работать так:
по событию изменения ячейки B1 первого листа
искать номер на втором листе,
если нашёл, то проверяем есть ли правее +,
если есть то смотрим в каком столбце нашли,
искать достаточно до первого совпадения.
Если всё сошлось, то ищем последнюю свободную строку в соотв. столбце первого листа
и пишем туда этот номер.
Так?
 
Hugo,да все так
 
Код в модуль первого листа:
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address(0, 0) <> "B1" Then Exit Sub
    Dim c As Range, k As Long, l As Long
    With Worksheets(2).UsedRange
        Set c = .Find(Target, LookIn:=xlValues, LookAt:=xlWhole)
        If Not c Is Nothing Then
            If c.Next = "+" Then k = c.Column
        End If
    End With
    Select Case k
    Case 1
        Cells(Rows.Count, 7).End(xlUp)(2) = Target
    Case 7
        Cells(Rows.Count, 15).End(xlUp)(2) = Target
    Case Else
        MsgBox "Нет такой машины на сайте!", vbCritical
    End Select
End Sub

Ну и можно далее наращивать - нужно ли проверять на дубли, что делать с несуществующими на сайте номерами, может их нужно куда-то в другой лист писать, ну и т.д.
Изменено: Hugo - 01.01.2021 21:44:22
 
Hugo, благодарю Вас
 
Hugo, а подскажите последний вопрос... удален
 
Нет там никаких энтеров, там обрабатывается событие изменения ячейки.
Теперь уже сами допиливайте, нужно было сразу всю задачу рассказывать.
А я спать.
 
И зачем вопрос удалили? С утра времени вагон :)
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim c As Range, k As Long, l As Long

    If Not Intersect(Target, Range("B1:B4")) Is Nothing Then
        With Worksheets(2).UsedRange
            Set c = .Find(Range("B1").Value, LookIn:=xlValues, LookAt:=xlWhole)
            If Not c Is Nothing Then
                If c.Next = "+" Then k = c.Column
            End If
        End With
        Select Case k
        Case 1
            Cells(Rows.Count, 7).End(xlUp)(2).Resize(, 4) = Application.Transpose(Range("B1:B4"))
        Case 7
            Cells(Rows.Count, 15).End(xlUp)(2).Resize(, 4) = Application.Transpose(Range("B1:B4"))
        Case Else
            MsgBox "Нет такой машины на сайте", vbCritical
        End Select
    End If
End Sub
 
Hugo,  спасибо большое за помощь!
только я немного подправил Ваш код, чтобы все переносилось в таблицу один раз только после того как я заполню ячейку B4. А так спасибо еще раз
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim c As Range, k As Long, l As Long
 
    If Not Intersect(Target, Range("B4")) Is Nothing Then
        With Worksheets(2).UsedRange
            Set c = .Find(Range("B1").Value, LookIn:=xlValues, LookAt:=xlWhole)
            If Not c Is Nothing Then
                If c.Next = "+" Then k = c.Column
            End If
        End With
        Select Case k
        Case 1
            Cells(Rows.Count, 7).End(xlUp)(2).Resize(, 4) = Application.Transpose(Range("B1:B4"))
        Case 7
            Cells(Rows.Count, 15).End(xlUp)(2).Resize(, 4) = Application.Transpose(Range("B1:B4"))
        Case Else
            MsgBox "Нет такой машины на сайте", vbCritical
        End Select
    End If
End Sub
 
Ну тогда можно было в первый код дописать только эти ресайз с транспонированием и всё.
Страницы: 1
Наверх