Форум программистов, компьютерный форум, киберфорум
Наши страницы
VBA
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
Hellrizer
0 / 0 / 0
Регистрация: 04.08.2016
Сообщений: 35
1

Проблемка с VBA Excel

14.07.2019, 17:55. Просмотров 510. Ответов 27
Метки нет (Все метки)

Здравствуйте, уважаемые специалисты.

Помогите, пожалуйста, решить одну мою задумку.
Итак, имеется протокол сопротивления изоляции (лист "Сопр. изоляции 1"), который я хотел бы заполнять автоматически с помощью данных, заносимых вручную в таблицу (лист "Модель").

Чего хочу добиться:
1. При нажатии кнопки "Обработка" все данные из "Модели" вносятся в соответствующие строки протокола.
2. Заголовки выделялись заливкой, как и в "Модели".
3. Если в строке нет кабеля (резервный автомат), то переходим сразу к следующей строке.
4. Позиции протокола (кроме заголовков) должны автоматически нумероваться сквозной нумерацией.
5. Самое главное - все должно работать с абсолютно разным количеством строк (в примере их 10, а может быть и 1000).

Насколько я понимаю, необходимо переносить данные строку за строкой и чтобы машина понимала какая строка идёт за какой.
Заранее спасибо.
0
Вложения
Тип файла: rar ЭЛ.rar (70.1 Кб, 14 просмотров)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.07.2019, 17:55
Ответы с готовыми решениями:

Vba excel windows и vba excel Mac Os - Макинтош корявит шрифт
Всем привет, столкнулся с такой ситуацией. Макросы написаны на Excel 2016 Windows. Когда файл...

Небольшая проблемка с VBA под Word
Есть шаблон вордовского файлика, в нем находиться текст и таблица со столбцами: пп,ФИО,должность и...

Функциия excel в функции excel на vba
С помощью мастера записи матросов получил следующую функцию ActiveCell.FormulaR1C1 = "=IFERROR...

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

VBA Excel
Дали брату вот такое задание,я в этом ничего не понимаю,если кто-то поможет сделать задание буду...

27
ArtNord
77 / 60 / 20
Регистрация: 18.11.2015
Сообщений: 377
14.07.2019, 19:55 2
Hellrizer, вот вопрос, во вложении довольно не хилая, для "новичка", который задает такие вопросы на форуме, реализация. Скажите, да простят меня модераторы, вы это где это взяли? Задача не сложная, но, тот кто сделал то, что во вложении вряд ли бы не справился с Вашей текущей задачей. В общем, сдается мне, история с запашком... отвечать не буду
0
Hellrizer
0 / 0 / 0
Регистрация: 04.08.2016
Сообщений: 35
14.07.2019, 21:33  [ТС] 3
Уважаемый ArtNord.
То, что вы увидели - это плод моих двухлетних трудов. Кое что я почерпнул, читая этот форум. Где-то книжки помогли. Но при всём при этом я всё равно "чайник" и не стесняюсь это сказать. Озвученная проблема мне не по зубам. Вот и попросил помощи. А уж помогать или нет - дело Ваше.
Спасибо за отзыв.
0
Alex77755
10941 / 3431 / 590
Регистрация: 13.02.2009
Сообщений: 10,182
14.07.2019, 21:37 4
Открыл файл и сразу закрыл: крайне редко и только в исключительных случаях берусь за файлы с такой организацией данных. ИМХО: объединение ячеек - зло
0
14.07.2019, 21:37
Hellrizer
0 / 0 / 0
Регистрация: 04.08.2016
Сообщений: 35
14.07.2019, 21:41  [ТС] 5
Конечно зло, кто же спорит. Только выбора особого у меня нет. Ведь на одной странице предстоит уместить несколько таблиц с регламентированными размерами ячеек.
0
ArtNord
77 / 60 / 20
Регистрация: 18.11.2015
Сообщений: 377
14.07.2019, 22:14 6
Hellrizer, извиняюсь за излишнюю подозрительность. Кстати,
Цитата Сообщение от Hellrizer Посмотреть сообщение
При нажатии кнопки "Обработка" все данные из "Модели" вносятся в соответствующие строки протокола
протокол это имеется ввиду лист: "Сопр. изоляции 1"?
Цитата Сообщение от Hellrizer Посмотреть сообщение
Если в строке нет кабеля (резервный автомат), то переходим сразу к следующей строке.
Опять же, где, в какой строе нет кабеля?
И далее по тексту...

Раскидать данные по определённым условиям в определенные ячейки не проблема, но за два года, наверное, можно было немного яснее указывать, что именно Вам нужно.
0
Hellrizer
0 / 0 / 0
Регистрация: 04.08.2016
Сообщений: 35
14.07.2019, 22:27  [ТС] 7
ArtNord, ничего страшного.
1. Да, это именно этот лист.
2. В таблице на листе "Модель" строка 8 и 13.

Раскидать данные не проблема. Проблемой для меня оказалось заставить программу повторять это всё строку за строкой до последней. Как и заставить вдолбить программе, где же последняя строка.
0
ArtNord
77 / 60 / 20
Регистрация: 18.11.2015
Сообщений: 377
14.07.2019, 22:53 8
Узасть последнюю строку дин сз примеров:
Visual Basic
1
aAll = Cells.SpecialCells(xlLastCell).Row
Но не должно быть ни каких случайных данных/заливок ниже таблицы (у Вас в примере 18 строка странная)

2. Цикл:
Visual Basic
1
2
3
4
5
6
7
For a = 2 to aAll 
If Sheets("Модель").Cells(a, 9) = "" then
'Здесь пишете что делать если пусто
Else
'Здесь пишете что делать если НЕпусто
End if
Next a
Добавлено через 7 минут
Цитата Сообщение от ArtNord Посмотреть сообщение
Но не должно быть ни каких случайных данных/заливок ниже таблиц
в общем это неи\ критично, просто макрос проверит лишние ячейки
1
Hellrizer
0 / 0 / 0
Регистрация: 04.08.2016
Сообщений: 35
14.07.2019, 22:54  [ТС] 9
Спасибо. Неужели так просто? Завтра попробую.

ПС. А что там у меня с 18 строкой?
0
ArtNord
77 / 60 / 20
Регистрация: 18.11.2015
Сообщений: 377
14.07.2019, 23:00 10
какие-то данные, AU18=0,5 CW18 = 111
0
Hellrizer
0 / 0 / 0
Регистрация: 04.08.2016
Сообщений: 35
15.07.2019, 08:30  [ТС] 11
Что-то не получается. Совсем запутался.
0
ArtNord
77 / 60 / 20
Регистрация: 18.11.2015
Сообщений: 377
15.07.2019, 08:35 12
Цитата Сообщение от Hellrizer Посмотреть сообщение
Что-то не получается. Совсем запутался.
Что именно не получается?
0
Hellrizer
0 / 0 / 0
Регистрация: 04.08.2016
Сообщений: 35
15.07.2019, 08:50  [ТС] 13
Если коротко, то при нажатии кнопки ничего не происходит.
Я вставляю в цикл всё, что мне необходимо произвести, но ничего не происходит.
В условии If Sheets("Модель").Cells(a, 9) = "" then я пытаюсь перейти на следующую строчку - не выходит




Может от того, что строка "а" есть и в одном и другом листе?
В общем, не знаю. Чайник я.
0
ArtNord
77 / 60 / 20
Регистрация: 18.11.2015
Сообщений: 377
15.07.2019, 09:12 14
Попробуйте так:
Visual Basic
1
2
3
4
5
For a = 2 to aAll 
If Sheets("Модель").Cells(a, 9) <> "" then
'Здесь пишете что делать если НЕпусто, а к следующей строке он перейдет сам
End if
Next a
0
Hellrizer
0 / 0 / 0
Регистрация: 04.08.2016
Сообщений: 35
15.07.2019, 09:33  [ТС] 15
А данный макрос мне писать в каком листе?
0
ArtNord
77 / 60 / 20
Регистрация: 18.11.2015
Сообщений: 377
15.07.2019, 09:40 16
Цитата Сообщение от Hellrizer Посмотреть сообщение
При нажатии кнопки "Обработка" все данные из "Модели" вносятся в соответствующие строки протокола
Соответственно, в эту кнопку
0
Hellrizer
0 / 0 / 0
Регистрация: 04.08.2016
Сообщений: 35
15.07.2019, 09:47  [ТС] 17
Цитата Сообщение от ArtNord Посмотреть сообщение
Соответственно, в эту кнопку
Но тогда For a = 2 to aAll к какому листу относится?
0
ArtNord
77 / 60 / 20
Регистрация: 18.11.2015
Сообщений: 377
15.07.2019, 09:52 18
Hellrizer,
В данном случае к активному:
Visual Basic
1
aAll = Cells.SpecialCells(xlLastCell).Row
Можете указать явно:
Visual Basic
1
aAll =Sheets("Модель").Cells.SpecialCells(xlLastCell).Row
0
Hellrizer
0 / 0 / 0
Регистрация: 04.08.2016
Сообщений: 35
15.07.2019, 10:24  [ТС] 19
Всё то же.

Вот что у меня получилось:

PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
Private Sub CommandButton3_Click()
    aAll = Sheets("Модель").Cells.SpecialCells(xlLastCell).Row
    For a = 2 To aAll
    If Sheets("Модель").Cells(a, 9) <> "" Then
        Cells(a, 2) = Sheets("Модель").Cells(a, 9)
        Cells(a, 101) = Sheets("Модель").Cells(a, 9)
        Cells(a, 28) = Sheets("Модель").Cells(a, 10)
        Cells(a, 31) = Sheets("Модель").Cells(a, 11) & " " & Sheets("Модель").Cells(a, 12) & "Х" & Sheets("Модель").Cells(a, 13)
        Cells(a, 43) = Sheets("Модель").Cells(a, 15)
        Cells(a, 47) = Sheets("Модель").Cells(a, 16)
    End If
    Next a
End Sub
0
ArtNord
77 / 60 / 20
Регистрация: 18.11.2015
Сообщений: 377
15.07.2019, 10:42 20
Цитата Сообщение от Hellrizer Посмотреть сообщение
Cells(a, 2) = Sheets("Модель").Cells(a, 9)
Такое указание ячеек означает:
ячейке (a, 2) текущего (активного) листа присвоить значение из такой же строки, 9 столбца листа "Модель".

Добавлено через 4 минуты
Насколько я понял Вам нужно то-то типа так:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private Sub CommandButton3_Click()
    aAll = Sheets("Модель").Cells.SpecialCells(xlLastCell).Row
b = 22
    For a = 2 To aAll
    If Sheets("Модель").Cells(a, 9) <> "" Then
        Cells(b, 2) = Sheets("Модель").Cells(a, 9)
        Cells(b, 101) = Sheets("Модель").Cells(a, 9)
        Cells(b, 28) = Sheets("Модель").Cells(a, 10)
        Cells(b, 31) = Sheets("Модель").Cells(a, 11) & " " & Sheets("Модель").Cells(a, 12) & "Х" & Sheets("Модель").Cells(a, 13)
        Cells(b, 43) = Sheets("Модель").Cells(a, 15)
        Cells(b, 47) = Sheets("Модель").Cells(a, 16)
b=b+1
    End If
    Next a
End Sub
1
15.07.2019, 10:42
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.07.2019, 10:42

Excel + VBA
Приветствую, помогите с задачкой, пожалуйста. В супермаркете проходит профессиональный конкурс на...

Excel-VBA
Нужно из одной книги excel скопировать название листов в другую книгу в определенный лист...

VBA Excel
Подскажите пожалуйста, как для трех выделенных ячеек со значениями длин треугольника определить его...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru