2014-07-02 66 views
1

我已經制作了一個漂亮的表單,用於向我的新數據庫添加帳單。現在我需要「提交」按鈕來計算和組織我的工作簿中的信息。爲了保持這個問題的簡單性,我首先關注一張我命名爲billData的工作表。我將需要表單的每個輸入字段自動填充到billData工作表中的下一個可用行。使用VBA表單按鈕單擊更改行的所有列的值單擊

以下是我想出了這麼遠:

Private Sub NB_SubmitButton_Click() 
'NB stands for New Bill 

Dim OwnerName As String 
Dim ExpenseName As String 
Dim CycleValue As String 'such as every day, every week, every month etc. 
Dim OnValue As String 'such as Monday, the 5th, the 10th, etc. 
Dim AndValue As String 'such as 19th, 24th, etc. 
Dim DueAmount As Currency 
Dim SavedAmount As Currency 
Dim NoteValue As String 
Dim x As Long 

NoteValue = NB_NoteTextBox.Value 
SavedAmount = NB_SavedAmountTextBox.Value 
DueAmount = NB_DueAmountTextBox.Value 
AndValue = NB_AndComboBox.Value 
OnValue = NB_OnComboBox.Value 
CycleValue = NB_CycleComboBox.Value 
ExpenseName = NB_ExpenseNameTextBox.Value 
OwnerName = NB_OwerNameTextBox.Value 
x = 1 

For x = 1 To Rows.Count 
    If Worksheets("billData").Range(Cells(x, 1)).Value = "" Or _ 
     IsEmpty(Worksheets("billData").Cells(x, 1).Value) Then 
     Worksheets("billData").Range(Cells(x, 2)).Value = OwnerName 
     Worksheets("billData").Range(Cells(x, 4)).Value = ExpenseName 
     Worksheets("billData").Range(Cells(x, 7)).Value = CycleValue 
     Worksheets("billData").Range(Cells(x, 8)).Value = OnValue 
     Worksheets("billData").Range(Cells(x, 9)).Value = DueAmount 
     Worksheets("billData").Range(Cells(x, 10)).Value = SavedAmount 
     Worksheets("billData").Cells(x, 11).Value = NoteValue 
    Else 
    End If 
Next x 

當我運行通過即時的對於代碼,我不斷收到一條錯誤消息:

Compile Error: Next without For

然後,當我運行所有代碼時,填寫表單中的字段並單擊「提交」按鈕,出現此錯誤:

Run-Time Error '9': Subscript out of range

另外,有沒有更好的方法來獲得我的目標?我應該使用VLookup嗎?

編輯補充截圖:

enter image description here

+2

Error9表明不存在活動工作簿命名爲 「billData」 工作表。這將有助於指出發生錯誤時突出顯示哪一行。您無法通過「即時」窗格運行多行代碼塊。 –

+0

這是Object Viewer的[截圖](http://www.somaofchrist.org/Testing/img/billDataVisual.png)。它認爲__billData__是它的正確名稱。只有一行規則在直接窗格中解釋了_Next沒有For_問題。我仍然得到這個_運行時錯誤'9':儘管下標超出range_錯誤。如果__billData__是正確的名稱,那麼還有什麼可能? – Ester

+0

'billData'是工作表的代碼模塊名稱:工作表選項卡上的名稱是'Bill Data',因此可以使用'billData.Range(...)'或'Worksheets(「Bill Data」)。 。)' –

回答

1
'x = 1 'you don't need this... 

Dim sht As Worksheet 
Set sht = Worksheets("Bill Data") 

For x = 1 To Rows.Count 
    If Len(sht.Cells(x, 1).Value) = 0 Then 
     With sht.Rows(x) 
      '? what goes in ColA ? 
      .Cells(2).Value = OwnerName 
      .Cells(4).Value = ExpenseName 
      .Cells(7).Value = CycleValue 
      .Cells(8).Value = OnValue 
      .Cells(9).Value = DueAmount 
      .Cells(10).Value = SavedAmount 
      .Cells(11).Value = NoteValue 
     End With 
    End If 
Next x