Сбой при использовании события RefEdit_Change в пользовательской форме VBA - PullRequest
0 голосов
/ 08 февраля 2019

Должно произойти следующее:

1.Пользовательская форма с 2 элементами управления RefEdit отображается

2.Первый RefEdit используется для выбора диапазона

3.Событие RefEdit_Change устанавливает второй элемент управления RefEdit на .offset (0,1) диапазона

Здесь мой код до сих пор:

Модуль 1:

Dim frmSelectXY As New frmSelectImportData

With frmSelectXY
    .Show
    .DoStuffWithTheSelectedRanges
End With

UserForm: frmSelectImportData

Option Explicit

Private Type TView
    IsCancelled As Boolean
    xrng As Range
    yrng As Range
End Type

Private this As TView
Public Property Get IsCancelled() As Boolean
    IsCancelled = this.IsCancelled
End Property
Public Property Get yrng() As Range
    Set yrng = this.yrng
End Property
Public Property Get xrng() As Range
    Set xrng = this.xrng
End Property

'Here is where the fun happens
Private Sub RefEdit1_Change()
'RefEdit2.Value = RefEdit1.Value
If InStr(1, RefEdit1.Value, "[") <> 0 And InStr(1, RefEdit1.Value, "!") <> 0 Then
    RefEdit2.Value = Range(RefEdit1.Value).offset(0, 1).Address(External:=True)
ElseIf InStr(1, RefEdit1.Value, "!") <> 0 Then
    RefEdit2.Value = Range(RefEdit1.Value).offset(0, 1).Parent.Name & "!" & Range(RefEdit1.Value).offset(0, 1).Address(External:=False)
Else
    RefEdit2.Value = Range(RefEdit1.Value).offset(0, 1).Address(External:=False)
End If

End Sub


Private Sub SaveBTN_Click()
Set this.xrng = Range(RefEdit1.Value)
Set this.yrng = Range(RefEdit2.Value)

If Not validate Then
MsgBox "x-values and y-values need to have the same size."
Else
Me.Hide
End If

End Sub

Function validate() As Boolean
validate = False
If this.xrng.count = this.yrng.count Then validate = True
End Function

RefEdit1_Change должен отрегулировать значение RefEdit2 так, чтобы оно показывало ссылку на столбец рядом с ним или лучше.offest(0,1) к нему.

Но это не то, что происходит .. значение не меняется.Как только Пользователь нажимает на RefEdit2, если RefEdit1 уже был изменен, программа прерывается без сообщения об ошибке.Если вы отменили пользовательскую форму, у меня также были серьезные сбои в Excel.Я временно исправил проблему, перестроив пользовательскую форму с нуля и переименовав RefEdits.Но в какой-то момент оно появилось снова.Кажется, что это проблема, присущая Excel / VBA.

Кто-нибудь знает, как это исправить?

Уродливые хаки и обходные пути приветствуются, все лучше, чем, прервать без сообщения об ошибке.

1 Ответ

0 голосов
/ 11 февраля 2019

вам нужно приложить Range(RefEdit1.Value).offset(0, 1).Parent.Name in 'так

="'" & Range(RefEdit1.Value).offset(0, 1).Parent.Name & "'!"

...