Макрос вставки столбцов в нескольких таблицах - VBA

Узнай цену своей работы

Формулировка задачи:

Уважаемые, прошу Вашей помощи.Можно ли сделать макрос вставки столбцов в определённом выбранном месте таблицы, но не в одной таблице, а в нескольких таблицах расположенных в разных окнах файла эксель. Таблицы одинаковы по формату. Сейчас у меня стоят такие макросы. На вставку столбцов:
Листинг программы
  1. Sub Добавить_столбец()
  2. Prepare
  3. If MsgBox("Добавить столбец?", vbQuestion + vbOKCancel) = vbOK Then
  4. ActiveSheet.Unprotect
  5. Dim nCol As Long
  6. nCol = ActiveCell.Column
  7. Columns(nCol).Insert
  8. MsgBox "Столбец добавлен!", vbInformation, "Вставка столбцов"
  9. Ended
  10. End If
  11. End Sub
На удаление столбцов:
Листинг программы
  1. Sub Удаление столбцов()
  2. '
  3. Prepare
  4. If MsgBox("Столбец удалить?", vbQuestion + vbOKCancel) = vbOK Then
  5. Dim nCol As Long
  6. nCol = ActiveCell.Column
  7. Columns(nCol).Delete
  8. MsgBox "Столбец удалён!", vbInformation, "Удаление столбцов"
  9. Ended
  10. End If
  11. End Sub
Таблицы между собой взаимосвязаны с помощью формул. То есть есть главная таблица и все другие на неё завязаны формулой
Листинг программы
  1. =ИНДЕКС('Таблица заказов'!$A$1:$FN$4;СТРОКА();СТОЛБЕЦ()).
Но данная система работает не корректно, много ручного труда.

Решение задачи: «Макрос вставки столбцов в нескольких таблицах»

textual
Листинг программы
  1. Sub Добавить_позицию_на_всех_листах()
  2. If MsgBox("Добавить столбец/строку ?", vbQuestion + vbOKCancel) = vbOK Then
  3.     Dim i&, Last&, El, Vert, Gor, CurCode$, U As Boolean, Sh As Worksheet, A, S$
  4.     Vert = Array("отчет", "Таблица под отчет", "Накладная", "Отчёт о розничных продажах", "Приход и расход под реализацию", "Подарки (значение)", "Прайс лист", "Анализ движения продукции", "Срок годности", "Таб.для ревизии")
  5.     Gor = Array("Таблица заказов", "Таблица заказов (2)", "Таб.уч.под реализацию", "Таблица подарков", "Таблица подарков (2)", "Таб. подарков за прош. мес.", "Таб. подарков за прош.мес.(2)")
  6.     For Each El In Vert
  7.         If ActiveSheet.Name = El Then
  8.             CurCode = Cells(ActiveCell.Row, 1)
  9.             U = True
  10.             Exit For
  11.         End If
  12.     Next
  13.     For Each El In Gor
  14.         If ActiveSheet.Name = El Then
  15.             CurCode = Cells(1, ActiveCell.Column)
  16.             U = True
  17.             Exit For
  18.         End If
  19.     Next
  20.     If U = False Then Exit Sub
  21.     If Len(CurCode) < 4 Then CurCode = Format$(Val(CurCode), "0000")
  22.     Prepare
  23.     For Each El In Vert
  24.         With Worksheets(El)
  25.             .Unprotect
  26.             Last = .Cells(.Rows.Count, 1).End(xlUp).Row
  27.             A = .Range("A1:A" & Last).Value
  28.             For i = 9 To Last
  29.                 S = CStr(A(i, 1))
  30.                 If Len(S) < 4 Then S = Format$(Val(S), "0000")
  31.                 If S = CurCode Then
  32.                     .Rows(i).Insert
  33.                     Exit For
  34.                 End If
  35.             Next i
  36.             .Protect
  37.         End With
  38.     Next
  39.     For Each El In Gor
  40.         With Worksheets(El)
  41.             .Unprotect
  42.             Last = .Cells(1, .Columns.Count).End(xlToRight).Column
  43.             A = Range(.Cells(1, 1), .Cells(1, Last)).Value
  44.             For i = 6 To Last
  45.                 S = CStr(A(1, i))
  46.                 If Len(S) < 4 Then S = Format$(Val(S), "0000")
  47.                 If S = CurCode Then
  48.                     .Columns(i).Insert
  49.                     Exit For
  50.                 End If
  51.             Next i
  52.             .Protect
  53.         End With
  54.     Next
  55.     Ended
  56.     MsgBox "Столбцы/строки добавлены!", vbInformation, "Вставка столбцов/строк"
  57. End If
  58. End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 3.75 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы