从变量名称值创建表

时间:2020-07-20 13:20:49

标签: excel vba range

我想基于“标题”名称创建表,它是表的最后一行。

我还可以使用一些公式来找到表头的起始地址和长度。

例如: FindHeaderValue为14,即$ B $ 14 TableLength为65,即$ V $ 65

因此,我想创建具有以下范围的表 $ B $ FindHeaderValue:$ V $ TableLength。

因为FindHeaderValue和TableLength会因Excel的不同而不同。

请帮助找出解决方案。提前非常感谢您。 Excel Sheet for reference

            Sub Test()
            
            
            Dim sFindHeader As String
            Dim oRangeFindHeader As Range, FirstRange As String, LastRange As String
            Dim FindHeaderValue As Integer, FindLength As Integer, TableLength As Integer
            
            Dim Ws As Worksheet
            Set Ws = ThisWorkbook.Sheets("Sheet1")
            
            Set oRangeFindHeader = Worksheets("8A52").Range("B1:V5000").Find("BBBB", lookat:=xlPart)
            sFindHeader = oRangeFindHeader.Address(ReferenceStyle:=xlR1C1)
            FindHeaderValue = GetNumber(sFindHeader)
            FirstRange = oRangeFindHeader.Address
            MsgBox FindHeaderValue
            MsgBox FirstRange
            
            FindLength = FindHeaderValue + 2
            
            TableLength = Cells(FindLength, 13).End(xlDown).Row
            MsgBox TableLength
            
            
            Ws.ListObjects.Add(xlSrcRange, Ws.Range("$B$FindHeaderValue:$V$TableLength"), , xlYes).Name = "DefinitionTable"
            Ws.ListObjects("DefinitionTable").TableStyle = "TableStyleLight1"
            
            End Sub
            
            Public Function GetNumber(s As String) As Long
                Dim b As Boolean, i As Long, t As String
                b = False
                t = ""
                For i = 1 To Len(s)
                    If IsNumeric(Mid(s, i, 1)) Then
                        b = True
                        t = t & Mid(s, i, 1)
                    Else
                        If b Then
                            GetNumber = CLng(t)
                            Exit Function
                        End If
                    End If
                Next i
            End Function

1 个答案:

答案 0 :(得分:0)

变量不包含在引号内。使用&将它们连接到范围地址(顺便不需要$):

Ws.Range("B" & FindHeaderValue & ":V" & TableLength)