2012-11-20 116 views
0

我是Excel中VBA的新手,我有一個基本的用戶表單,它將數據放入工作表中。來自表格的數據將在單元格B13到G13中輸入,然後每隔一個條目在下一行完成。 B14-G14。通過Excel中的UserForm將數據輸入到電子表格中

我有這樣的代碼已經但是它不是將數據輸入正確的細胞,並重復輸入它在同一行...

 Private Sub CommandButton1_Click() 

Dim lngWriteRow As Long 

Dim ws As Worksheet 
Set ws = Worksheets("Sheet1") 

lngWriteRow = ws.Cells(Rows.Count, 1) _ 
.End(xlUp).Offset(1, 0).Row 

If lngWriteRow < 13 Then lngWriteRow = 13 

    ws.Range("B" & lngWriteRow) = TextBox1.Value 
    ws.Range("C" & lngWriteRow) = TextBox2.Value 
    ws.Range("D" & lngWriteRow) = TextBox3.Value 
    ws.Range("E" & lngWriteRow) = ComboBox1.Value 
    ws.Range("F" & lngWriteRow) = TextBox4.Value 
    ws.Range("G" & lngWriteRow) = ComboBox2.Value 

End Sub 

我將如何實現這一目標? (已經有下面的行數據)提前

感謝

+0

您應該刪除其他問題並在此處進行編輯。我給你的解決方案有什麼問題?它做了你最初要求的 - 那麼,改變了什麼? – Jook

+0

@Jook,實現像這樣的NextRow = Cells(Rows.Count,「A」)。End(xlUp).Row + 1',它應該總是進入下一行。 – CustomX

+0

@ t.thielemans我認爲他的問題並沒有進入下一行,但從第13行開始,然後到下一行獲取更多數據。 – Jook

回答

5

在這裏,這行是錯誤的:

lngWriteRow = ws.Cells(Rows.Count, 12) _ 
.End(xlUp).Offset(1, 0).Row 

因爲你指的是12列,你不改變 - 因此行保持不變。

用這個代替

lngWriteRow = ws.Cells(Rows.Count, 2) _ 
.End(xlUp).Offset(1, 0).Row 

編輯:

如果你想要一個初始偏移,啓動數據輸入@排13,使用:

lngWriteRow = ws.Cells(Rows.Count, 2) _ 
.End(xlUp).Offset(1, 0).Row 

if lngWriteRow < 13 then lngWriteRow = 13 

您不能使用Offset(12,0),因爲您每次都會使用它!

編輯

只是要一清二楚,這在這裏工作的空白紙,粘貼代碼作爲工作表宏和按F5多次時。所以,除非有解釋,否則這是錯誤的,我認爲這個問題已經解決了。

Private Sub Test() 

Dim lngWriteRow As Long 

Dim ws As Worksheet 
Set ws = Worksheets("Sheet1") 

lngWriteRow = ws.Cells(Rows.Count, 2) _ 
.End(xlUp).Offset(1, 0).Row 

If lngWriteRow < 13 Then lngWriteRow = 13 

    ws.Range("B" & lngWriteRow) = "test" 
    ws.Range("C" & lngWriteRow) = "test" 
    ws.Range("D" & lngWriteRow) = "test" 
    ws.Range("E" & lngWriteRow) = "test" 
    ws.Range("F" & lngWriteRow) = "test" 
    ws.Range("G" & lngWriteRow) = "test" 

End Sub 

編輯

一些郵件後,這裏是解決這個謎:它沒有說明,有充滿電池的下方,其中記載。

所以對於COL-B它更像

title-row 
row13 
row.. 
row.. 
row63 
space 
other stuff 

基本修改建議的工作 - 但他們看上去在B列全片,這是問題的最後填充的單元。

這裏是解決方案是:

lngWriteRow = ws.Cells(ws.Range("B12:B63")Rows.Count, 2) _ 
.End(xlUp).Offset(1, 0).Row 

而且給你的方式有些explanaition:

不能使用(Rows.Count,1)代替(Rows.Count,2),因爲你是在列添加數據BG,這是2-7。你必須使用2-7,因爲你正在尋找最後一排。如果您使用1,那麼當您嘗試添加新數據時,您正在查找列A中的最後一個值,該值不會更改。

您不能使用Offset(12,0),因爲這會在您每次插入數據時創建一個偏移量 - 所以最終會以12行爲單位排列。

最後,您不能使用Rows.Count,因爲這是65536左右,並且您在要添加的數據下面有數據。 End(xlUp)將從太遠的位置查找,並停在列B中的最後一個單元格中,該單元格中包含數據 - 但這不會是B13,除非B14-B65536中沒有數據。

希望這有助於理解這裏的動態。

+0

+1也加入檢查,以確保值不低於13;) – CustomX

+0

沒有工作,它仍然只會把它放在同一個單元 – user1662306

+0

@ user1662306那麼必須有別的東西,我測試了這個,工作正常。 – Jook

相關問題