我目前正在运行一个代码,用户选择一个单元格引用(列标题名称),代码会根据该选择创建一个数据集。当前代码通过在选定的标题字符串上运行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
感谢任何帮助
答案 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