здравствуйте! помогите пожалуйста найти ошибку в этом макросе. Макрос должен по значениям в ячейках Q1 и Q19 (в Q1 - название реагента, Q19 - формула реагента) которые отображаются по формулам в этих ячейках, уменьшать на выбранное количество из таблицы, которая находится на листе ТАБЛИЦА ДАННЫХ....есть несколько вариантов отображения в этих ячейках данных, когда 1)Q1=все, а Q19=формула реагента(<>все)
2) Q19=все, а Q1=название реагента( <>все) 3) Q1=название реагента (<>все), и Q19=формула реагента (<>все)
я через чатжпт создала код, но к сожалению не все 3 условии, которые описала выше, работают через этот макрос. помогите мне решить эту проблему снизу вставляю тот самый код. [vba]
Код
Sub ВыдатьРеагент() Dim ЛистРеагенты As Worksheet Dim НомерКоробки As String Dim НазваниеРеагента As String Dim Количество As Integer Dim i As Long
Set ЛистДанных = Sheets("Таблица данных") Set ЛистВыбора = Sheets("Основной лист")
НомерКоробки = ЛистВыбора.Range("U38").Value If ЛистВыбора.Range("q1").Value <> "(все)" And ЛистВыбора.Range("q19").Value <> "(все)" Then НазваниеРеагента = ЛистВыбора.Range("q1").Value ElseIf ЛистВыбора.Range("q1").Value = "(все)" And ЛистВыбора.Range("q19").Value <> "(все)" Then НазваниеРеагента = ЛистВыбора.Range("q19").Value ElseIf ЛистВыбора.Range("q19").Value = "(все)" And ЛистВыбора.Range("q1").Value <> "(все)" Then НазваниеРеагента = ЛистВыбора.Range("q1").Value End If
Количество = ЛистВыбора.Range("U39").Value
If ЛистВыбора.Range("Q19").Value = "(Все)" And ЛистВыбора.Range("Q1").Value <> "(Все)" Then For i = 2 To ЛистДанных.Cells(ЛистДанных.Rows.Count, 2).End(xlUp).Row If ЛистДанных.Cells(i, 2).Value = НазваниеРеагента And ЛистДанных.Cells(i, 1).Value = НомерКоробки Then If ЛистДанных.Cells(i, 9).Value >= Количество Then ЛистДанных.Cells(i, 9).Value = ЛистДанных.Cells(i, 9).Value - Количество
MsgBox "Выбрана не та коробка или в коробке недостаточное количество реагента.", vbExclamation ЛистВыбора.Range("U38").ClearContents ЛистВыбора.Range("U39").ClearContents
ElseIf ЛистВыбора.Range("Q1").Value = "(Все)" And ЛистВыбора.Range("Q19").Value <> "(Все)" Then For i = 2 To ЛистДанных.Cells(ЛистДанных.Rows.Count, 3).End(xlUp).Row If ЛистДанных.Cells(i, 3).Value = НазваниеРеагента And ЛистДанных.Cells(i, 1).Value = НомерКоробки Then If ЛистДанных.Cells(i, 9).Value >= Количество Then ЛистДанных.Cells(i, 9).Value = ЛистДанных.Cells(i, 9).Value - Количество MsgBox "Реагенты выданы успешно.", vbInformation ЛистВыбора.Range("U38").ClearContents ЛистВыбора.Range("U39").ClearContents Exit Sub End If End If Next i
MsgBox "Выбрана не та коробка или в коробке недостаточное количество реагента.", vbExclamation ЛистВыбора.Range("U38").ClearContents ЛистВыбора.Range("U39").ClearContents
ElseIf ЛистВыбора.Range("Q19").Value <> "(Все)" And ЛистВыбора.Range("Q1").Value <> "(Все)" Then For i = 2 To ЛистДанных.Cells(ЛистДанных.Rows.Count, 2).End(xlUp).Row If ЛистДанных.Cells(i, 2).Value = НазваниеРеагента And ЛистДанных.Cells(i, 1).Value = НомерКоробки Then If ЛистДанных.Cells(i, 9).Value >= Количество Then ЛистДанных.Cells(i, 9).Value = ЛистДанных.Cells(i, 9).Value - Количество
MsgBox "Выбрана не та коробка или в коробке недостаточное количество реагента.", vbExclamation ЛистВыбора.Range("U38").ClearContents ЛистВыбора.Range("U39").ClearContents End If
End Sub
[/vba]
здравствуйте! помогите пожалуйста найти ошибку в этом макросе. Макрос должен по значениям в ячейках Q1 и Q19 (в Q1 - название реагента, Q19 - формула реагента) которые отображаются по формулам в этих ячейках, уменьшать на выбранное количество из таблицы, которая находится на листе ТАБЛИЦА ДАННЫХ....есть несколько вариантов отображения в этих ячейках данных, когда 1)Q1=все, а Q19=формула реагента(<>все)
2) Q19=все, а Q1=название реагента( <>все) 3) Q1=название реагента (<>все), и Q19=формула реагента (<>все)
я через чатжпт создала код, но к сожалению не все 3 условии, которые описала выше, работают через этот макрос. помогите мне решить эту проблему снизу вставляю тот самый код. [vba]
Код
Sub ВыдатьРеагент() Dim ЛистРеагенты As Worksheet Dim НомерКоробки As String Dim НазваниеРеагента As String Dim Количество As Integer Dim i As Long
Set ЛистДанных = Sheets("Таблица данных") Set ЛистВыбора = Sheets("Основной лист")
НомерКоробки = ЛистВыбора.Range("U38").Value If ЛистВыбора.Range("q1").Value <> "(все)" And ЛистВыбора.Range("q19").Value <> "(все)" Then НазваниеРеагента = ЛистВыбора.Range("q1").Value ElseIf ЛистВыбора.Range("q1").Value = "(все)" And ЛистВыбора.Range("q19").Value <> "(все)" Then НазваниеРеагента = ЛистВыбора.Range("q19").Value ElseIf ЛистВыбора.Range("q19").Value = "(все)" And ЛистВыбора.Range("q1").Value <> "(все)" Then НазваниеРеагента = ЛистВыбора.Range("q1").Value End If
Количество = ЛистВыбора.Range("U39").Value
If ЛистВыбора.Range("Q19").Value = "(Все)" And ЛистВыбора.Range("Q1").Value <> "(Все)" Then For i = 2 To ЛистДанных.Cells(ЛистДанных.Rows.Count, 2).End(xlUp).Row If ЛистДанных.Cells(i, 2).Value = НазваниеРеагента And ЛистДанных.Cells(i, 1).Value = НомерКоробки Then If ЛистДанных.Cells(i, 9).Value >= Количество Then ЛистДанных.Cells(i, 9).Value = ЛистДанных.Cells(i, 9).Value - Количество
MsgBox "Выбрана не та коробка или в коробке недостаточное количество реагента.", vbExclamation ЛистВыбора.Range("U38").ClearContents ЛистВыбора.Range("U39").ClearContents
ElseIf ЛистВыбора.Range("Q1").Value = "(Все)" And ЛистВыбора.Range("Q19").Value <> "(Все)" Then For i = 2 To ЛистДанных.Cells(ЛистДанных.Rows.Count, 3).End(xlUp).Row If ЛистДанных.Cells(i, 3).Value = НазваниеРеагента And ЛистДанных.Cells(i, 1).Value = НомерКоробки Then If ЛистДанных.Cells(i, 9).Value >= Количество Then ЛистДанных.Cells(i, 9).Value = ЛистДанных.Cells(i, 9).Value - Количество MsgBox "Реагенты выданы успешно.", vbInformation ЛистВыбора.Range("U38").ClearContents ЛистВыбора.Range("U39").ClearContents Exit Sub End If End If Next i
MsgBox "Выбрана не та коробка или в коробке недостаточное количество реагента.", vbExclamation ЛистВыбора.Range("U38").ClearContents ЛистВыбора.Range("U39").ClearContents
ElseIf ЛистВыбора.Range("Q19").Value <> "(Все)" And ЛистВыбора.Range("Q1").Value <> "(Все)" Then For i = 2 To ЛистДанных.Cells(ЛистДанных.Rows.Count, 2).End(xlUp).Row If ЛистДанных.Cells(i, 2).Value = НазваниеРеагента And ЛистДанных.Cells(i, 1).Value = НомерКоробки Then If ЛистДанных.Cells(i, 9).Value >= Количество Then ЛистДанных.Cells(i, 9).Value = ЛистДанных.Cells(i, 9).Value - Количество
MsgBox "Выбрана не та коробка или в коробке недостаточное количество реагента.", vbExclamation ЛистВыбора.Range("U38").ClearContents ЛистВыбора.Range("U39").ClearContents End If