#vba #excel
#vba #excel
Вопрос:
Мне нужно скопировать входные данные в текстовое поле и преобразовать их в переменную, которая будет использоваться в качестве диапазона. С помощью кода, описанного ниже, я сталкиваюсь с ошибкой 91 объектной переменной или с неустановленной переменной блока. Если у вас есть лучший способ сделать это, пожалуйста, дайте мне знать.
Private Sub CommandButton1_Click()
Dim rng As String
Dim rangeA As Range
Dim rangeB As Range
Dim rangeC As Range
Dim rangeD As Range
Dim rangeE As Range
rng = TextBoxA.Value
If IsNumeric(RangeboxA.Value) Then
On Error Resume Next
Set rangeA = Sheets("Plan1").Range(RangeboxA.Value)
On Error GoTo 0
If rangeA Is Nothing Then MsgBox "Range A inválido"
End If
rangeA.Select
Selection.Cut
rangeA.Offset(0, rng).Select
ActiveSheet.Paste
rng = TextBoxB.Value
Range("B3:E3").Select
Selection.Cut
Range("B3").Offset(0, rng).Select
ActiveSheet.Paste
rng = TextBoxC.Value
Range("B4:E4").Select
Selection.Cut
Range("B4").Offset(0, rng).Select
ActiveSheet.Paste
rng = TextBoxD.Value
Range("B5:E5").Select
Selection.Cut
Range("B5").Offset(0, rng).Select
ActiveSheet.Paste
rng = TextBoxE.Value
Range("B6:E6").Select
Selection.Cut
Range("B6").Offset(0, rng).Select
ActiveSheet.Paste
Me.Hide
End Sub
Комментарии:
1. Что будет введено в текстовое поле?
Ответ №1:
Код интересный. Во-первых, мы подбираем RangeboxA.value
.
Чтобы успешно использовать это внутри Range()
, оно должно выглядеть примерно так:
A1:B9
но этот тип строки всегда будет терпеть неудачу IsNumeric()
, поэтому RangeA никогда не получает Set
и Select
всегда будет терпеть неудачу.
Теперь, если RangeboxA.value
имеет значение, подобное:
17
тогда Isnumeric()
это будет правдой, но тогда:
Set rangeA = Sheets("Plan1").Range(RangeboxA.Value)
потерпит неудачу.
Комментарии:
1. Спасибо вам за вашу помощь. Я изменил IsNumeric() на if not isNull(), и теперь он работает.