簡體   English   中英

如何在Excel VBA中基於用戶選擇的單元格引用設置范圍

[英]How to Set a Range Based on a User Selected cell reference in Excel VBA

我當前正在運行一個代碼,其中用戶選擇一個單元格引用(這是列標題名稱),然后代碼從該選擇中創建一個數據集。 當前代碼通過在所選標題字符串上運行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-應用程序定義或對象定義的error.L

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

感謝您的任何幫助

我對這個問題的解決方法粘貼在下面。 最后,我要做的是調整用戶在輸入框命令中選擇的范圍的大小,並將其偏移數據在標題下方開始的必需行數。 這對我來說行得通,因為我的數據始終在所選標題下方具有一定的固定長度。

偏移范圍的參考來自VBA中選擇范圍參考的Microsoft支持頁面

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM