设置variablesVBA

在这里完成新手

我几天前开始了一些VBA,我有一个简单的问题,但似乎找不到我做错了什么。

我试图做一个button,将采取活动单元格的坐标,并将它们与另一个工作表来检索另一个表中的特定值。 我将variables设置为活动单元格列和行,我想要这样做,以便稍后可以将这些位置与另一个工作表进行比较,并获取另一个工作表上的指定位置的值。

到目前为止,我没有正式的培训,所以只写了一些我在互联网上可以find的东西。 在最后的msgbox只是为了testing它是否真的拿起参考。

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'应用程序定义或对象定义的错误突出显示第四行。 如果有人可以帮我解决这个问题或redirect我一些帮助,将不胜感激。

我认为这是行不通的,你应该放在那里

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

把那里简单的数字将无法正常工作。 对于专栏,你应该放一些像C:C 。 为了获得列的字母,请参阅此问题: 函数将列号转换为字母?

有关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)) ,其中第一个参数定义区域从左上angular开始在第二个参数中右下。

ActiveCell.RowActiveCell.Column返回一些代表行数和列数的Integer值,即如果指向单元格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 

现在你有在与ActiveCell相同的坐标范围内,但在Sheet1中。 你可以传入一些值,例如Rng.Value = "Hello World" ,用Rng.PasteSpecial xlPasteAll等粘贴一些东西。

如果你想从activeCell的相同位置的其他工作表的值,使用此代码,

 Private Sub CommandButton1_Click() valueFromOtherSheet = Sheets("Sheet2").Range(ActiveCell.Address) MsgBox (valueFromOtherSheet) End Sub 

像其他人所说的那样,只是了解你的variablestypes。 这是另一种方式,你可以达到你想要的

 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 

谢谢大家的帮助和澄清,最后我能够想出一些代码,似乎正在做我所需要的。

 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 

我没有意识到有冲突的数据types,所以谢谢大家的帮助。