У меня есть текстовое поле Job
в Form2
, и у меня есть несколько текстовых полей в Form1
.
Допустим, в form1
у меня есть Textbox1
, который есть RollFromInventory
, Textbox2
есть RollFromMachine1
, Texbox3
есть RollFromMachine2
и так далее, предположим, что есть 4 других машины, то есть четыре других текстовых поля.
Когда я хочу заполнить текстовое поле Job
в Form2
, я хочу написать цикл If
, который должен искать текстовое поле, в котором есть значение, заполненное в form1
(будет только одно текстовое поле, которое будет иметь значение среди всех доступных текстовых полей в form1
), то есть либо RollFromInventory
будет иметь значение, либо RollFromMachine1
будет иметь значение, либо RollFromMachine2
..
Я не уверен в логике цикла, поэтому я не могу понять, как это сделать.
В настоящее время код, который я написал, в основном предназначен для заполнения объединенных значений (я не предоставляю этот код, потому что это усложнит задачу).
и синтаксис (о том, как проверить, имеет ли текстовое поле значение, т.е. я использую не нуль или какой подход рекомендуется).
Самый простой подход может состоять в том, чтобы заполнить Источник управления вашего текстового поля Job
в Form2
оператором Switch
, подобным следующему:
=Switch(
[Forms]![Form1]![RollFromInventory] is not null, [Forms]![Form1]![RollFromInventory],
[Forms]![Form1]![RollFromMachine1] is not null, [Forms]![Form1]![RollFromMachine1],
[Forms]![Form1]![RollFromMachine2] is not null, [Forms]![Form1]![RollFromMachine2],
[Forms]![Form1]![RollFromMachine3] is not null, [Forms]![Form1]![RollFromMachine3]
)
Хотя это не особенно красиво и попахивает плохим дизайном интерфейса — похоже, что набор переключателей и одно текстовое поле были бы более подходящими для этого сценария.
Если вы хотите реализовать это в VBA, вы можете использовать набор вложенных операторов If
или выражений Nz
, например:
Forms![PrinterWaxLabel].JOB = Nz(Nz(InvPW, FHPW), WxPW)
Я сейчас собираюсь уйти с работы. Я попробую это завтра, но я получил общее представление о том, что вы пытаетесь сказать. Не уверен, правильно ли я понимаю опцию переключателя, но я вроде понимаю, что вы имеете в виду. Я тоже попробую. Еще раз спасибо за это предложение, оно очень полезно.
о, подождите, я поторопился .. на самом деле это не сработало. Это дает мне ошибку
Это не позволяло мне использовать Switch в vb studio. Понятия не имею почему.
какая-то синтаксическая ошибка, я уверен, что Switch работает (но я абсолютный новичок в vba и кодировании, поэтому мне трудно правильно понять синтаксис). Я силен только в логике :D
@NewAtSQL Предоставленный оператор Switch
предназначался для использования в Источник управления (как указано в моем ответе), а не в функции VBA. Если вы хотите использовать VBA, я бы предложил использовать либо вложенные операторы If
, либо набор вложенных выражений Nz
.
Я написал код для достижения того, чего хотел:
If Len(Me.InvPW.Value & "") > 0 Then
Forms![PrinterWaxLabel].JOB = Me.InvPW.Value
Me.JOB.SetFocus
Else
If Len(Me.FHPW & "") > 0 Then
Forms![PrinterWaxLabel].JOB = Me.FHPW.Value
Me.JOB.SetFocus
Else
If Len(Me.WxPW.Value & "") > 0 Then
Forms![PrinterWaxLabel].JOB = Me.WxPW.Value
Me.JOB.SetFocus
End If
End If
End If
Я полагаю, код за кнопкой должен быть соответствующим, мне нужна помощь с логикой цикла If.