0 / 0 / 0
Регистрация: 17.09.2019
Сообщений: 90
1
Excel

Кнопка добавляет строку и автоматически прорисовывает границы. Но если добавить в послед строке,то неправильно добавляет

02.11.2020, 15:23. Показов 2721. Ответов 23

Author24 — интернет-сервис помощи студентам
Кнопка добавляет строку и автоматически прорисовывает границы. Но если добавить в послед строке,то неправильно добавляет.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Private Sub CommandButton9_Click()
ActiveSheet.Unprotect (159)
Application.Calculation = xlManual
Application.ScreenUpdating = False
With ActiveSheet
    If ActiveCell.Column > 3 And _
        ActiveCell.Row = Cells(ActiveCell.Row, "C").MergeArea(1).Row Then
            Dim FirstRow As Long: FirstRow = True
    End If
    .Rows(ActiveCell.Row & ":" & ActiveCell.Row + (ActiveCell.MergeArea.Rows.Count - 1)).Copy
    .Rows(ActiveCell.Row & ":" & ActiveCell.Row + (ActiveCell.MergeArea.Rows.Count - 1)).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromRightOrAbove
    If FirstRow Then
        Application.DisplayAlerts = False
            Range(Cells(ActiveCell.Row, "C"), Cells(ActiveCell.Row + _
                Cells(ActiveCell.Row + 2, "C").MergeArea.Rows.Count + 1, "C")).Merge
            Range(Cells(ActiveCell.Row, "A"), Cells(ActiveCell.Row + _
                Cells(ActiveCell.Row, "C").MergeArea.Rows.Count - 1, "B")).Merge
        Application.DisplayAlerts = True
        Range("C8").Interior.Color = xlNone
    End If
End With
  With Range(Cells(Cells(ActiveCell.Row, "C").MergeArea(1).Row, "A"), _
                Cells(ActiveCell.Row + Cells(ActiveCell.Row, "C").MergeArea.Count - 1, "H")).Borders
        .LineStyle = xlContinuous: .ColorIndex = 0: .TintAndShade = 0: .Weight = xlThin
    End With
Call CommandButton35_Click
ActiveSheet.Protect Password:=159, DrawingObjects:=True, Contents:=True, Scenarios:=True, _
                    AllowFormattingColumns:=True, AllowFormattingRows:=True
Application.ScreenUpdating = True
End Sub
Вложения
Тип файла: rar Табель МЕД.rar (596.0 Кб, 7 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.11.2020, 15:23
Ответы с готовыми решениями:

Есть код который добавляет строку с объединенными ячейками, работает только если выбрана нижняя строка
Есть код который добавляет строку с объединенными ячейками, работает только если выбрана нижняя...

Циклический поиск значения в колонке , if true = вносит изменения в строке найденой ячейки, else добавляет строку со своими значениями
Здравствуйте, имею 2 листа на 1 листе база магазина, на 2 листе прайс поставщика. Нужно из прайса...

Функция, которая автоматически добавляет в Word информацию
Narod, pomogite nachinautschei ! Kak mojnno sdelat w WORD'e takuu functiu,kak , esli polsovatel...

Добавляет пустую строку в БД
Уже запарился, посмотрел кучу сайтов,делаю все по примеру - короче в элементарном...

23
0 / 0 / 0
Регистрация: 17.09.2019
Сообщений: 90
02.11.2020, 15:27  [ТС] 2
Вот так происходит, границы рисует там где заведующий отделением написано, так не должно быть(
Миниатюры
Кнопка добавляет строку и автоматически прорисовывает границы. Но если добавить в послед строке,то неправильно добавляет  
0
1846 / 1161 / 354
Регистрация: 11.07.2014
Сообщений: 4,102
02.11.2020, 16:03 3
Sh0ck3r, вы такой умный и нас, видимо, такими же считаете. Если вам ясно на какую из ваших многочисленных кнопок надо нажимать и какая должна быть реакция, то я, например, не провидец и не экстрасенс и этого не знаю. Загрузил файл График, встал на последнюю строку, нажал Добавить, появилась правильная новая строка и так несколько раз. только номер у нее не меняется. Кнопка перенумерации не срабатывает. И чего вы сделали с кнопками, что невозможно посмотреть их свойства и подключенный макрос? Что, куда, к чему?
0
0 / 0 / 0
Регистрация: 17.09.2019
Сообщений: 90
02.11.2020, 16:08  [ТС] 4
У вас какой офис? Пароль 159, вкладка рецензирование. У меня в 2007 добавляется криво, какие-то левые границы рисует...Номер меняется если нового человека добавляешь, а не просто строчку существующему. Нужно стать на столбец с ФИО и нажать доб. строки.
0
Ученик Нарушитель
233 / 140 / 53
Регистрация: 01.04.2020
Сообщений: 468
02.11.2020, 16:32 5
Sh0ck3r, Вечер Добрый. Burk, правду говорит.
Цитата Сообщение от Burk Посмотреть сообщение
Загрузил файл График, встал на последнюю строку, нажал Добавить, появилась правильная новая строка и так несколько раз. только номер у нее не меняется.
, аналогично сделал и всё Good. Офис 2019.
0
Ученик Нарушитель
233 / 140 / 53
Регистрация: 01.04.2020
Сообщений: 468
02.11.2020, 16:39 6
Sh0ck3r,
Цитата Сообщение от Sh0ck3r Посмотреть сообщение
Нужно стать на столбец с ФИО и нажать доб. строки.
Миниатюры
Кнопка добавляет строку и автоматически прорисовывает границы. Но если добавить в послед строке,то неправильно добавляет  
0
1846 / 1161 / 354
Регистрация: 11.07.2014
Сообщений: 4,102
02.11.2020, 17:05 7
Sh0ck3r, MikeVol, у меня 2007 и на первый взгляд No Problems. Может уважаемый Sh0ck3r у вас 2007 гнутый? И, как мне кажется, ваш уровень достаточно неплох и, чуть повозившись, вы и сами исправите ваши макросы может быстрее, чем помощники, тем более, что вы так и не озвучили тот доскональный порядок действий, который приводит к неверным результатам.

Добавлено через 4 минуты
P.S. На будущее - надо присылать не пустую таблицу, хотя бы, строки 3 заполненных, пустые же убрать, как совершенно ненужные
0
0 / 0 / 0
Регистрация: 17.09.2019
Сообщений: 90
02.11.2020, 17:37  [ТС] 8
Я просто становлюсь на последнюю должность и нажимаю доб. строки и такое происходит, каждый раз

Добавлено через 1 минуту
у меня лицензия 2007 офиса
0
0 / 0 / 0
Регистрация: 17.09.2019
Сообщений: 90
02.11.2020, 17:41  [ТС] 9
В этом файлике сделал как вы и сказали, убрал все строки и нажал на посл. строку и получился такой косяк с 1го раза.
Вложения
Тип файла: rar Табель МЕД.rar (575.2 Кб, 6 просмотров)
0
0 / 0 / 0
Регистрация: 17.09.2019
Сообщений: 90
02.11.2020, 17:52  [ТС] 10
На счет этого тоже не знаете? Нужно когда очищаешь ячейку от времени, чтобы был автоматический перерасчет активного листа.
0
Ученик Нарушитель
233 / 140 / 53
Регистрация: 01.04.2020
Сообщений: 468
02.11.2020, 18:21 11
Sh0ck3r, У вас вообще что-то странное с данной книгой. Третья страница отображается как ЭтаКнига
0
1846 / 1161 / 354
Регистрация: 11.07.2014
Сообщений: 4,102
02.11.2020, 18:24 12
Цитата Сообщение от Sh0ck3r Посмотреть сообщение
у меня лицензия 2007 офиса
А у меня нет лицензии, зато ваших фокусов нет. Может прислать?
Цитата Сообщение от Sh0ck3r Посмотреть сообщение
тоже не знаете
Что за тоже, у меня ведь работает. "Очищаешь ячейку от времени" это какая ячейка - начало работы или обеденный перерыв? Впрочем неважно, воспользуйтесь реакцией на событие изменения ячейки Worksheet_Change и смотрите, когда эта ячейка (Target) будет в нужном вам столбце и будет чистая. И сходите с вашим файлом на другой комп и, желательно, в другую организацию, там проверите.
0
Ученик Нарушитель
233 / 140 / 53
Регистрация: 01.04.2020
Сообщений: 468
02.11.2020, 18:24 13
Sh0ck3r,
Миниатюры
Кнопка добавляет строку и автоматически прорисовывает границы. Но если добавить в послед строке,то неправильно добавляет  
0
0 / 0 / 0
Регистрация: 17.09.2019
Сообщений: 90
02.11.2020, 18:43  [ТС] 14
Я работаю в больнице, там нельзя пиратский софт. А есть ключ только на 2007

Добавлено через 1 минуту
Попробовал с Worksheet_Change, перестает работать кнопка перехода на следующий месяц( На PasteSpecial ругается...
0
1846 / 1161 / 354
Регистрация: 11.07.2014
Сообщений: 4,102
02.11.2020, 19:34 15
Sh0ck3r, значит неправильно записали обращение, либо внимательно прочитайте, либо пришлите, что вы там написали. Не может Worksheet_Change что-то отключать. Тысячи программеров пользуются и ничего. И у вас всё должно работать. Эта САБ должно быть в модуле листа. Когда пишете сообщение, нажимайте на НИК адресата, тогда у него будет информация о сообщении. Вам же приходит, когда я вам посылаю.

Добавлено через 11 минут
Или перед Paste поставьте Application.EnableEvents = False а после =True
0
0 / 0 / 0
Регистрация: 17.09.2019
Сообщений: 90
03.11.2020, 08:25  [ТС] 16
Application.EnableEvents = False уже стоит в коде. Происходит это только в 2007 офисе, в других нормально срабатывает переход.

Добавлено через 12 минут
Visual Basic
1
2
3
Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.Calculate
End Sub
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
Private Sub CommandButton6_Click() 'переход на следующий месяц
  Dim i As Integer
  Dim s_nom_row As String
'------------------------
  Dim mVal As Integer
  Dim n As Long
  Dim c As Byte
  Dim s As String
  
  Application.ScreenUpdating = False
  Perenos = True 'Переменная устанавливается в True для отключения работы функций подсчета по цвету - ночные и праздничные
  ActiveSheet.Unprotect (159) 'снимается пароль
  Application.Calculation = xlManual 'Отключение автоматических перерасчетов
  Act_Sheets = ActiveSheet.Name
  next_month = Sheets(Act_Sheets).ComboBox1.Value
  Sheets("Справочник").Visible = True
  For i = 2 To 13
    If Worksheets("Справочник").Cells(i, 2).Value = next_month Then
      If Worksheets("Справочник").Cells(i, 1).Value = 1 Then
        MsgBox ("Лист этого месяца уже существует. Удалите его и перезапустите программу.")
        Exit Sub
      End If
    End If
  Next i
  Count_Sheets = Workbooks(grafic).Worksheets.Count
  Workbooks(grafic).Sheets(Act_Sheets).Select
  Workbooks(grafic).Sheets(Act_Sheets).Copy After:=Workbooks(grafic).Sheets(Count_Sheets)
  ActiveSheet.Name = next_month
  ActiveSheet.Range("J3").Select
  ActiveCell.FormulaR1C1 = "на " + next_month + " " + God
  Sheets("Справочник").Select
  For i = 2 To 13
    If Worksheets("Справочник").Cells(i, 2).Value = next_month Then
       Worksheets("Справочник").Cells(i, 1).Value = 1
       Sheets("Справочник").Visible = False
    End If
  Next i
  Sheets(next_month).Select
  'вставляется часть с рабочими и выходными днями
  For i = 8 To 600
    If Worksheets(next_month).Cells(i, 1).Value = "Защита" Then
      nom_row = i - 1 'номер строки, где заканчивается график, чтобы вставить рабочие дни соответствующего месяца
      Exit For
    End If
  Next i
  kol_row = nom_row
  Application.DisplayAlerts = False 'отключает подтвержедние на экране
  Workbooks.Open (ActiveWorkbook.Path + "\" + Mes)
  Workbooks(Mes).Sheets(next_month).Columns.EntireColumn.Hidden = False
  Workbooks(Mes).Sheets(next_month).Select
  Sheets(next_month).Copy Before:=Workbooks(grafic).Sheets(1)
  Windows(Mes).Activate
  ActiveWindow.Close
  Windows(grafic).Activate
  nom_row = nom_row - 4 'количество копируемых строк
  s_nom_row = "A1:AQ" + Format(nom_row)
  Sheets(next_month + " (2)").Select
  Sheets(next_month + " (2)").Range(s_nom_row).Select
  Selection.Copy
  Sheets(next_month).Select
  Sheets(next_month).Range("J5:J6").Select
  Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
  Sheets(next_month).Range("J5:J6").PasteSpecial
  Sheets(next_month).Range("J5").Select
  Sheets(next_month).Columns.EntireColumn.Hidden = False
  Worksheets(next_month + " (2)").Delete
  Application.DisplayAlerts = True 'включает подверждение на экране vgv
  Sheets(next_month).Select
  Sheets(next_month).Columns.EntireColumn.Hidden = False
  Count_Col = ActiveCell.MergeArea.Cells.Columns.Count
  ActiveWorkbook.ActiveSheet.Columns(11 + Count_Col).Hidden = True
  ActiveWorkbook.ActiveSheet.Columns(14 + Count_Col).Hidden = True
  ActiveWorkbook.ActiveSheet.Columns(15 + Count_Col).Hidden = True
  ActiveWorkbook.ActiveSheet.Columns(21 + Count_Col).Hidden = True
'-----------------------------------------------------------------
  mVal = 42
  Do While mVal >= 8
     If ActiveSheet.Cells(6, mVal).Value = "31" Or ActiveSheet.Cells(6, mVal).Value = "30" Or ActiveSheet.Cells(6, mVal).Value = "29" Or ActiveSheet.Cells(6, mVal).Value = "28" Then
        n = mVal
        Do
          c = ((n - 1) Mod 26)
          s = Chr(c + 65) & s
          n = (n - c) \ 26
        Loop While n > 0
        Exit Do
     End If
     mVal = mVal - 1
  Loop
  
  mVal = 0
  For i = 8 To ActiveSheet.UsedRange.Rows.Count
      If ActiveSheet.Range("C" & i).MergeArea.Rows.Count > 1 Then
         mVal = mVal + 1
      End If
  Next i
  ActiveSheet.Cells(8, 9).Select
  Selection.Copy
  ActiveSheet.Range("J8:" & s & mVal + 7).Select
  Selection.PasteSpecial Paste:=xlPasteValidation, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
  Application.CutCopyMode = False
  ActiveSheet.Range("C8").Select
'-----------------------------------------------------------------
  Sheets(next_month).Protect Password:=159, DrawingObjects:=True, Contents:=True, Scenarios:=True, _
                             AllowFormattingColumns:=True, AllowFormattingRows:=True
  ActiveSheet.Calculate
  Perenos = False 'Переменная устанавливается в False для включения работы функций подсчета по цвету.
  Application.ScreenUpdating = True
End Sub
0
1846 / 1161 / 354
Регистрация: 11.07.2014
Сообщений: 4,102
03.11.2020, 09:13 17
Лучший ответ Сообщение было отмечено Sh0ck3r как решение

Решение

Sh0ck3r, Worksheet_Change у вас будет работать при любом изменении любой ячейки и при копировании и вставке диапазона может работать кучу раз. А вы писали, что это должно работать при очистке некоторой ячейки времени. На мой вопрос в каком столбце эта ячейка, ответа я не получил. Вы читайте внимательно вопросы, а то уже притомился повторять их. По поводу вставки НИКа в сообщение тоже никакой реакции. Для примера Worksheet_Change должна выглядеть так (считаем, что столбец со временем 5 и последняя строка в таблице LastRow
Visual Basic
1
2
3
4
5
Sub Worksheet_Change(ByVal Target As Range)
if Target.Column = 5 And Target.Row <= LastRow And Target ="" Then
ActiveSheet.Calculate
end If
End Sub
Кстати, поискал, естественно из редактора ВБА, EnableEvents в файле График, не видать такого оператора
1
0 / 0 / 0
Регистрация: 17.09.2019
Сообщений: 90
03.11.2020, 09:33  [ТС] 18
Спасибо большое, попутал с displayalerts. Заработало) А вот с worksheet_change не работает, выдает ошибку syntax error.
0
1846 / 1161 / 354
Регистрация: 11.07.2014
Сообщений: 4,102
03.11.2020, 10:21 19
Sh0ck3r, я что маг, чтобы знать в какой строке синтакс эррор. Эта ошибка возникает только, если вы что-то неправильно набрали с ошибкой.. Надо быть внимательным. Покажите кусок кода, где возникает ошибка, иначе нет предмета разговора.
0
0 / 0 / 0
Регистрация: 17.09.2019
Сообщений: 90
03.11.2020, 10:52  [ТС] 20
Visual Basic
1
2
3
4
5
Sub Worksheet_Change(ByVal Target As Range)
if Target.Column = 5 And Target.Row <= LastRow And Target ="" Then
ActiveSheet.Calculate
end If
End Sub
Здесь во 2 строке
0
03.11.2020, 10:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.11.2020, 10:52
Помогаю со студенческими работами здесь

DatagridView добавляет не валидную строку из БД
Здравствуйте. У меня есть прога, через которую я добавляю данные в таблицу БД. В таблице есть ПК....

INSERT INTO не добавляет строку в таблицу
Данный запрос не добавляет новой строки. Причем это происходит только в конкретной таблице...

Добавляет в базу пустую строку
Здравствуйте, столкнулась с двумя проблемами: Мне надо сделать регистрацию. Вроде всё добавляет и...

eof() Добавляет лишнюю строку
Всем привет, помогите пожалуйста. eof() добавляет лишнюю строку, как решить проблему или заменить....

Не добавляет новую строку в подчиненной форме
Всем привет! Друзья, подскажите пожалуйста. Столкнулся с такой проблемой. С основной формы по...

Из-за чего добавляет пустую строку в datagridview1?
try { string s = &quot;&quot;; s =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru