2012-11-22 71 views
0

的一些問題我正在試驗(代碼,因爲它是有效的)與一些將數據寫入表的用戶表單代碼。 ST是一些命名範圍:有關與聲明

With Range(ST) 
    .Cells(Range(ST).Count).Offset(1, 0).EntireRow.Insert 
    .Resize(Range(ST).Rows.Count + 1).Name = ST 
    .Cells(Range(ST).Rows.Count, 1) = Range(ST).Rows.Count - 1 
    .Cells(Range(ST).Rows.Count, 2) = TextBox2.Text 
End With 

我的問題是:

爲什麼我可以改寫爲下面的第二和第三行沒有它影響最終結果

.Cells(.Count).Offset(1, 0).EntireRow.Insert 
    .Resize(.Rows.Count + 1).Name = ST 

但更改其他行例如

.Cells(.Rows.Count, 2) = TextBox2.Text 

導致應該包含01的表上的條目返回空白單元格。

感謝(重碼的任何其他雜項意見也歡迎)

編輯:

不幸的是我貼正是因爲它的這個問題是你們說的不是行爲。在詳細閱讀幫助文件後,我相信下面這行:

「表達式在進入塊時計算一次,不能從With塊內重新分配表達式。

意味着:

.Resize(Range(ST).Rows.Count + 1).Name = ST 

是問題,並採取了兩條線:

.Cells(Range(ST).Count).Offset(1, 0).EntireRow.Insert 
.Resize(Range(ST).Rows.Count + 1).Name = ST 

之外如預期的那樣與塊和一切工作!我有正確的解釋嗎? 如果我上傳文件,會有人感興趣嗎? (玩具實驗代碼少於幾行)

+2

刪除'範圍(ST)'內'終with'不應有任何區別的代碼 –

回答

2

With ... End聲明非常有用;它有助於更​​快的編碼以及程序執行。更多你可以閱讀here

關於你的問題;您應該能夠在With ... End聲明中的所有行中刪除Range(ST)

+0

+ 1非常真實的: ) –

+0

欣賞它:-) – salih0vicX

+0

嗨不幸的是,事情並沒有這樣。我已經對我認爲問題可能是什麼進行了編輯。你怎麼看呢?謝謝。 –

1

除了我的評論,您可以用這些方法中的任何一種編寫代碼。他們都會做同樣的事情。

With Range(ST) 
    .Cells(Range(ST).Count).Offset(1, 0).EntireRow.Insert 
    .Resize(Range(ST).Rows.Count + 1).Name = ST 
    .Cells(Range(ST).Rows.Count, 1) = Range(ST).Rows.Count - 1 
    .Cells(Range(ST).Rows.Count, 2) = TextBox2.Text 
End With 

OR

With Range(ST) 
    .Cells(.Count).Offset(1, 0).EntireRow.Insert 
    .Resize(.Rows.Count + 1).Name = ST 
    .Cells(.Rows.Count, 1) = .Rows.Count - 1 
    .Cells(.Rows.Count, 2) = TextBox2.Text 
End With 

OR

With Range(ST) 
    Dim nCount As Long 

    nCount = .Rows.Count 

    .Cells(.Count).Offset(1, 0).EntireRow.Insert 
    .Resize(nCount + 1).Name = ST 
    .Cells(nCount, 1) = nCount - 1 
    .Cells(nCount, 2) = TextBox2.Text 
End With 
+0

嗨,不幸的是,前兩個街區並沒有給出我的情況相同的輸出。我已經對我如何解決這個問題做了一個編輯,但我不確定是否正確理解了幫助文件。希望有任何意見。並感謝您的回覆! –