2017-04-21 310 views
0

我有這樣的代碼來選擇第一個空行來填充,Excel的VBA填充第一個空行與第一行空列A

Set myData = Workbooks.Open("C:\Users\Charles\Desktop\WFACS - Work Order System\Work Order Management System.xlsm") 
Worksheets("Sheet5").Select 
Worksheets("Sheet5").Range("A3").Select 
RowCount = Worksheets("Sheet5").Range("A3").CurrentRegion.Rows.Count 
With Worksheets("Sheet5").Range("A2") 
    .Offset(RowCount, 0) = TaskType 
    .Offset(RowCount, 1) = TimeSensitive 
    .Offset(RowCount, 2) = TimeSensitiveDate 
    .Offset(RowCount, 3) = TodaysDate 
    .Offset(RowCount, 4) = Address 
    .Offset(RowCount, 5) = Location 
    .Offset(RowCount, 6) = Department 
    .Offset(RowCount, 7) = ContactName 
    .Offset(RowCount, 8) = ContactEmail 
    .Offset(RowCount, 9) = Description 

我想改變它來填充具有第一排A欄空使用此代碼:

Range("A1").End(xlDown).Offset(1, 0).Select 

但每次我把它放到我結束了一個運行時錯誤(9)的代碼時間:下標越界。

有人可以幫我把這兩個放在一起,我知道這裏有其他線程談論這個問題,但沒有任何東西幫助我解決這個特定的錯誤。

回答

2

假設你的工作表在單元格A1和A2的東西,然後將下面的代碼應該工作:

Set myData = Workbooks.Open("C:\Users\Charles\Desktop\WFACS - Work Order System\Work Order Management System.xlsm") 
With myData.Worksheets("Sheet5").Range("A1").End(xlDown).Offset(1, 0).EntireRow 
    .Cells(1, "A").Value = TaskType 
    .Cells(1, "B").Value = TimeSensitive 
    .Cells(1, "C").Value = TimeSensitiveDate 
    .Cells(1, "D").Value = TodaysDate 
    .Cells(1, "E").Value = Address 
    .Cells(1, "F").Value = Location 
    .Cells(1, "G").Value = Department 
    .Cells(1, "H").Value = ContactName 
    .Cells(1, "I").Value = ContactEmail 
    .Cells(1, "J").Value = Description 
End With 

這避免了任何Select語句。

如果你沒有在細胞A2任何數據,那麼這將是更好地使用:

With myData.Worksheets("Sheet5").Cells(myData.Worksheets("Sheet5").Rows.Count, "A").End(xlUp).Offset(1, 0).EntireRow 

從底部和搜索工作向上找上次使用的電池。 (但不處理哪裏有空白單元格中最後一個非空單元格上面的情況。)


Edit(對於「高級用戶」):

灰分在評論中指出,這可以這樣做:

Set myData = Workbooks.Open("C:\Users\Charles\Desktop\WFACS - Work Order System\Work Order Management System.xlsm") 
myData.Worksheets("Sheet5").Range("A1").End(xlDown).Offset(1, 0).Resize(, 10).Value = Array(_ 
       TaskType, _ 
       TimeSensitive, _ 
       TimeSensitiveDate, _ 
       TodaysDate, _ 
       Address, _ 
       Location, _ 
       Department, _ 
       ContactName, _ 
       ContactEmail, _ 
       Description) 
+0

不知道,但我懷疑OP需要像'.Cells(Rows.count, 「A」)結束(xlUp).Offset(1,0)'。但是,除此之外,你們爲什麼討厭使用數組? :( –

+0

@ASH大聲笑 - 我正在編輯我的答案,因爲你正在輸入你的評論(而且我討厭數組是因爲如果他們仍然在努力去理解基本知識,那麼教育人們使用「完美」代碼是非常困難的。) – YowE3K

+1

你不喜歡'.Cells(1,「A」)。Resize(,10).Value = Array(TaskType,TimeSensitive等等)'?數組不僅可以縮短代碼,還可以最小化Excel-VBA交換;) –