2014-12-22 32 views
2

我是新來的論壇,也是VBA的新手(僅在一週前開始學習它)。VBA在變量中定義屬性

是否可以在變量中定義屬性?我有一條線,看起來有點像這樣:

Cells(i, j).Formula = "=" & .Cells(i, j).Address(External:=True, RowAbsolute:=False, ColumnAbsolute:=False) 

我必須寫幾個單元格,所以我最終有許多這些行;如果可能的話,我想做類似的事情:

dim prop as string 

prop = "Address(External:=True, RowAbsolute:=False, ColumnAbsolute:=False)" 

Cells(i, j).Formula = "=" & .Cells(i, j).prop 

可以這樣做嗎?

+0

不,你不能在VBA中做到這一點。如果你想減少重複的代碼,那麼你可以寫一個小的Sub來創建兩個單元格之間的鏈接。 –

+0

我很確定答案是「否」,但我不確定是否能夠做出實際答案。真正的問題是爲什麼你想要做這樣的事情?在我看來,它會使代碼難以閱讀,並且爲了創建具有非常類似語法的多行,複製粘貼是您的朋友。如果這些線非常相似,請考慮使用循環。 – Aiken

+0

不是真的 - CallByName將是最接近的等效。您也可以編寫一個函數,該函數返回作爲參數傳遞的Range對象的信息。 – Rory

回答

1

您的意思是這樣的?

Function MyProp(ByVal r as Range) as String 
    MyProp = r.Address(External:=True, RowAbsolute:=False, ColumnAbsolute:=False) 
End Function 


... 
Cells(i,j).Formula = "="& MyProp(Cells(i,j)) 

這當然會使單元格引用本身,這通常是一個壞主意,並可能導致循環引用。最好的,如果你更多地描述你爲了獲得更好的答案而想要做的事情。

+0

完美!這符合我的想法。謝謝! – Bilfrost

0

正如在評論中提到的,這不能以你描述的方式完成。有兩種選擇:

  1. 寫,你與你的輸入和預期的輸出(更復雜)
  2. 編寫的代碼只出現一次循環調用私有函數。 (更少的代碼)

要編寫從A1所有細胞循環,上次使用的行,最後使用的柱:

Dim LastRow As Long, LastCol As Long 

LastRow = Range("A" & Rows.Count).End(xlUp).Row 
LastCol = Cells(1, Columns.Count).End(xlToLeft).Column 

For i = 1 To LastRow 
    For j = 1 to LastCol 
     `Do your stuff here 
    Next j 
Next i 

編輯: 我會假設你需要投資Range.Offset()方法found here因爲現在,您將單元格公式設置爲等於它自己...

+0

謝謝!我嘗試了私有函數,但最終沒有讓代碼更優雅;通過引用來自不同的工作表,所以如果我有一個功能比我還必須通過工作表參考,這就像凌亂。 – Bilfrost