如何在Excel中使用VBA获取当前行和访问列?

时间:2013-02-05 18:22:07

标签: excel excel-vba vba

我在Excel电子表格中有一个表格。假设它有两列“Id”和“Name”。使用VBA,我想在工作表上使用双击事件来捕获当前行中的“Id”和“Name”。

我使用Intersect函数来确定是否在我感兴趣的表中发生了双击,但我不知道如何使用表列名访问​​行数据。

Private Sub Worksheet_BeforeDoubleClick(ByVal target As Range, Cancel As Boolean)
   Dim user_rge as Range
   Set user_rge = Me.Worksheets("Data").Range("Users")
   If Not Intersects(user_rge, target) is Nothing Then
        Dim id as Integer
        Dim name as String
        ` What goes in here?
   End
End Sub

3 个答案:

答案 0 :(得分:1)

您可以使用ActiveCell.Row获取行。对于列,您必须通过将其与源范围进行比较来检查用户是否单击了ID或名称。

If ActiveCell.Column = users_rge.Columns(1) Then
   ID = ActiveCell.Value
   Name = ActiveCell.Offset(ColumnOffset:=1).Value
Else
   Name = ActiveCell.Value
   ID = ActiveCell.Offset(ColumnOffset:=-1).Value
End If

注意:我没有尝试过这段代码,而是根据我的想法写出来。

答案 1 :(得分:1)

这就是我所做的事情。在此示例中,“Main”是包含表格的工作表。表的名称是“TableName”,其中包含列“columnXXXX”,“columnYYYY”和“columnZZZZ”

我可能会创建一个名为TableLookupByRange(tablename,columnname,range)的辅助函数,您可以在其中传入表的名称,列的名称以及包含您想要的行中任何位置的单元格的范围进行查找。这也会清理代码。

Dim table_lo as ListObject
Dim main_ws as Worksheet
Set main_ws = Me.Worksheets("Main")
Set table_lo = main_ws.ListObjects("TableName")

rownum = target.Row - 1
columnXXXX_colnum = table_lo.ListColumns("columnXXXX").index
columnYYYY_colnum = table_lo.ListColumns("columnYYYY").index
columnZZZZ_colnum = table_lo.ListColumns("columnZZZZ").index

Dim columnXXXX As String
Dim columnYYYY As String
Dim columnZZZZ As Double

columnXXXX = trades_rge.Cells(rownum, columnXXXX_colnum).Value
columnYYYY = UCase(trades_rge.Cells(rownum, columnYYYY_colnum).Value)
columnZZZZ = trades_rge.Cells(rownum, columnZZZZ_colnum).Value

答案 2 :(得分:-1)

请尝试使用您的代码:使用Range.Columns Property将Target与user_range第1列和第2列进行比较。

Option Explicit
Private Sub Worksheet_BeforeDoubleClick(ByVal target As Range, Cancel As Boolean)
   Dim id as Integer
   Dim name as String
   Dim user_rge as Range

   Set user_rge = Me.Worksheets("Data").Range("Users")
   If Not Intersects(user_rge, target) is Nothing Then
      Select Case Target.Column
         Case user_rge.Columns(1)
              id = Target.Offset(0,0).Value
              name = Target.Offset(0,1).Value   
         Case user_rge.Columns(2)             
              id = Target.Offset(0,-1).Value
              name = Target.Offset(0,0).Value     
      End Select
   End If
End Sub