Я написал макрос, который делает то, что мне нужно в отношении вывода. Тем не менее, было бы идеально, чтобы командная кнопка отображалась сразу же после открытия книги. Я предполагаю, что мне нужно сделать его частным, а не общедоступным, но я совершенно не знаком с этим. Кто-нибудь сможет подсказать, как я могу заставить это работать.
Кроме того, я получил исходный код, который обращается, когда я хочу выйти из пользовательской формы, или нажимаю «отменить» или «ок». Сможет ли кто-нибудь связать все это для меня?
Sub SerialSalesOrderComp()
Dim CodeSalesOrder As Variant
Dim TestSerial As Variant
Dim DeviceSerial As Variant
Dim SalesCodeLength As Integer
Dim TestSerialLength As Integer
Dim DeviceSerialLength As Integer
Dim RngD As Range
Range("D1:D3").Clear
StartHandler:
Do
CodeSalesOrder = InputBox("Please Scan Page...")
Range("D1").Value = CodeSalesOrder
SalesCodeLength = Len(CodeSalesOrder)
If SalesCodeLength = 13 Then Exit Do
MsgBox "Sales Code Requires Format"
MsgBox "Please Try Again"
GoTo StartHandler
Loop
StartHandler1:
Do
TestSerial = InputBox("Please Scan Test Page")
Range("D2").Value = TestSerial
TestSerialLength = Len(TestSerial)
If TestSerialLength = 11 Then Exit Do
MsgBox "Sales Code Requires Format YYY..."
MsgBox "Please Try Again"
GoTo StartHandler1
Loop
StartHandler2:
Do
DeviceSerial = InputBox("Please Scan")
Range("D3").Value = DeviceSerial
DeviceSerialLength = Len(DeviceSerial)
If DeviceSerialLength = 11 Then Exit Do
'Do Nothing
MsgBox "Serial Number Requires Format YYY..."
MsgBox "Please Try Again"
GoTo StartHandler2
Loop
SalesOrderNum = Left(CodeSalesOrder, InStr(CodeSalesOrder, "-") - 1)
If StrComp(TestSerial, DeviceSerial) = 0 Then
Dim TestSerialLetter As Variant
TestSerialNum1 = Left(Right(TestSerial, Len(TestSerial)), Len(TestSerial) - 8)
TestSerialLetter = Right(Left(TestSerialNum1, Len(TestSerialNum1)), Len(TestSerialNum1) - 2)
DeviceSerialNum1 = Left(Right(DeviceSerial, Len(DeviceSerial)), Len(DeviceSerial) - 8)
DeviceSerialNum = Right(Left(DeviceSerialNum1, Len(DeviceSerialNum1)), Len(DeviceSerialNum1) - 2)
Else:
MsgBox "Do Not Match - Report to Supervisor Immediately"
GoTo ExitHandler
End If
Dim RngNomenclature As Variant
Dim DeviceNumCode1 As String
RngNomenclature = ThisWorkbook.Sheets(1).Range("A2:B" & ThisWorkbook.Sheets(1).Cells(ThisWorkbook.Sheets(1).Rows.Count, 1).End(xlUp).Row).Value2
DeviceNumCode = Application.WorksheetFunction.VLookup(TestSerialLetter, RngNomenclature, 2, False)
If StrComp(DeviceNumCode, SalesOrderNum, vbBinaryCompare) = 0 Then
MsgBox "Device Label Type Verification Complete"
Else:
MsgBox "Do Not Match - Report to Supervisor Immediately"
GoTo ExitHandler
End If
ExitHandler:
End Sub
Public Property Get Cancelled() As Boolean
Cancelled = IsCancelled
End Property
Private Sub OkButton_Click()
Me.Hide
End Sub
Private Sub CancelButton_Click()
OnCancel
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = VbQueryClose.vbFormControlMenu Then
Cancel = True
OnCancel
End If
End Sub
Private Sub OnCancel()
IsCancelled = True
Me.Hide
End Sub
'Private IsCancelled As Boolean
Сам макрос используется для проверки совпадения трех строк в столбце D с определенным интеллектом символов.
В целом первые 3 буквы в ячейке D1 сравниваются с «числом» в столбце B. Это «число» в столбце B получается путем взятия третьего символа в ячейках D2 и D3. Этот 3-й символ сравнивается со столбцом А. Он находит его совпадающим, а затем берет соответствующий «номер» из столбца B в той же строке. Это «число» из столбца B затем сравнивается с первыми 3 буквами в ячейке D1. Если он находит совпадение, он проверяется. Если это не так, сообщите об этом.