Как написать динамический макрос для Windows? - PullRequest
0 голосов
/ 04 января 2019

Я пытаюсь написать свой собственный макрос для Windows, но большая часть содержимого в Интернете, похоже, склоняется в сторону VBA и Excel, или более статических макросов «напиши и делай» или «делай это, а потом делай это позже»,Я ищу способ написать больше программных макросов для автоматизации утомительных задач, содержащих динамические входные данные.

Я прочитал эту статью о массивах в VBA для Excel, которая варьируется как динамический ввод , ноэто не то, что я после.

Что мне нужно, так это способ записи макроса, но выделение части внутри него (т. Е. Посмотрите на код, который был написан для его выполнения) и вставьте крошечные действия в его середину, например,как извлечение из массива для использования вместо использования выполненных нажатий клавиш и непрерывная итерация до тех пор, пока массив не станет пустым.

Пример (не относится к проекту):

  1. Я открываю новыйtab (ctrl + t)
  2. Я набираю случайный веб-адрес (www.example.com)
  3. Я произвольно нажимаю на часть страницы

Я бы хотел отделить этот макрос для многократной вставки другого адреса на этапе 2, поэтому я бы открыл столько вкладок, сколько требуется для заполнения массива.

1 Ответ

0 голосов
/ 14 марта 2019

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


    Sub Macro3()
    '
    ' Macro3 Macro
    '

    '
        Range("A5").Select
        With ActiveSheet.QueryTables.Add(Connection:= _
            "URL;https://www.google.com/search?q=NYSE:GE&tbm=fin&gws_rd=ssl#gws_rd=ssl&scso=_EzKKXMOFH8jKswXW2pigDQ2:0&spf=1552560659066&wptab=COMPANY" _
            , Destination:=Range("$A$5"))
            .CommandType = 0
            .Name = "0&spf=1552560659066&wptab=COMPANY_1"
            .FieldNames = True
            .RowNumbers = False
            .FillAdjacentFormulas = False
            .PreserveFormatting = True
            .RefreshOnFileOpen = False
            .BackgroundQuery = True
            .RefreshStyle = xlInsertDeleteCells
            .SavePassword = False
            .SaveData = True
            .AdjustColumnWidth = True
            .RefreshPeriod = 0
            .WebSelectionType = xlSpecifiedTables
            .WebFormatting = xlWebFormattingNone
            .WebTables = "4"
            .WebPreFormattedTextToColumns = True
            .WebConsecutiveDelimitersAsOne = True
            .WebSingleBlockTextImport = False
            .WebDisableDateRecognition = False
            .WebDisableRedirections = False
            .Refresh BackgroundQuery:=False
        End With
    End Sub

Вот как вы можете поместить это в цикл. CommandType выдавал ошибку и не нужен, поэтому ее пришлось удалить.


    Sub GetCompanyData()
    Dim companies(1 To 3) As String

    i = 1
    companies(i) = "F": i = i + 1
    companies(i) = "CAT": i = i + 1
    companies(i) = "GE": i = i + 1

    For i = 1 To UBound(companies)

        LastUSedRow = ActiveSheet.UsedRange.Rows.Count
        NextInsertAddr = Cells(LastUSedRow + 1, 1).Address
        Range(NextInsertAddr) = "Company: " + companies(i)
        NextInsertAddr = Cells(LastUSedRow + 2, 1).Address
        URLToPull = "URL;https://www.google.com/search?q=NYSE:" + companies(i) + "&tbm=fin&gws_rd=ssl#gws_rd=ssl&scso=_EzKKXMOFH8jKswXW2pigDQ2:0&spf=1552560659066&wptab=COMPANY"
    '
        With ActiveSheet.QueryTables.Add(Connection:=URLToPull _
            , Destination:=Range(NextInsertAddr))
      '      .CommandType = 0
            .Name = "0&spf=1552560659066&wptab=COMPANY"
            .FieldNames = True
            .RowNumbers = False
            .FillAdjacentFormulas = False
            .PreserveFormatting = True
            .RefreshOnFileOpen = False
            .BackgroundQuery = True
            .RefreshStyle = xlInsertDeleteCells
            .SavePassword = False
            .SaveData = True
            .AdjustColumnWidth = True
            .RefreshPeriod = 0
            .WebSelectionType = xlSpecifiedTables
            .WebFormatting = xlWebFormattingNone
            .WebTables = "4"
            .WebPreFormattedTextToColumns = True
            .WebConsecutiveDelimitersAsOne = True
            .WebSingleBlockTextImport = False
            .WebDisableDateRecognition = False
            .WebDisableRedirections = False
            .Refresh BackgroundQuery:=False
        End With
    Next i


    End Sub

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