2012-04-23 3 views
1

Я искал в Интернете, и я не могу понять, что у меня проблема. Любая помощь приветствуется. Мой код выглядит следующим образом:VBA Разделение одной и той же строки несколько раз

Private Sub removebutton_Click() 
Dim iRow As Long 
Dim ws As Worksheet 
Dim removebox As String 
Set ws = Worksheets("Sheet2") 
removebox = InputBox("Please Scan the Barcode to be added", "Add Coin", "Scan Barcode Here") 
'Find the next blank row' 
iRow = ws.Cells.Find(What:="*", SearchOrder:=xlRows, _ 
SearchDirection:=xlPrevious, LookIn:=xlValues).Row + 1 

'Promt User To Actually input data if they have not entered anything' 
If Trim(Me.removebox.Value) = "" Then 
Me.removebox.SetFocus 
MsgBox "Please enter barcode" 
Exit Sub 
End If 

'For 20 digit barcodes split into 4 parts and record the data in the next blank row' 
If Len(removebox) = 20 Then 
Dim s1 As String 
s1 = removebox.Substring(1, 6) 
Dim s2 As String 
s2 = removebox.Substring(7, 8) 
Dim s3 As String 
s3 = removebox.Substring(9) 
Dim s4 As String 
s4 = removebox.Substring(10, 20) 

ws.Cells(iRow, 1).Value = Me.s1.Value 
ws.Cells(iRow, 2).Value = Me.s2.Value 
ws.Cells(iRow, 3).Value = Me.s3.Value 
ws.Cells(iRow, 4).Value = Me.s4.Value 

'For 18 Digit barcodes spilt into 3 parts and record the data in the next blank row' 
ElseIf (removebox) = 18 Then 
Dim s5 As String 
s5 = removebox.Substring(1, 6) 
Dim s6 As String 
s6 = removebox.Substring(7, 8) 
Dim s7 As String 
s7 = removebox.Substring(9, 18) 

ws.Cells(iRow, 1).Value = Me.s5.Value 
ws.Cells(iRow, 2).Value = Me.s6.Value 
ws.Cells(iRow, 3).Value = Me.s7.Value 

'If not 20 or 18 digit then it is 16, split into 3 parts and record the data in the next blank row' 
Else 
Dim s8 As String 
s8 = removebox.Substring(1, 6) 
Dim s9 As String 
s9 = removebox.Substring(7, 8) 
Dim s10 As String 
s10 = removebox.Substring(9, 16) 

ws.Cells(iRow, 1).Value = Me.s8.Value 
ws.Cells(iRow, 2).Value = Me.s9.Value 
ws.Cells(iRow, 3).Value = Me.s10.Value 
End If 

End Sub 

Так что я испортил, и весь код должен был быть, чтобы удалить элемент, и вместо этого он добавляет элемент, я понимаю, что. Моя проблема в том, что s1 = removebox.Substring(1, 6) подсвечивает переменную removebox и сообщает мне Compiler Error: Invalid Qualifier. Если кто-то может дать мне возможное решение, я знаю, что я делаю что-то неправильно, но при сканировании штрих-кода он входит в число 20, 18 или 16 цифр, но мне нужно сохранить детали отдельно, чтобы создать легкий look-up для базы данных.

Благодарим вас за любую помощь или предложения.

ответ

0

Глава общественного питания избил меня. Но я буду вставлять код, так как я уже работал над ним.

Штриховой код он приходит в качестве 20, 18, или 16 цифр целого числа

Примечание: На основании выше, я не нарушая его в 4 равные части. Я просто преобразовал ваш существующий код.

Option Explicit 

Private Sub removebutton_Click() 
    Dim iRow As Long 
    Dim ws As Worksheet 
    Dim removebox As String 

    Set ws = Worksheets("Sheet2") 

    removebox = InputBox("Please Scan the Barcode to be added", _ 
    "Add Coin", "Scan Barcode Here") 

    '~~> Prompt User To Actually input data if they have not entered anything 
    If Len(Trim(removebox)) = 0 Then 
     MsgBox "Please enter barcode", vbCritical, "Please Try again" 
     Exit Sub 
    End If 

    '~~> Find the next blank row 
    iRow = ws.Cells.Find(What:="*", SearchOrder:=xlRows, _ 
    SearchDirection:=xlPrevious, LookIn:=xlValues).Row + 1 

    ws.Cells(iRow, 1).Value = Left(removebox, 6) 
    ws.Cells(iRow, 2).Value = Mid(removebox, 7, 8) 

    Select Case Len(removebox) 
     '~~> For 20 digit barcodes split into 4 parts and record 
     '~~> the data in the next blank row' 
     Case 20 
      ws.Cells(iRow, 3).Value = Mid(removebox, 9) 
      ws.Cells(iRow, 4).Value = Mid(removebox, 10, 20) 
     '~~> For 18 Digit barcodes spilt into 3 parts and record 
     '~~> the data in the next blank row' 
     Case 18 
      ws.Cells(iRow, 3).Value = Mid(removebox, 9, 18) 
     '~~> If not 20 or 18 digit then it is 16, split into 3 
     '~~> parts and record the data in the next blank row' 
     Case Else 
      ws.Cells(iRow, 3).Value = Mid(removebox, 9, 18) 
    End Select 
End Sub 
+0

Благодарим вас обоих СООО много! Ты просто спас меня! Я очень ценю вашу готовность помочь кому-то, кто все еще пытается понять все! (Начальник общественного питания я попытался @ вам в этом, но мне не разрешили) –

+0

Рад помочь ... Теперь просто не копируйте его;) Попытайтесь понять, как это работает :) –

+0

Я^_ _ ^, еще раз спасибо. Хотя по какой-то причине мой поиск следующей пустой строки теперь как-то сломался. Он продолжает говорить мне: «Ошибка времени выполнения 91»: переменная объекта или с блоком не установлена ​​», любые идеи? –

Смежные вопросы