2013-11-24 3 views
1

Я новичок в VBA, и я пытаюсь получить данные из формы vba в таблицу электронных таблиц. Я получаю сообщение об ошибке: Ошибка времени выполнения 1004, определение приложения или объектная ошибка. Строка кода ему флаги с ошибкой является: .Offset(RowCount, 0).Value = Me.FirstnameBox.Valueотправить данные из формы в таблицу электронных таблиц

Вот мой код:

Private Sub SubmitNewUser_Click() 

Dim RowCount As Long 
Dim ctl As Control 

    ' Check user input 
    If Me.FirstnameBox.Value = "" Then 
     MsgBox "Please enter the users firstname.", vbExclamation, "Add New User" 
     Me.FirstnameBox.SetFocus 
    Exit Sub 
    End If 

    If Me.SurnameBox.Value = "" Then 
     MsgBox "Please enter the users surname.", vbExclamation, "Add New User" 
     Me.SurnameBox.SetFocus 
    Exit Sub 
    End If 

    If Me.AccessBox.Value = "" Then 
     MsgBox "Please enter the user number.", vbExclamation, "Add New User" 
     Me.AccessBox.SetFocus 
    Exit Sub 
    End If 

    If Not IsNumeric(Me.AccessBox.Value) Then 
     MsgBox "The user number must only contain a number.", vbExclamation, "Add New User" 
     Me.AccessBox.SetFocus 
    Exit Sub 
    End If 

    If Me.SecBox.Value = "" Then 
     MsgBox "Please enter the users security number.", vbExclamation, "Add New User" 
     Me.SecBox.SetFocus 
    Exit Sub 
    End If 

    Dim iRow As Long 
    Dim ws As Worksheet 
    Set ws = Worksheets("Sheet2") 

    'find first empty row in database 
    iRow = ws.Cells(Rows.Count, 1) _ 
    .End(xlUp).Offset(1, 0).Row 

    If WorksheetFunction.CountIf(ws.Range("D1", ws.Cells(iRow, 1)), Me.AccessBox.Value) > 0 Then 
     MsgBox "Duplicate Code Found", vbCritical 
     Exit Sub 
    End If 

     ' Write data to worksheet 
     RowCount = Worksheets("Sheet2").Range("A1").CurrentRegion.Rows.Count 
     With Worksheets("Sheet2").Range("A1") 
      .Offset(RowCount, 0).Value = Me.FirstnameBox.Value 
      .Offset(RowCount, 1).Value = Me.MiddlenameBox.Value 
      .Offset(RowCount, 2).Value = Me.SurnameBox.Value 
      .Offset(RowCount, 3).Value = Me.AccessBox.Value 
      .Offset(RowCount, 4).Value = Me.SecBox.Value 
     End With 

     End Sub 
+0

Что такое значение RowCount при его ошибках? Вы можете добавить в 'msgbox RowCount' непосредственно перед ошибкой для проверки. – Sam

+1

Я отредактировал ваш заголовок. Пожалуйста, смотрите: «Если вопросы включают« теги »в их названиях?] (Http://meta.stackexchange.com/questions/19190/), где консенсус« нет, они не должны ». –

+0

Привет Сэм, 65536 - это показанное значение. Джон - извинения. – Brunette

ответ

0

Попробуйте изменить RowCount = Worksheets("Sheet2").Range("A1").CurrentRegion.Rows.Count к

RowCount = Worksheets("Sheet2").Cells(Worksheets("Sheet2").Rows.Count,1).End(XlUp).Row 

Если RowCount установлен в 65536, то пытается компенсировать из ячейки A1 будет A65537 и вызовет ошибку (при условии, что вы используете Excel 2003), так как 65536 - это максимальное количество строк.

+0

Сэм, который сработал хорошо. Я изменил «Строка + 1» на «Строка + 0», так что все строки использовались в качестве примера, который вы дали, оставив строку между каждой записью. :-) Спасибо! – Brunette

+0

@Brunette не проблема. Рад, что смог помочь. – Sam

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