Excel это не сложно
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
04.12.2023, 13:18:09

Войти
Название темы должно отражать её содержание.
Темы типа "ПОМОГИТЕ!!!", "Срочно!", "Не получается сделать", "Нужна помощь" и т.п. будут удаляться без объяснения причин
33 171 Сообщений в 5 437 Тем от 6 701 Пользователей
Последний пользователь: McDosaaa
*
Перейти на сайт Хитрости Надстройка MulTEx Обучающие тренинги Наша группа ВКонтакте
Правила форума Начало Помощь Поиск Календарь Войти Регистрация Выйти
  Просмотр сообщений
Страниц: [1] 2 3 ... 386
1  Основные форумы / Вопросы по работе в Google-таблицах / Re:Рапределение суммы плана по дням недели : 02.12.2023, 13:29:27
Вы поймите - мы не видим данных и не понимаем что у Вас там как различается.
Плюс лично я до конца так и не понял какая именно у Вас зависимость прогнозирования: то ли от дней недели(без привязки к месяцу), то ли и день недели и месяц. То ли вообще без дня недели - день месяца. Данные-то за несколько лет у Вас.
2  Основные форумы / Вопросы по работе в Google-таблицах / Re:Рапределение суммы плана по дням недели : 01.12.2023, 20:15:18
Без примера данных сложно что-либо советовать. Но имея на руках данные предыдущих периодов - можно получить среднее значение доли каждого дня в нужном месяце и на это значение умножить 1 000 000 для каждого дня из месяца. Но Вы должны понимать, что такой прогноз весьма и весьма примерный.
3  Основные форумы / Вопросы по работе в Google-таблицах / Re:Выпадающий календарь : 30.11.2023, 13:32:40
Насколько знаю, среди стандартных средств такого нет. Как такое сотворить сходу тоже в голову не приходит. Может у кого еще будут какие-либо мысли на этот счет.
4  Основные форумы / Вопросы по Excel и VBA / Re:Замена текста в ячейке и во всей книге : 29.11.2023, 17:50:52
тогда происходит переключение в книге/на листе с гарантией
так мой метод тоже это делает с гарантией - попробовали бы хоть...
5  Основные форумы / Вопросы по Excel и VBA / Re:Как подключиться к локальному серверу с другой учетной записью и паролем из VBA : 29.11.2023, 17:00:28
ADODB.Connection никак не связан с папками - это инструмент работы с базами данных, по сути. Вряд ли его можно как-то в этом случае задействовать. Скорее GetObject("winmgmts.
А вот NetworkObject.MapNetworkDrive может выдать ошибку, если подключение происходит от имени пользователя, у которого недостаточно прав на это.
А ошибка "Множественное подключение........." как правило говорит о том, что диск уже подключен. Возможно, надо сбросить. Для начала в командной строке Windows(Пуск -Выполнить) введите команду: net use.
Посмотрите, какие сетевые диски подключены. Отключите диск скриптом:
Код: (vb)
NetworkObject.RemoveNetworkDrive "Y:", True, True

повторите команду net use. Удаленного диска быть не должно. Если не удалился - попробуйте удалить командой:
net use d/ Y:
повторите команду net use. Если диск так и не удалился - надо искать причину отказа удаления диска. Может быть  что-то поломалось. Можно поискать в реестре по ключу "Network\имя_диска". Если нашли - ключ удалить.
Если удалился - попробуйте подключить его своим скриптом.
Других идей нет - здесь можно гадать долго. Возможно вообще все банальной перезагрузкой решиться. В некоторых версиях Windows подключение и работа с сетевыми дисками на ровном месте сбой давали.
По сути ни VBA, ни Excel здесь не при делах. Это проделки ОС.
6  Основные форумы / Вопросы по Excel и VBA / Re:Как подключиться к локальному серверу с другой учетной записью и паролем из VBA : 29.11.2023, 15:01:13
При использовании буквы Диска: "Локальное имя устройства уже используется для подключения к другому сетевому ресурсу"
что при использовании любой буквы такое сообщение?
7  Основные форумы / Вопросы по Excel и VBA / Re:Как подключиться к локальному серверу с другой учетной записью и паролем из VBA : 29.11.2023, 14:22:45
Может имя диска надо указать? Плюс, полагаю, не мешало бы сначала отключать его, если такой уже есть:
Код: (vb)
NetworkObject.RemoveNetworkDrive "Y:", True, True
NetworkObject.MapNetworkDrive "Y:", ServerShare, False, UserName, Password
8  Основные форумы / Вопросы по Excel и VBA / Re:Замена текста в ячейке и во всей книге : 29.11.2023, 08:28:41
Нашёл ещё один выход: закрыть Excel и зайти снова
не сказал бы, что это выход Улыбка Так себе удовольствие для пользователя, когда тебе Excel закрывают, чтобы поиск/замена заработали Улыбка
9  Основные форумы / Вопросы по Excel и VBA / Re:Замена текста в ячейке и во всей книге : 28.11.2023, 17:57:00
Выполните сначала метод Find со всеми параметрами:
Код: (vb)
Dim rr As Range
Set rr = Cells(N_Row, 4)
rr.Find " ", ActiveCell, xlValues, xlPart, xlByRows, xlNext, False, False
rr.Replace " ", "", xlPart, xlByRows, False, False

Правда, если надо менять или искать только в одной ячейке - то смысла в методе Replace объекта Range нет, т.к. здесь проще использовать функцию VBA:
Код: (vb)
Cells(N_Row, 4).Value = replace(Cells(N_Row, 4).value," ","")
10  Основные форумы / Вопросы по работе в Google-таблицах / Re:Появление диаграммы по формуле : 24.11.2023, 10:47:52
Вот не пойму я Вас...Выше же есть пример, когда устанавливаются все нужные размеры в коде - самый первый, где я все расписал(там еще написано, что с cw и ch должно быть понятно). Вы их в тот момент, вероятно, даже не пробовали менять под нужные для диаграмм Улыбка После чего Вам понадобилось сохранять параметры, т.к. вид диаграммы менялся(именно из-за изменения размеров, кстати, пропадали подписи). Ну можно же хотя бы смекалку-то подключать, если уж логика не дотягивает? Улыбка Без этого в программировании точно никак.
Есть код с установкой размеров, есть без. Посмотреть, сравнить и попробовать переделать. А Вы сейчас 100% сначала пишете это:
Код: (js)
var cw = 800, ch = 400, cx = ix, cy = iy; 

а затем в коде не убираете это:
Код: (js)
var ch = chart.getOptions().get('height');  
var cw = chart.getOptions().get('width');

посмотрите на строки внимательно - не замечаете задвоение переменных cw и ch и назначение им значений?
11  Основные форумы / Вопросы по работе в Google-таблицах / Re:Появление диаграммы по формуле : 23.11.2023, 17:58:57
никак не выходит расширить функцию function onEdit(e)
Если посмотреть код - то Вы и не пытаетесь расширить функцию - Вы просто за её пределы что-то написали и все Улыбка
И кстати - доступа к файлу нет, приходится опять выдумывать свои.
Вот так будет проще доработать и понять принцип(а может и нет):
Код: (js)
function onEdit(e) {

  var actRng = e.range;
  var sCellAddr = actRng.getA1Notation();//адрес измененной ячейки
  var ich_index = -1;//индекс диаграммы для изменения, в зависимости от измененной ячейки
  var iDefault_x = 0, iDefault_y = 0;
  if (sCellAddr == "A1")
  {
    ich_index = 0;
    //строка и столбец, где должна отображаться диаграмма
    iDefault_x = 1, iDefault_y = 2;
  }
  if (sCellAddr == "A10")
  {
    ich_index = 1;
    //строка и столбец, где должна отображаться диаграмма
    iDefault_x = 10, iDefault_y = 2;
  }
  if (ich_index == -1) {return;} //если изменена ячейка "вне списка"

  var sheet = e.range.getSheet();
  var is_hide = actRng.getValue();
  resizeChart(sheet, !is_hide, ich_index, iDefault_x, iDefault_y);
}
function resizeChart(dataSheet, hide_chart, iindx, ix, iy) {
  //по умолчанию нулевые размеры - чтобы скрыть
  var cx = ix, cy = iy;
  if(hide_chart)//если надо скрыть
  {
    cx = 500; cy = 500;
  }
  var charts = dataSheet.getCharts();
  var chart = charts[iindx]; //берется диаграмма с указанным индексом(iindx)
  var ch = chart.getOptions().get('height');
  var cw = chart.getOptions().get('width');
  chart = chart.modify().setOption('width', cw).setOption('height', ch).setPosition(cx, cy, 0, 0).build();
  dataSheet.updateChart(chart);
}

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


spoiler for Hiden:
P.S. надо все же как-то начать изучать программирование, раз задачи такие появляются. Ведь не первый раз со скриптами боретесь - за это время можно было бы хотя бы основами заняться Улыбка
12  Основные форумы / Вопросы по работе в Google-таблицах / Re:Появление диаграммы по формуле : 23.11.2023, 15:48:49
Вот пример, как запоминать параметры диаграммы(на примере высоты и ширины):
Код: (js)
function onEdit(e) {

  var actRng = e.range;
  if (actRng.getA1Notation() != "A1") {return;}

  var sheet = e.range.getSheet();
  var is_hide = actRng.getValue();
  resizeChart(sheet, !is_hide);
}
function resizeChart(dataSheet, hide_chart) {
  //по умолчанию нулевые размеры - чтобы скрыть
  var cx = 5, cy = 5;
  if(hide_chart)//если надо скрыть
  {
    cx = 500; cy = 500;
  }
  var charts = dataSheet.getCharts();
  var chart = charts[0]; //берется первая диаграмма - поставить нужный индекс
  var ch = chart.getOptions().get('height'); //запоминаем высоту
  var cw = chart.getOptions().get('width'); //запоминаем ширину
  //меняем положение диаграммы, оставляя при этом исходные размеры
  chart = chart.modify().setOption('width', cw).setOption('height', ch).setPosition(cx, cy, 0, 0).build();
  dataSheet.updateChart(chart);
}

примерно так же запоминаются и применяются остальные параметры. Но надо смотреть в документации к какому элементу как обращаться, что не самое развлекательное занятие.
13  Основные форумы / Вопросы по работе в Google-таблицах / Re:Появление диаграммы по формуле : 23.11.2023, 15:25:53
индекс можно определить по сути только опытным путем. Иных вариантов я не припомню. Но индексы вроде как назначаются в порядке создания диаграмм - т.е. самая первая, добавленная на лист - это индекс 1, вторая - 2 и т.д. При этом, когда удаляете первую - все индексы смещаются на 1. Т.е. добавленная 2-ой становится уже 1-ой и т.д.
Из этого можно сделать простой вывод: чтобы точно знать индекс каждой диаграммы - берете каждую диаграмму по очереди и копируете в нужном порядке. Исходные потом удаляете.
Так же у каждой диаграммы есть свой уникальный ID - но для его получения надо писать отдельный код, т.к. он для внутреннего использования.
14  Основные форумы / Вопросы по работе в Google-таблицах / Re:Появление диаграммы по формуле : 23.11.2023, 13:43:01
Нет времени сейчас заниматься подобными проектами. Вы спросили как - я дал направление. А подправлять под "решение под ключ" уже другая история и надо еще кучу нюансов уточнять у Вас. Плюс там надо еще все будет досконально прорабатывать(размеры, индексы, настройки диаграмм).
По вопросу куда-то девает данные диаграммы - надо в chart.modify() добавлять все, что надо. Можно и более сложным путем идти и применить нечто вроде запросов updateEmbeddedObjectPosition(но подозреваю, что это будет еще сложнее для понимания происходящего). К сожалению, в гугл работа с диаграммами далеко не такая удобная, как в Excel.
Ну а это:
И диаграмма почему то появляется при снятии чекбокса а не наоборот
Поменяйте это поведение на нужное Вам:
Код: (vb)
if(hide_chart)//если надо скрыть

надо просто написать
Код: (vb)
if(hide_chart == false)//если надо скрыть

или
Код: (vb)
if(!hide_chart)//если надо скрыть

это азы программирования и если с этим проблемы - то реально лучше задачу либо "заказать", либо изменять подход.
Тоже самое и с появлением при нажатии на разные чекбоксы - в скрипте же у меня указано, что чекбокс в ячейке А1 и я это дополнительно пояснил. Можно это поведение "расширить" и на другие(ветвления вроде if ... then и другие конструкции).
Но если настолько далеко от программирования - то явно не Ваш путь. Потому что даже если это Вам сделают на форуме - при любом изменении придется обращаться снова и снова.
15  Основные форумы / Вопросы по работе в Google-таблицах / Re:Появление диаграммы по формуле : 23.11.2023, 12:21:27
Насколько мне известно, скрывать диаграммы в GoogleSheets вообще нельзя. Никак.
Но можно схитрить через скрипты - перемещать диаграмму за пределы видимости:
Код: (js)
function onEdit(e) {

  var actRng = e.range;
  if (actRng.getA1Notation() != "A1") {return;}

  var sheet = e.range.getSheet();
  var is_hide = actRng.getValue();
  resizeChart(sheet, is_hide);
}
//функция перемещения диаграммы
function resizeChart(dataSheet, hide_chart) {
  //по умолчанию нулевые размеры - чтобы скрыть
  var cw = 200, ch = 200, cx = 5, cy = 5;
  if(hide_chart)//если надо скрыть
  {
    cw = 1; ch = 1; cx = 500; cy = 500;
  }
  var charts = dataSheet.getCharts();
  var chart = charts[0]; //берется первая диаграмма - поставить нужный индекс
  chart = chart.modify().setOption('width', cw).setOption('height', ch).setPosition(cx, cy, 0, 0).build();
  dataSheet.updateChart(chart);
}

Флажок в ячейке А1.
setPosition - выставляет положение диаграммы. Поэтому cx и cy укажите свои(cx = 5 - по сути 5-ый столбец(Е), cy = 5 - пятая строка). Так же у диаграмм в гугл нет имен - поэтому обращение только по индексу. В примере это самая первая диаграмма.
С cw и ch, думаю, понятно.
Страниц: [1] 2 3 ... 386
Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2011, Simple Machines Valid XHTML 1.0! Valid CSS!
Яндекс.Метрика Рейтинг@Mail.ru