Страницы: 1
RSS
Не вставляет значения, введенные в InputBox, после смещения диапазона
 
Добрый день, помогите разобраться пожалуйста. Смысл макроса в чем. При нажатии на кнопку, он переходит на лист с привозом конструкций и, если есть введенные значения, то он создает новую колонку и выдает сообщение о вводе, если введенных значений нет, он так же выдает сообщение о вводе. Но, Если в первой колонке все работает как надо, то во всех остальных созданных, макрос не вставляет значения введенные в InputBox. Возможно это из-за того, что в переменную заложен диапазон и после смещения что-то нарушается и макрос больше не хочет записывать в смещенный диапазон.
 
а можно просто коротко объяснить, что нужно сделать и когда и в каком виде, и что нужно сделать если иначе? показав результат визуально ручками
Изменено: Mershik - 27.12.2020 11:28:28
Не бойтесь совершенства. Вам его не достичь.
 
При проходе цикла, если в столбце нет значений, то он корректно вводит InputBox в шапку, а если создается новый столбец, то в его шапку макрос уже не вставляет значения из InputBox. Я думаю что это из-за того, что переменная a смещается.

Код
Sub Приход_на_привоз()

Application.ScreenUpdating = False

Лист2.Visible = True
Лист2.Activate
    On Error Resume Next
    Лист2.ShowAllData
    On Error GoTo 0

'Автоматическое добавление колонок
Dim s As Integer
Dim k, l, d As Range
s = 2
Set d = Range("L3:L223")
Set k = Range("L224")
Set l = Columns("L:M")
Set a = Range("L1")

If k <> 0 Then
    Set k = k.Offset(, s)
        Do While k <> 0
            Set k = k.Offset(, s)
            s = s + 2
        Loop
  
    l.Copy
    Set l = l.Offset(, s)
    l.Select
    ActiveSheet.Paste
    Set d = d.Offset(, s)
    d.Select
    Selection.ClearContents
    Set k = k.Offset(, s)
    Set a = a.Offset(, s)
    a.Select
    Selection.ClearContents

End If

i = "ДВ № " & InputBox("Введите номер привоза                                             Внимание! Дата ставится автоматически!", ["Номер привоза"]) & "  " & Date
a.Value = i

Application.ScreenUpdating = True

End Sub
Изменено: Владимир Колотилин - 28.12.2020 07:19:04
 
Если правильно понял задачу, то это можно сделать попроще:
Код
Sub Переход_на_привоз()
    Dim lc&
    Worksheets("1_Привоз").Activate
    lc = Cells(224, Columns.Count).End(xlToLeft).Column
If Cells(224, lc - 1).Value <> 0 Then
    Columns("L:M").Copy
    Columns(lc + 1).Select
    ActiveSheet.Paste
    Range(Cells(3, lc + 1), Cells(223, lc + 1)).ClearContents
    Cells(1, lc + 1) = "ДВ № " & InputBox("Введите номер привоза                                             Внимание! Дата ставится автоматически!", ["Номер привоза"]) & " от " & Date
    Exit Sub
Else
   Cells(1, lc - 1) = "ДВ № " & InputBox("Введите номер привоза                                             Внимание! Дата ставится автоматически!", ["Номер привоза"]) & " от " & Date
End If
End Sub
 
Владимир Колотилин, вместо отбивания пробелами для переноса строк нужно использовать переменную:
"Введите номер привоза"  & vbLf & "Внимание…"
Изменено: Jack Famous - 29.12.2020 09:26:56
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Код
lc = Cells(224, Columns.Count).End(xlToLeft).Column
Насколько я понял, эта переменная опускается с 1 до 224 ячейки при этом все что слева для нее блокируется, поэтому лишнее она не скопирует

Код
Cells(224, lc - 1).Value <> 0
Из-за ограничений выше, получается первый столбец не будет скопирован со столбца левее

Код
Range(Cells(3, lc + 1), Cells(223, lc + 1)).ClearContents
Здесь получается ограничение диапазона, чтобы макрос шапку не удалял
_Igor_61, я все правильно понял?
 
1. lc определяет номер последнего столбца с последней заполненной ячейкой в 224 строке (именно там, где формула "СУММ")
2. Перед Cells(224, lc - 1).Value <> 0  есть If.  Если столбец заполнен (пусть даже частично) в ячейке сумма будет <>0, и таким образом срабатывает первое условие - добавляем новый столбец.
3. Range(Cells(3, lc + 1), Cells(223, lc + 1)).ClearContents -
Цитата
Владимир Колотилин написал:
Здесь получается ограничение диапазона, чтобы макрос шапку не удалял
и шапку и формулу в 224 строке.
Владимир Колотилин,  Вы бы лучше написали, выполняет ли макрос из #4 поставленную задачу или нет, и если нет - то что именно не так он делает, а то из Вашего описания не совсем понятно, что он делать должен.
 
Да, спасибо, макрос выполняет то что нужно. Извините что так долго не отвечал
Страницы: 1
Наверх