У меня есть 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