iT邦幫忙

0

表單要把內容給指定的工作表的儲存格

我要先判斷另一個工作表的儲存格是否空的
若是空的話把內容丟給儲存格 並插入今天的日期

For i = 2 To Sheets("Sheet2").Range("A1").End(xlDown).Row
 If Sheets("Sheet2").Cells(i, "A") = "" Then
  Sheets("Sheet2").Cells(i, "A") = data1.Text
  Sheets("Sheet2").Cells(i, "B") = TB4.Text
  Sheets("Sheet2").Cells(i, "C") = "Today()"
 End If
Next

A1是標題 A2是空的
i是從1還是2開始 請指教\

2 個回答

1
海綿寶寶
iT邦超人 1 級 ‧ 2019-02-23 16:47:56
最佳解答

2

另外
這似乎沒有必要使用迴圈
因為你應該沒有要「往下填滿所有的空列」吧

看更多先前的回應...收起先前的回應...

那要如何往下查詢
Sheets("Sheet2").Range("A1").Select Selection.End(xlDown).Select Sheets("Sheet2").Range("A" & ActiveCell.Row + 1) = data1.Text Sheets("Sheet2").Range("B" & ActiveCell.Row + 1) = TB4.Text Sheets("Sheet2").Range("C" & ActiveCell.Row + 1) = Date
我若改成這樣 會被覆蓋掉

paicheng0111 iT邦研究生 1 級 ‧ 2019-02-23 17:06:53 檢舉

填不下去的,因為A2是空白,End(xldown)直接跳到A3就結束了

看看合不合用
如果不合用就隨意修改使用

Sub Macro1()

 Sheets("Sheet2").Range("A65536").End(xlUp).Range("A2").Select
    ActiveCell.Offset(0, 0) = "AText"
    ActiveCell.Offset(0, 1) = "BText"
    ActiveCell.Offset(0, 2) = "=Today()"
End Sub

你是由A1往下走
我改成由A65536往上走
原因是由A1往下走在「只有標題列(沒有資料)時,要寫不同處理方式」

paicheng0111 iT邦研究生 1 級 ‧ 2019-02-23 20:38:51 檢舉

excel 2007(and newer version)的最大列數已經遠大於65536了。
Range("A65536")取代成Cells(Rows.Count, 1)會是比較好的做法。

pcw識破了
我還在用 Excel 2003
/images/emoticon/emoticon25.gif

paicheng0111 iT邦研究生 1 級 ‧ 2019-02-23 23:18:53 檢舉

因為有每個版本的rows.count都不同,所以用rows.count去判斷吧。
我以前也常用Range("A65536")

0
paicheng0111
iT邦研究生 1 級 ‧ 2019-02-23 17:01:01


A1是標題
A2是空的
Sheets("Sheet2").Range("A1").End(xlDown).Row只會等於3

如果你要選到A欄位的最後一個非空白
請用

Sheets("Sheet2").Cells(Rows.Count, "A").End(xlUp).Row

你的程式碼可能要修改成

For i = 2 To Sheets("Sheet2").cells(rows.count, "A").End(xlUp).Row
    If Sheets("Sheet2").Cells(i, "A") = "" Then
        Sheets("Sheet2").Cells(i, "A") = data1.Text
        Sheets("Sheet2").Cells(i, "B") = TB4.Text
        Sheets("Sheet2").Cells(i, "C") = "Today()"
    End If
Next i

我自己摸索 終於成功了 再次多謝

我要發表回答

立即登入回答