Выбор данных для копирования в зависимости от значения в другой ячейке. При условии в ячейки B48-1 то фамилия берётся книги база, лист общие ячейка В2 а буква с ячейки В3, а если ячейка B48-2 то фамилия берётся книги база, лист общие ячейка В2 а буква с ячейки В2 . Примеры прикрепляю. Заранее спасибо !
Выбор данных для копирования в зависимости от значения в другой ячейке. При условии в ячейки B48-1 то фамилия берётся книги база, лист общие ячейка В2 а буква с ячейки В3, а если ячейка B48-2 то фамилия берётся книги база, лист общие ячейка В2 а буква с ячейки В2 . Примеры прикрепляю. Заранее спасибо !Tyoma
If ProtocolBook.Worksheets(ProtocolSheet).Cells(48, 2) = 2 Then r_ = 2 Else r_ = 3 End If ProtocolBook.Worksheets(ProtocolSheet).Cells(40, 6) = EtalonBook.Worksheets(EtalonSheet).Cells(2, r_)
[/vba]
И да, у Вас кнопка запуска макроса находится в активной книге на том же листе, который заполняется, поэтому вот это [vba]
Код
ProtocolBook.Worksheets(ProtocolSheet).
[/vba]лишнее везде
Вы ничего в описании не перепутали? Фамилию из В2 берем или из В1?
If ProtocolBook.Worksheets(ProtocolSheet).Cells(48, 2) = 2 Then r_ = 2 Else r_ = 3 End If ProtocolBook.Worksheets(ProtocolSheet).Cells(40, 6) = EtalonBook.Worksheets(EtalonSheet).Cells(2, r_)
[/vba]
И да, у Вас кнопка запуска макроса находится в активной книге на том же листе, который заполняется, поэтому вот это [vba]
Вы ничего в описании не перепутали? Фамилию из В2 берем или из В1?
Да извиняюсь фамилию берём с ячейки B1, а вот букву при условии в ячейки B48 если =1 то с ячейки B2, а если B48=2 то с ячейки В3, фамилия остаётся такая же с В1. Сейчас при условии ячейки В48 =1 ячейка F40 буква пустая, а должна быть m.
Вы ничего в описании не перепутали? Фамилию из В2 берем или из В1?
Да извиняюсь фамилию берём с ячейки B1, а вот букву при условии в ячейки B48 если =1 то с ячейки B2, а если B48=2 то с ячейки В3, фамилия остаётся такая же с В1. Сейчас при условии ячейки В48 =1 ячейка F40 буква пустая, а должна быть m.Tyoma
Сейчас при условии ячейки В48 =1 ячейка F40 буква пустая, а должна быть m.
Не может такого быть. Значит где-то что-то в файлах не так Попробуйте этот файл для 1 и для 2. Будет выскакивать сообщение с номером строки, откуда берем значение. Для 2 должно быть 2, а для 2 должно быть 3
Сейчас при условии ячейки В48 =1 ячейка F40 буква пустая, а должна быть m.
Не может такого быть. Значит где-то что-то в файлах не так Попробуйте этот файл для 1 и для 2. Будет выскакивать сообщение с номером строки, откуда берем значение. Для 2 должно быть 2, а для 2 должно быть 3_Boroda_
Излишнее цитирование удалено администрацией - это нарушение п.5j Правил форума Да выскакивает. А всё понял, нужно что бы брало букву с B3 ячейки а сейчас берёт с С2 ячейки как в примере книга база, вкладка общее.
Излишнее цитирование удалено администрацией - это нарушение п.5j Правил форума Да выскакивает. А всё понял, нужно что бы брало букву с B3 ячейки а сейчас берёт с С2 ячейки как в примере книга база, вкладка общее.Tyoma
Сообщение отредактировал Tyoma - Вторник, 13.08.2019, 18:34
И да, у Вас кнопка запуска макроса находится в активной книге на том же листе, который заполняется, поэтому вот это ProtocolBook.Worksheets(ProtocolSheet). лишнее везде
Это где надо удалять что то не понял :blink: :eek: ??
И да, у Вас кнопка запуска макроса находится в активной книге на том же листе, который заполняется, поэтому вот это ProtocolBook.Worksheets(ProtocolSheet). лишнее везде
Это где надо удалять что то не понял :blink: :eek: ??Tyoma
Const COUNT_ROW As Integer = 49 'количество проверяемых строк Dim EtalonDirectory As String 'директория файла с эталонами Dim EtalonBook As Workbook ' Dim EtalonSheet As String 'название листа в файле с протоколом Dim i, j, k As Integer 'временные переменные Dim EqualData As Boolean 'флаг соответсвия даты в протоколе и файле с условиями
'открывем файл с эталоном, привязываем книги к переменным EtalonDirectory = Cells(14, 9) 'проверим файл по директории If Dir(EtalonDirectory) = "" Then MsgBox "Путь к файлу c описанием эталонных СИ указан не правильно" Else ' Set ProtocolBook = ActiveWorkbook ' ProtocolSheet = ActiveWorkbook.ActiveSheet.Name Workbooks.Open (EtalonDirectory) Set EtalonBook = ActiveWorkbook EtalonSheet = "Условия" ThisWorkbook.Activate With EtalonBook.Worksheets(EtalonSheet) If (Cells(48, 4)) Then 'просматриваем строки, при совпадении даты копируем в протокол If (Cells(30, 6) = "") Then Cells(30, 6) = Date End If EqualData = False i = 50 While (i > 1) If (Cells(30, 6) = .Cells(i, 1)) Then EqualData = True j = 0 While (j <> 6) Cells(32 + j, 4) = .Cells(i, 2 + j) j = j + 1 Wend End If i = i - 1 Wend 'дата не совпала If (EqualData = False) Then j = 0 While (j <> 6) Cells(32 + j, 4) = "Отсутствует" j = j + 1 Wend End If End If EtalonSheet = "Общее" If (Cells(48, 5)) Then 'копируем фамилию и букву босса Cells(40, 4) = .Cells(1, 2) If Cells(48, 2) = 2 Then r_ = 2 Else r_ = 3 End If Cells(40, 6) = .Cells(r_, 2) Cells(45, 4) = .Cells(4, 2) End If End With EtalonBook.Close False End If End Sub
[/vba]
И кстати, прочитайте про объявление переменных. У Вас эта строка [vba]
Код
Dim ProtocolSheet, EtalonSheet As String
[/vba]стрингом делает только Эталон, а Протокол у Вас вариант
Везде И это не надо, это можно удалять вместо [vba]
Const COUNT_ROW As Integer = 49 'количество проверяемых строк Dim EtalonDirectory As String 'директория файла с эталонами Dim EtalonBook As Workbook ' Dim EtalonSheet As String 'название листа в файле с протоколом Dim i, j, k As Integer 'временные переменные Dim EqualData As Boolean 'флаг соответсвия даты в протоколе и файле с условиями
'открывем файл с эталоном, привязываем книги к переменным EtalonDirectory = Cells(14, 9) 'проверим файл по директории If Dir(EtalonDirectory) = "" Then MsgBox "Путь к файлу c описанием эталонных СИ указан не правильно" Else ' Set ProtocolBook = ActiveWorkbook ' ProtocolSheet = ActiveWorkbook.ActiveSheet.Name Workbooks.Open (EtalonDirectory) Set EtalonBook = ActiveWorkbook EtalonSheet = "Условия" ThisWorkbook.Activate With EtalonBook.Worksheets(EtalonSheet) If (Cells(48, 4)) Then 'просматриваем строки, при совпадении даты копируем в протокол If (Cells(30, 6) = "") Then Cells(30, 6) = Date End If EqualData = False i = 50 While (i > 1) If (Cells(30, 6) = .Cells(i, 1)) Then EqualData = True j = 0 While (j <> 6) Cells(32 + j, 4) = .Cells(i, 2 + j) j = j + 1 Wend End If i = i - 1 Wend 'дата не совпала If (EqualData = False) Then j = 0 While (j <> 6) Cells(32 + j, 4) = "Отсутствует" j = j + 1 Wend End If End If EtalonSheet = "Общее" If (Cells(48, 5)) Then 'копируем фамилию и букву босса Cells(40, 4) = .Cells(1, 2) If Cells(48, 2) = 2 Then r_ = 2 Else r_ = 3 End If Cells(40, 6) = .Cells(r_, 2) Cells(45, 4) = .Cells(4, 2) End If End With EtalonBook.Close False End If End Sub
[/vba]
И кстати, прочитайте про объявление переменных. У Вас эта строка [vba]
Код
Dim ProtocolSheet, EtalonSheet As String
[/vba]стрингом делает только Эталон, а Протокол у Вас вариант_Boroda_