Обновите метки в пользовательской форме, если определенная ячейка на рабочем листе была изменена - PullRequest
0 голосов
/ 03 июля 2019

У меня есть UserForm для расчета расстояния и времени в пути с помощью Google Maps API. Все отлично работает, кроме обновления ярлыков на пользовательской форме. Я должен дважды нажать на кнопку, чтобы увидеть обновленные значения на ярлыках. Существует разрыв между получением формул XML и Excel в =FILTERXML и, например, преобразованием «2 часов 35 минут» в «3»

=IFERROR(IF(VALUE(IF(FIND("min";BZ21;1)=11;MID(BZ21;FIND("min";BZ21;1)-2;1);MID(BZ21;FIND("min";BZ21;1)-3;2)))<30; VALUE(LEFT(BZ21;FIND("h";BZ21;1)-2))&","&5;VALUE(LEFT(BZ21;FIND("h";BZ21;1)-2))+1);"")

Как сделать так, чтобы мне не приходилось дважды нажимать кнопку «Пользовательская форма»?

У меня есть этот файл, чтобы получить данные XML-файла на лист (код пользовательской формы):

Private Sub CommandButton3_Click()

On Error Resume Next

Dim xmlhttp As Object
Set xmlhttp = CreateObject("MSXML2.serverXMLHTTP")
Dim myurl As String

ThisWorkbook.Worksheets("Other Data").Range("BY21").Value = DistanceFortumSite.TextBox1.Text

myurl = "https://maps.googleapis.com/maps/api/distancematrix/xml?origins=" & ThisWorkbook.Worksheets("Other Data").Range("BY21").Value _
& "&destinations=" & ThisWorkbook.Worksheets("Other Data").Range("BY18").Value & "&mode=" & ThisWorkbook.Worksheets("Other Data").Range("BY3").Value _
& "&key=" & ThisWorkbook.Worksheets("Other Data").Range("CE1").Value
xmlhttp.Open "GET", myurl, False
xmlhttp.send
ThisWorkbook.Worksheets("Contact database").Range("A155") = xmlhttp.responseText

    If Err <> 0 Then
       Windows:=False
       MsgBox "Check your Internet connection! This feature does not work offline!"
       Else
       End If
       On Error GoTo 0

End Sub

Private Sub UserForm_Activate()

DistanceFortumSite.TextBox1.Text = ThisWorkbook.Worksheets("Other Data").Range("BY21").Value
DistanceFortumSite.TextBox2.Text = ThisWorkbook.Worksheets("Other Data").Range("BY18").Value

DistanceFortumSite.Controls("Label4").Caption = ThisWorkbook.Sheets("Other Data").Range("CA21").Value
DistanceFortumSite.Controls("Label5").Caption = ThisWorkbook.Sheets("Other Data").Range("CA22").Value

End Sub

Private Sub UserForm_Initialize()

DistanceFortumSite.TextBox1.Text = ThisWorkbook.Worksheets("Other Data").Range("BY21").Value
DistanceFortumSite.TextBox2.Text = ThisWorkbook.Worksheets("Other Data").Range("BY18").Value

DistanceFortumSite.Controls("Label4").Caption = ThisWorkbook.Sheets("Other Data").Range("CA21").Value
DistanceFortumSite.Controls("Label5").Caption = ThisWorkbook.Sheets("Other Data").Range("CA22").Value

End Sub

Затем по формулам на рабочем листе я получаю значения, используя =FILTERXML

Вот код для получения значений для меток пользовательской формы, если что-то было изменено в «Другие данные»:

Private Sub Worksheet_Change(ByVal Target As Range)

                    DistanceFortumSite.Controls("Label4").Caption = ThisWorkbook.Sheets("Other Data").Range("CA21").Value
                    DistanceFortumSite.Controls("Label5").Caption = ThisWorkbook.Sheets("Other Data").Range("CA22").Value


        If ThisWorkbook.Sheets("Other Data").Range("P24").Value <> "" Then
            Call GoogleAPIall
        End If

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...