請問 Excle 巨集標集中-Range使用報錯-1004-Range方法(global物件)-(已解決)

想寫個自訂功能給家人抓資料用,但在跑for迴圈時 遇到了錯誤
改用Range("A2:A") 也是不行
但想在回圈之前就取得範圍 但也不行會錯
請大大指點出錯誤點,感恩



Function FindBaseRow() As Long
Dim i As Long
'Dim getRange As Range
'Set getRange = Range("日期")
Worksheets("資料庫").Activate
i = ActiveCell.Row

For i = ActiveCell.Row To Range("日期").Count <-這行出錯
If IsEmpty(Cells(i, Range("日期").Column)) Then
FindBaseRow = i
Exit Function
End If
Next i
End Function



------------資料庫主要的宣告----------

'建立新資料頁
'設定格式、顏色
'工作頁保護
Sub CreatNewDatabase()
ThisWorkbook.Unprotect jwuue9t2, True, True
Dim newSheetName As String
newSheetName = setName()
Sheets.Add.name = newSheetName '決定名稱
Sheets(newSheetName).Tab.ColorIndex = (Sheets.Count + 1)

setNewDatabaseFormat
ThisWorkbook.Unprotect jwuue9t2, True, True

End Sub

'回傳資料庫的命名
Function setName() As String
setName = "資料庫" & (Sheets.Count + 1)
End Function

'設定格式
Sub setNewDatabaseFormat()

'設定Worksheet格式
With Cells
.Borders(xlEdgeTop).LineStyle = xlContinuous
.Borders(xlEdgeLeft).LineStyle = xlContinuous
.Borders(xlEdgeBottom).LineStyle = xlContinuous
.Borders(xlEdgeRight).LineStyle = xlContinuous
.Borders(xlInsideVertical).LineStyle = xlContinuous
.Borders(xlInsideHorizontal).LineStyle = xlContinuous
.Font.Bold = True
.VerticalAlignment = xlCenter
.HorizontalAlignment = xlCenter
End With

'設定日期格式**********************************************************
With Columns(1)
.name = "日期"
.ColumnWidth = 8
.Interior.ColorIndex = 36
End With



---------自訂的Form---------

Private Sub CommandButton1_Click()
Dim InputRow As Long
Dim year As Long
Dim month As Long
Dim day As Long
Dim yearTransfer As Long


year = Val(DataKeyinForm.日期.Value) / 10000
MsgBox year
month = (Val(DataKeyinForm.日期.Value) - (year * 10000)) / 100
MsgBox month
day = Val(DataKeyinForm.日期.Value) Mod 100
MsgBox day

If (DataKeyinForm.日期.Text = "") Then
MsgBox "日期未輸入"
Exit Sub
End If

InputRow = FindBaseRow '找出要輸入的列
MsgBox FindBaseRow
Cells(InputRow, "A").Value = DataKeyinForm.日期.Value '輸入日期
Cells(InputRow, "B").Value = Week(year, month, day) '輸入週次
2020-09-06 9:05 發佈
brian7261 wrote:
For i = ActiveCell.Row To Range("日期").Count <-這行出錯


抱歉喔,沒看到您有檔案提供,無法確實了解,您執行的實際狀況(內容)為何.....

單以這句來看,您應該要在該檔案(工作表)內先建立一個「日期」名稱範圍?如果沒有(當您在Function FindBaseRow() As Long 這區塊「單獨」F8逐行執行時....),這行出錯看來是必然的。

另外,其他部分好像也有問題?底下:
.........
ThisWorkbook.Unprotect jwuue9t2, True, True
.........
ThisWorkbook.Unprotect jwuue9t2, True, True
.........
'設定Worksheet格式(這句之後)
.....

~~或許是我用的版本太舊?以上也會出錯~~呵。
Der,misser1
感謝 我找到解法了
目前可以正確地找到 最後一行並且新增資料
但我不理解的是為何我的Range不能帶入Range("A2:A") & Range("日期")<----這樣會報錯 日期為自訂Form的日期欄位名稱

Function FindBaseRow() As Long
Dim i As Long
Dim getRange As Range
Set getRange = Range("A2", ActiveCell.End(xlDown))
Worksheets("資料庫").Activate
i = ActiveCell.Row

For i = ActiveCell.Row To getRange.Count
If IsEmpty(Cells(i, getRange.Column)) Then
FindBaseRow = i
Exit Function
End If
Next i
End Function
misser wrote:
抱歉喔,沒看到您有檔(恕刪)


感謝 找到了解法囉~可能是我的版本超舊所導致的吧
因為這function 是用在自訂的Form裡面
只是menthod的用法讓我困惑

感謝大大的回覆
brian7261 wrote:
感謝大大的回覆


不客氣喔,其實也沒幫到您啥忙,呵。

brian7261 wrote:
Range("A2:A") & Range("日期")


現在人沒在電腦旁邊,沒得測試,不過我想,這句語法好像怪怪的?

Range("A2:A") ,不是應該要寫成Range("A2:A10") 之類的?

然後你後面再用了一個Range來做連結,語法是正確的嗎?(Rangd(xx)&Range(xx))

然後您還是要考慮一下,日期是form上的物件?是用textbox來讓使用者輸入嗎?
您用:Range("日期")傳回值的是您要的嗎?(這寫法也得確認一下,能傳回您要的值?)

個人覺得,您後來改的語法,就沒啥問題:
For i = ActiveCell.Row To getRange.Count
i從A數值,迴圈到B數值

有時程式除錯是很讓人抓狂的一件事,語法寫錯,拼字錯誤,邏輯流程不順....其中,傳回的結果到底是數值,範圍,還是....?確認清楚也很重要。因為後續拿來當參數運用就可能出錯。

既然檔案(form)在您手上,您也已經找到解決方法,那就不用急....放鬆一下,甚至先去忙別的事,轉換思路,等您哪天有空再回來慢慢除錯,搞不好就能立刻解決也不一定。(當然,直接cue一下版上其他前輩高手,出手幫您,也是個好方法,哈哈。)

祝您後續工作一切順利囉!
Der,misser1
內文搜尋
X
評分
評分
複製連結
Mobile01提醒您
您目前瀏覽的是行動版網頁
是否切換到電腦版網頁呢?