Обновить Изменения отредактированных данных на листе не работают - PullRequest
1 голос
/ 17 июня 2020

Я пытаюсь редактировать данные, которые отображаются в текстовых полях с листа, я могу делать все другие необходимые вещи, такие как добавление данных, однако мой прикрепленный код не обновляет лист с изменениями, я пробовал использовать смещение (0 , 1), но все, что нужно сделать, это изменить одну строку на идентификатор, который она ищет как строку. Box1 - это текстовое поле с идентификационным номером внутри и основным критерием, по которому работает моя программа.

Я относительно новичок в VBA и пытался искать решения, но теперь я в растерянности, не меняя свои весь код только для решения того, что, вероятно, окажется простым решением для кого-то более опытного, чем я.

Dim findvalue As Range

Set findvalue = Sheet1.Range("A:A").Find(What:=Box1, LookIn:=xlValues)

cNum = 20
    For X = 1 To cNum
        findvalue = Me.Controls("Box" & X).Value(0, 1)
        Set findvalue = findvalue(0, 0)
    Next

Ответы [ 2 ]

0 голосов
/ 17 июня 2020

Для меня это не имеет особого смысла, но если у вас есть 20 текстовых полей (от 1 до 20), вы можете записать значения, хранящиеся в текстовых полях, в диапазоне ниже, где был найден идентификатор, используя следующий синтаксис. Надеюсь, вы сможете приблизиться к решению своей проблемы.

    Sub makeAndboxes()
    Dim j As Integer
    Dim tbox As MSForms.TextBox
    'For the test creates 20 Textboxes with the name and value Box1, Box2, ..Box20.
    'The same text is in the range("A:A") somewhere to test
    For j = 1 To 20
        Set tbox = UserFormBX.Controls.Add("Forms.Textbox.1", "Box" & j)
        tbox.Value = tbox.Name 'Write the name in the box
    Next j

    Dim findvalue As Range
    'If it is the "A:A" range, it will be the cell where it is found
    Set findvalue = Sheet3.Range("A:A").Find(What:=UserFormBX.Controls("Box1").Value, LookIn:=xlValues)
    If findvalue Is Nothing Then
        MsgBox "Value: " & UserFormBX.Controls("Box1").Value & " not in Range(A:A)"
        Exit Sub
    End If
    Dim cNum As Integer
    Dim x As Integer
    cNum = 20
    For x = 1 To cNum
        findvalue.Value = UserFormBX.Controls("Box" & x).Value & " New text"
        Set findvalue = findvalue.Offset(1, 0) 'next row
    Next
End Sub
0 голосов
/ 17 июня 2020

Примерно так должно работать:

Dim f As Range, x As Long

'always use "lookat" if you want an exact match
Set f = Sheet1.Range("A:A").Find(What:=Box1, LookIn:=xlValues, _
                                 lookat:=xlWhole)
If Not f Is Nothing Then
    For x = 2 To 20 '<< no need to replace the value you just found
        Debug.Print "Setting " & f.Offset(0, x - 1).Address & " to value '" & _
             Me.Controls("Box" & x).Value & "' from 'Box" & x & "'"
        f.Offset(0, x - 1).Value = Me.Controls("Box" & x).Value
    Next
Else
    MsgBox "Id not found!"
End If
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...