2016-12-10 123 views
3

我已經關注this教程xlDown按預期工作

爲了處理按鈕操作。我想每次都在新行上寫數據,單擊按鈕時,代碼覆蓋現有數據或將數據寫入新行(並再次覆蓋它)。

代碼:

Private Sub cmdUnesiUBazu_click() 
    Sheet1.Activate 

    Range("B2").End(xlDown).Offset(1, 0).Select ' want to start write from C2 cell 
    ActiveCell.Value = ActiveCell.Offset(-1, 0).Value + 1 

    ActiveCell.Offset(0, 1).Value = txtSifraOsobe.Value 
    ActiveCell.Offset(0, 2).Value = txtImeIPrezime.Value 
    ActiveCell.Offset(0, 3).Value = txtAdresa.Value 
    ActiveCell.Offset(0, 4).Value = cboGrad.Value 
    ActiveCell.Offset(0, 5).Value = cboDrzava.Value 
    ActiveCell.Offset(0, 7).Value = txtDatumRodjenja.Value 

    End Sub 
+0

我不能複製這一點 - 代碼工作對我很好,但實際使用的參考,而不是'ActiveCell'的d'Offset'會更好。 – Comintern

+0

我不明白'ActiveCell.Value = ActiveCell.Offset(1,0).Value + 1'這一行。由於您正在使用'Range(「B2」)。End(xlDown)',這可能是列中的最後一個單元格。爲什麼要從下一個空行取數據。除非你確定它不是空的 – nightcrawler23

+3

如果你想得到列B中的最後一行,你應該使用'Range(「B」&Rows.Count).End(xlUp).Offset(1,0).Select' – nightcrawler23

回答

2

最好是指細胞直接,而不是選擇他們並參照ActiveCell。手錶Excel VBA Introduction Part 5 - Selecting Cells (Range, Cells, Activecell, End, Offset)

它看起來像你試圖使一個唯一的標識符(ID)引用你的記錄。上述ActiveCell.Value = ActiveCell.Offset(-1, 0).Value + 1

Sheet1.Activate 

With Range("B2").End(xlDown).Offset(1, 0) 
    .Value = .Offset(-1, 0).Value + 1 
    .Offset(0, 1).Value = txtSifraOsobe.Value 
    .Offset(0, 2).Value = txtImeIPrezime.Value 
    .Offset(0, 3).Value = txtAdresa.Value 
    .Offset(0, 4).Value = cboGrad.Value 
    .Offset(0, 5).Value = cboDrzava.Value 
    .Offset(0, 7).Value = txtDatumRodjenja.Value 
End With 
+0

實際上,在我的項目中顯示Offset(-1,0).Value + 1,當我在這裏複製代碼時出現錯誤。但它仍然很奇怪,並且當沒有任何填充數據時,它會寫入第一行,然後它會覆蓋它。 – MGKP

+0

@MGKPIf您發佈數據的屏幕截圖我會解釋爲什麼它正在做它正在做的事情。 –

1

ActiveCell.Value = ActiveCell.Offset(, 0).Value + 1相反,你應該加1單元格的值。如果將更爲整潔,避免:但是您要添加1到下面的空白單元格Activate和細胞通過細胞Offsets,即可能是:

Dim ws As Worksheet 
Dim rng1 As Range 

Set ws = Sheets(1) 
Set rng1 = ws.Cells(Rows.Count, "B").End(xlUp) 
rng1.Offset(1, 1).Resize(1, 7) = Array(Me.txtSifraOsobe, Me.txtImeIPrezime, Me.txtAdresa, Me.cboGrad, Me.cboDrzava, , Me.txtDatumRodjenja)