Как перенести скрипты, написанные на листах Google, в макросы MS Excel в VBA? - PullRequest
0 голосов
/ 26 января 2020

Я написал скрипт в скрипте приложения Google для поиска значения в листе и обновления строки в соответствии с введенными пользователем значениями. Это нормально работает с листами Google. Но когда я скачал документ в виде файла Excel, я ожидал, что скрипт быть загруженным и преобразованным в макрос VBA, но этого не происходит, и поскольку у меня нет опыта написания сценариев VBA, есть ли какой-нибудь tol, который можно использовать для перевода .gs в VBA. Вот функция, если это помогает:

function test() {
  var sheet1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
  var sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet2');
  var spreadsheet = SpreadsheetApp.getActive();
  sheet2.getRange('B5:B7').activate();
  var idForSearch = sheet2.getRange("B5").getValue();
  var data = sheet1.getDataRange().getValues();
  var rownumber;
  for(var i = 0; i<data.length;i++){
    if(data[i][0] == idForSearch){ //[0] because column A
      Logger.log((i+1))
      rownumber= i+1;
    }
  }
  spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Sheet1'), true);  
  spreadsheet.getRange('A'+rownumber+':'+'C'+rownumber).activate();
  spreadsheet.getRange('Sheet2!B5:B7').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, true);
};

заранее спасибо за любую помощь.

1 Ответ

0 голосов
/ 26 января 2020

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

Private Sub testConvert()
 Dim actWork As Workbook, sheet1 As Worksheet, sheet2 As Worksheet
 Dim data As Variant, i As Long, rownumber As Long, rng As Range

 Set actWork = ActiveWorkbook
 Set sheet1 = actWork.Sheets("Sheet1")
 Set sheet2 = actWork.Sheets("Sheet2")
 actWork.Activate
   idForSearch = shee2.Range("B5").Value
   data = sheet1.Range("B5:B7").Value 'not necessary to be activated

   For i = 1 To UBound(data) 'in VBA such an array (created from a range) is 1 based...
        If UCase(data(i,1)) = UCase(idForSearch) Then 'VBA is case sensitive
            WriteLog i 'you must have a function ('WriteLog') able to do it...
            rownumber = i
            'if you have only one occurrence, it is good to exit the loop to save time (not for this specific case of 3 times):
            Exit For
            'If many occurrences may be, you just comment the line above...
        End If
   Next i
   sheet1.Activate 'not necessary
   Set rng = sheet1.Range("A" & rownumber & ":" & "C" & rownumber).Select
   sheet2.Range("B5:B7").Value = WorksheetFunction.Transpose(rng.Value)
End Sub

Последние строки кода транспонируют горизонтальный диапазон sheet1 в диапазон столбцов sheet2 ...

Я могу помочь вам в создании функции WriteLog, если вы сообщите мне более подробную информацию: какой это тип журнала (текстовый файл), по тому пути, который будет создан, найден и т. Д. c. Вы хотите добавить, добавить значение i или перезаписать существующее, если какое-либо значение уже записано?

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