将named_range的VBA复制值复制到TextBox

时间:2017-07-27 06:43:13

标签: vba textbox named-ranges

命名范围(或用户定义的范围)有6列,但行数可能会根据其他功能而改变。

现在尝试将所有6列和所有行的范围的整个值放入TextBox中。由制表符分隔的行。

以下代码返回对象定义的错误等。

UserForm1.TextBox1.Value = Sheet1.Range("named_range").Value

任何帮助都非常感激。

编辑:

FunThomas是对的,我赢得了能够获得范围的价值,而没有宣布它是一个单独的线。所以我开始使用下面的代码,它可以很好地显示多行msgBox中的范围。

如何摆脱额外的InputBox,并在UserForm1.TextBox1中显示结果,而不是功能有限的msgBox。

Sub showOfferRange()
Dim xRg As Range
Dim xTxt As String
Dim xCell As Range
Dim xStr As String
Dim xRow As Long
Dim xCol As Long
On Error Resume Next
  xTxt = ThisWorkbook.Names("offers_running")
Set xRg = Application.InputBox("Offer range:", "Display offers", xTxt, , , , , 8)
'Set xRg = xTxt
If xRg Is Nothing Then Exit Sub
   On Error Resume Next
For xRow = 1 To xRg.Rows.Count
    For xCol = 1 To xRg.Columns.Count
        xStr = xStr & xRg.Cells(xRow, xCol).Value & vbTab
    Next
    xStr = xStr & vbCrLf
Next
    MsgBox xStr
End Sub

1 个答案:

答案 0 :(得分:1)

基本上,要将文本写入表单的文本框中,只需

UserForm1.TextBox1.text = UserForm1.TextBox1
UserForm1.show

由于您有多行,请不要忘记将MultiLine - 文本框的属性设置为true

另一点:您应该更改读取范围的行。 on error resume next是一个非常危险的声明,因为它消耗了所有错误,你可以完全丢失以找到错误。只需要捕获输入框不返回Range的情况(例如因为按下了取消)。所以我建议你将steatements更改为

xTxt = ThisWorkbook.Names("offers_running")
Set xRg = Nothing
On Error Resume Next
Set xRg = Application.InputBox("Offer range:", "Display offers", xTxt, , , , , 8)
On Error Goto 0
If xRg Is Nothing Then Exit Sub