设定变量 VBA

4

我是一个完全的新手

几天前,我开始学习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行。如果有人能帮我解决这个问题或将我重定向到一些帮助,那将不胜感激。


错误是因为ActiveCell.Row是一个整数,而Range()需要一个地址(字符串)。 - nightcrawler23
5个回答

1

我认为这个不会起作用,你应该放在那里。

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

简单地说,只输入数字是行不通的。对于列,你应该输入类似于 C:C 的内容。要获取列的字母,请参见这个问题:将列号转换为字母的函数? 要了解有关范围属性的更多信息,请参阅官方文档 https://msdn.microsoft.com/zh-cn/library/office/ff836512.aspx
问题在于,你必须提供称为 A1 引用的地址,如 "A1" 或 "$A$1" 或单元格名称等,或者你必须提供两个范围对象,例如 Worksheets("Sheet1").Range(Worksheets("Sheet1").Cells(1,1), Worksheets("Sheet1").Cells(2,2)),它定义了以第一个参数中的左上角开始,第二个参数中的右下角结束的区域。

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,它是与Sheet1中的ActiveCell具有相同坐标的范围。您可以将一些值传递到其中,例如Rng.Value = "Hello World",使用Rng.PasteSpecial xlPasteAll粘贴内容等。

0

如果你想要从其他工作表中获取与当前单元格相同位置的值,请使用以下代码:

Private Sub CommandButton1_Click()

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

End Sub

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

我之前不知道数据类型会发生冲突,所以感谢大家提供的帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接