2017-01-03 99 views
4

完成新手在這裏設置變量VBA

我幾天前開始了一些VBA,我有一個簡單的問題,但似乎無法找到我做錯了什麼。

我想製作一個按鈕,它將採用活動單元格的座標並將它們與另一個工作表進行比較以從另一個表中檢索特定值。 我將變量設置爲活動單元格列和行,我想這樣做,以便稍後可以將這些位置與另一個工作表進行比較,並在另一個工作表上的指定位置獲取該值。

到目前爲止,我只寫了我能在因特網上找到的內容,因爲我沒有經過正式培訓。 最後的msgbox只是爲了測試它是否實際提取參考。

Sub CommandButton1_Click() 
Dim Arow As Range 
Dim Acol As Range 
Set Arow = Worksheets("Sheet1").Range(ActiveCell.Row) 
Set Acol = Worksheets("Sheet1").Range(ActiveCell.Column) 
MsgBox (Arow) 
End Sub 

到目前爲止,我有錯誤運行時錯誤「1004」應用程序定義或對象定義的錯誤突出第四行。如果任何人都可以幫我解決這個問題,或者重定向我一些幫助,將不勝感激。

+0

錯誤是bcoz'ActiveCell.Row'是一個整數,而'Range()'期待一個地址(字符串) – nightcrawler23

回答

1

我覺得這是不行的,你應該把有

Set arow = Worksheets("Sheet1").Range(ActiveCell.Row & ":" & ActiveCell.Row) 

把目前根本數量將無法正常工作。對於專欄,你應該放一些像C:C這樣的字。要獲得列的信,請參閱此問題:Function to convert column number to letter?

有關Range屬性的更多信息,請參閱官方文檔https://msdn.microsoft.com/en-us/library/office/ff836512.aspx

問題是,您必須提供所謂的A1引用中的地址,即「A1」或「$ A $ 1」或單元格的名稱等,或者您必須提供兩個Range對象,如兩個單元格Worksheets("Sheet1").Range(Worksheets("Sheet1").Cells(1,1), Worksheets("Sheet1").Cells(2,2)),它定義了從第一個參數的左上角開始,第二個參數的右下角的區域。

0

如果想從在相同的位置activeCell另一片的值,使用此代碼,

Private Sub CommandButton1_Click() 

    valueFromOtherSheet = Sheets("Sheet2").Range(ActiveCell.Address) 
    MsgBox (valueFromOtherSheet) 

End Sub 
1

ActiveCell.RowActiveCell.Column返回你代表行和列,即數如果指向細胞某個整數值B4,ActiveCell.Row將返回4,而ActiveCell.Column將返回2. Range()屬性需要作爲參數整個地址的一些範圍,即Range("C6")Range("G3:J8")

當您將列作爲數字時,可以使用Cells()屬性指定範圍內的第一個和最後一個單元格,即Range(Cells(2, 4), Cells(6, 8)Range("D2:H6")的範圍相同。

在此之後,那你可以做你所描述什麼方法之一是:

Sub CommandButton1_Click() 
Dim Rng As Range 
Set Rng = Worksheets("Sheet1").Cells(ActiveCell.Row, ActiveCell.Column) 
End Sub 

現在,你必須在變化的Rng相同的座標ActiveCell的範圍,但在Sheet1。你可以通過一些值,例如Rng.Value = "Hello World",用Rng.PasteSpecial xlPasteAll等粘貼東西等。

0

就像其他人說的,它只是關於瞭解你的變量類型。這是另一種方式,你可以達到你想要

Sub CommandButton1_Click() 
    Dim Acell As Range 
    Set Acell = Worksheets("Sheet2").Range(ActiveCell.Address) 
    MsgBox "Value on ActiveSheet: " & ActiveCell.Value & vbNewLine & _ 
     "Value on Sheet2: " & Acell.Value 
End Sub 
0

謝謝大家的幫助和澄清,到底我能想出一些代碼,似乎做什麼,我需要它是什麼。

Private Sub CommandButton1_Click() 
Dim cabDate As Range 
Dim searchCol As Integer 
Dim newindex As Range 

Set cabDate = WorksheetFunction.Index(Range("A1:O9999"), ActiveCell.Row, 2) 
searchCol = ActiveCell.Column 
Set newindex = WorksheetFunction.Index(Worksheets("Deadlines").Range("A1:O9999"), cabDate.Row, searchCol) 
MsgBox (newindex) 
End Sub 

我不知道有衝突的數據類型,所以謝謝大家的幫助。