在这里完成新手
我几天前开始做一些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行。如果有人可以帮我解决这个问题或者重定向我一些帮助,那将非常感激。
答案 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.Row
和ActiveCell.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
我没有意识到数据类型存在冲突,所以非常感谢大家的帮助。