设置变量VBA

时间:2017-01-03 09:06:09

标签: excel vba excel-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'应用程序定义或对象定义错误突出显示第4行。如果有人可以帮我解决这个问题或者重定向我一些帮助,那将非常感激。

5 个答案:

答案 0 :(得分: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)),它定义从第一个参数的左上角开始到第二个参数的右下角的区域。

答案 1 :(得分: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")的范围相同。< / p>

在此之后,您可以采取的方式之一是:

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等内容。

答案 2 :(得分:0)

如果您希望其他工作表的值与activeCell位于同一位置,请使用此代码

Private Sub CommandButton1_Click()

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

End Sub

答案 3 :(得分: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

答案 4 :(得分: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

我没有意识到数据类型存在冲突,所以非常感谢大家的帮助。