如何基于Excel VBA中的用户选定单元格引用设置范围

时间:2015-03-17 23:41:16

标签: excel vba excel-vba

我目前正在运行一个代码,用户选择一个单元格引用(列标题名称),代码会根据该选择创建一个数据集。当前代码通过在选定的标题字符串上运行find命令来创建数据。这非常有效但如果标题在同一行中出现两次则存在问题。我想要做的是将find字符串替换为所选行的偏移量但是遇到了麻烦。

使用查找字符串的原始代码是:

Sub test()

Dim ar1 As Variant
Dim str1 As String
Dim ar2 As Variant
Dim Path As String
Dim j As Long 'counter
Dim output As String

Path = ActiveWorkbook.Path

ar1 = Worksheets("Sheet1").Range("C6:C222").Value

str1 = Application.InputBox("Select data heading from row 6", _
        "Obtain String", Type:=2)

ar2 = Range(Range("E6:IP6").Find(str1),Range("E6:IP6").Find(str1).End(xlDown))


For j = 1 To UBound(ar1, 1)
  output = output & ar1(j, 1) & "," & ar2(j, 1) & vbNewLine
Next

Open Path & "\text_data.txt" For Output As #1
Print #1, output
Close
End Sub

我的新代码尝试如下,但是当代码到达我设置ar2数组的行时,我不断收到运行时错误'1004 - 应用程序定义或对象定义的错误。

ar2 = Range(rng1.Offset(0, 0), rng1.Offset(216, 0))


Sub test()

Dim ar1 As Variant
Dim rng1 As Range
Dim ar2 As Variant
Dim Path As String
Dim j As Long 'counter
Dim output As String

Path = ActiveWorkbook.Path

ar1 = Worksheets("Sheet1").Range("C6:C222").Value

set rng1 = Application.InputBox("Select data heading from row 6", _
        "Obtain String", Type:=8)

ar2 = Range(rng1.Offset(0, 0), rng1.Offset(216, 0))

For j = 1 To UBound(ar1, 1)
  output = output & ar1(j, 1) & "," & ar2(j, 1) & vbNewLine
Next

Open Path & "\text_data.txt" For Output As #1
Print #1, output
Close
End Sub

感谢任何帮助

1 个答案:

答案 0 :(得分:0)

我的问题解决方案粘贴在下面。最后,我所做的是调整用户在输入框命令中选择的范围,并将其偏移数据从标题下方开始所需的行数。这对我来说没问题,因为我的数据总是在选定标题下面的某个固定长度。

offseting范围的参考来自Microsoft Support Page on Selecting Range References in VBA

Sub test()

Dim ar1 As Variant
Dim ar2 As Variant
Dim rng1 As Range
Dim Path As String
Dim j As Long
Dim output As String

Path = ActiveWorkbook.Path

ar1 = Worksheets("Find Friends").Range("C6:C222").Value

Set rng1 = Application.InputBox("Select data heading from row 5", _
            "Select Indicator", Type:=8)

ar2 = rng1.Offset(1, 0).Resize(rng1.Rows.Count + 215, rng1.Columns.Count)

For j = 1 To UBound(ar1, 1)
    output = output & ar1(j, 1) & "," & ar2(j, 1) & vbNewLine
Next

Open Path & "\text_data.txt" For Output As #1
Print #1, output
Close

End Sub