Интересует хороший форум (аналогичный этому), где можно позадавать вопросы по макросам гугл таблиц. Шлаковерфлоу не предлагать, там ответа не дождешься. И чтоб два раза не вставать, может здесь кто знает, как решить проблему. У меня есть скрипт, который вставляет в гугл таблицу строку с несколькими значениями, затем суммирует эти строки по нескольким критериям. Вставка значений на лист занимает 3-4 секунды, но скрипт суммирования уже начинает работать и суммирует пустые ячейки.
Код
function add_1() {
var ss = SpreadsheetApp.getActive();
ss.getActiveSheet().insertRowsBefore(9, 1);
ss.getRange('A9').setValue(new Date());
ss.getRange('B9').setValue(ss.getRange('B3').getValue())
ss.getRange('C9').setValue(ss.getRange('C3').getValue())
ss.getRange('D9').setValue(ss.getRange('D3').getValue())
ss.getRange('E9').setValue(ss.getRange('E3').getValue())
ss.getRange('D3').clearContent();
summary()
};
Как дождаться обновления листа и затем продолжить выполнение?
По мотивам данной темы хотел найти простой скрипт шифровки/дешифровки данных, но не удалось нагуглить ничего полезного. Есть вариант найти что-то простое для среднего пользователя?
Почему бы не активировать книгу, сделать клик, потом активировать исходную книгу? Перед этим сделать Application.ScreenUpdating = False, чтоб не было мигания экрана.
Можно ли разделить выбранный диапазон на отдельные ячейки, для извлечения данных в разные переменные? Диапазон может быть выбран на соседних ячейках (А1, А2) или через Ctrl (A1, B3).
В результате хочу иметь переменные: х = значение из А1 y = значение из А2 (или В3 по второму варианту)
МатросНаЗебре, Спасибо, работает. А можно как-то подавить сообщение, что файл занят другим пользователем и открывается только для чтения?
Код
Private Sub Workbook_Open()
Application.DisplayAlerts = False ' не подавляет системное сообщение с предложением открыть для чтения.
If Environ("USERNAME") <> "admin" Then
MsgBox "Файл открыт для чтения," & Chr(10) & "ИЗМЕНЕНИЯ НЕ СОХРАНЯТСЯ!"
If Not ThisWorkbook.ReadOnly Then ThisWorkbook.ChangeFileAccess xlReadOnly
End If
Application.DisplayAlerts = True
End Sub
Есть один пользователь с правом редактирования книги, остальным нужен только просмотр. Иногда этот файл открывают одновременно, хочу сделать, чтоб не мешали друг другу, не сохраняли копии, не видели лишних предлложений сохранить файл и т.д. Можно ли открыть книгу в режиме "только для чтения" по условию? Что-то типа:
Код
Private Sub Workbook_Open()
If Environ("USERNAME") <> "admin" Then (открыть только для чтения)
End Sub
Вопрос простой, но не совсем. Если данные можно идентифицировать в тексте страницы, можно загрузить текст страницы в строковую переменную и выловить нужные данные по ключевым словам функцией InStr.
New, Для этого можно создать чистый лист с надписью "Включите макросы". Перед сохранением книги отобразить этот лист, рабочие листы скрыть и в таком виде сохранить. А на открытие книги добавить макрос отображения рабочих листов.
Private Sub Workbook_Open()
Call protection
End Sub
В модуль:
Код
Public Const pass As Long = 123
Sub protection()
Dim ws As Worksheet
ActiveWorkbook.Protect Password:=pass, structure:=True
For Each ws In Worksheets
ws.Protect Password:=pass, UserInterfaceOnly:=True: ws.EnableSelection = xlNoRestrictions
Next
End Sub
Ну и код VBA защитить паролем от просмотра. Как защита от дурака - сойдет.
Marat Ta, Рабочий файл не секретный, но выкладывать смысла нет. В нем есть умные таблицы и в 2003 версии выходит такая ошибка (на картинке). И с названием темы порядок, файл-пример создан с нуля и макрос сортировки вызывает в нем ошибку, это не сломанная книга, а "штатная фича экселя".
Цитата
Marat Ta написал: Если речь о файле примере с 1 сообщения, то у меня все работает без ошибок после пересохранения с формата 2003.Даже специально 2010 версию установил для проверки....)
После выполнения сортировки в 2010 ошибка возобновляется. Похоже, это так легко не обойти.
Marat Ta, Проверил уже, при возврате в версию 2010 опять ошибка. А в версии 2003 остаться не получится, не работают ссылки на умные таблицы. Возможно, кто-то подскажет решение, кроме изобретения велосипеда самостоятельного написания сортировки.
Добрый день. Если открыть файл-пример, выполнить сортировку, сохранить и закрыть - при следующем открытии отображается ошибка и предложение восстановить файл. Сохранить его тоже не получается (поскольку файл восстановлен), а только "Сохранить как..." В чем может быть причина? Офис 2010.
Код
Sub sort()
'Сортировка по убыванию столбца J
iLastrowI = Cells(Rows.Count, 9).End(xlUp).Row
ActiveWorkbook.Worksheets(1).sort.SortFields.Add Key:=Range("J3"), _
SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal 'Order:=xlAscending - по возрастанию
With ActiveWorkbook.Worksheets(1).sort
.SetRange Range("I3:M" & iLastrowI)
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
Добрый день. Есть позиции на складе в виде первой таблицы. Как просуммировать их (макросом, без формул) по трем критериям (название, наличие сертификата и плотность) и вывести сокращенную таблицу (где просуммированы штуки и масса одинаковых позиций)?
МатросНаЗебре, Спасибо, буду разбираться. Единственный вопрос, что такое start line, end line, start column, end column. Если start line - строка начала поиска, почему в вашем примере это 19, а не 34?
Для тех, кто спрашивал "Зачем?". Есть книга со множеством макросов, я ее периодически редактирую, что-то добавляю/изменяю и тестирую. При тестировании мне нужно отключать определенные макросы (добавить в код Goto endsub) или закомментировать определенные строки, а в готовом файле вернуть все обратно. Хочу автоматизировать этот процесс.