Просмотр сообщений
|
Страниц: [1] 2 3 ... 386
|
5
|
Основные форумы / Вопросы по Excel и VBA / Re:Как подключиться к локальному серверу с другой учетной записью и паролем из VBA
|
: 29.11.2023, 17:00:28
|
ADODB.Connection никак не связан с папками - это инструмент работы с базами данных, по сути. Вряд ли его можно как-то в этом случае задействовать. Скорее GetObject("winmgmts. А вот NetworkObject.MapNetworkDrive может выдать ошибку, если подключение происходит от имени пользователя, у которого недостаточно прав на это. А ошибка "Множественное подключение........." как правило говорит о том, что диск уже подключен. Возможно, надо сбросить. Для начала в командной строке Windows(Пуск -Выполнить) введите команду: net use. Посмотрите, какие сетевые диски подключены. Отключите диск скриптом: NetworkObject.RemoveNetworkDrive "Y:", True, True повторите команду net use. Удаленного диска быть не должно. Если не удалился - попробуйте удалить командой: net use d/ Y:повторите команду net use. Если диск так и не удалился - надо искать причину отказа удаления диска. Может быть что-то поломалось. Можно поискать в реестре по ключу "Network\имя_диска". Если нашли - ключ удалить. Если удалился - попробуйте подключить его своим скриптом. Других идей нет - здесь можно гадать долго. Возможно вообще все банальной перезагрузкой решиться. В некоторых версиях Windows подключение и работа с сетевыми дисками на ровном месте сбой давали. По сути ни VBA, ни Excel здесь не при делах. Это проделки ОС.
|
|
|
7
|
Основные форумы / Вопросы по Excel и VBA / Re:Как подключиться к локальному серверу с другой учетной записью и паролем из VBA
|
: 29.11.2023, 14:22:45
|
Может имя диска надо указать? Плюс, полагаю, не мешало бы сначала отключать его, если такой уже есть: NetworkObject.RemoveNetworkDrive "Y:", True, True NetworkObject.MapNetworkDrive "Y:", ServerShare, False, UserName, Password
|
|
|
9
|
Основные форумы / Вопросы по Excel и VBA / Re:Замена текста в ячейке и во всей книге
|
: 28.11.2023, 17:57:00
|
Выполните сначала метод Find со всеми параметрами: 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: Cells(N_Row, 4).Value = replace(Cells(N_Row, 4).value," ","")
|
|
|
10
|
Основные форумы / Вопросы по работе в Google-таблицах / Re:Появление диаграммы по формуле
|
: 24.11.2023, 10:47:52
|
Вот не пойму я Вас...Выше же есть пример, когда устанавливаются все нужные размеры в коде - самый первый, где я все расписал(там еще написано, что с cw и ch должно быть понятно). Вы их в тот момент, вероятно, даже не пробовали менять под нужные для диаграмм  После чего Вам понадобилось сохранять параметры, т.к. вид диаграммы менялся(именно из-за изменения размеров, кстати, пропадали подписи). Ну можно же хотя бы смекалку-то подключать, если уж логика не дотягивает?  Без этого в программировании точно никак. Есть код с установкой размеров, есть без. Посмотреть, сравнить и попробовать переделать. А Вы сейчас 100% сначала пишете это: var cw = 800, ch = 400, cx = ix, cy = iy; а затем в коде не убираете это: 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) Если посмотреть код - то Вы и не пытаетесь расширить функцию - Вы просто за её пределы что-то написали и все  И кстати - доступа к файлу нет, приходится опять выдумывать свои. Вот так будет проще доработать и понять принцип(а может и нет): 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); } код постарался сделать максимально простым и понятным, без особо хитрых условий. Дорабатывайте.
|
|
|
12
|
Основные форумы / Вопросы по работе в Google-таблицах / Re:Появление диаграммы по формуле
|
: 23.11.2023, 15:48:49
|
Вот пример, как запоминать параметры диаграммы(на примере высоты и ширины): 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. Ну а это: И диаграмма почему то появляется при снятии чекбокса а не наоборот Поменяйте это поведение на нужное Вам: if(hide_chart)//если надо скрыть надо просто написать if(hide_chart == false)//если надо скрыть или if(!hide_chart)//если надо скрыть это азы программирования и если с этим проблемы - то реально лучше задачу либо "заказать", либо изменять подход. Тоже самое и с появлением при нажатии на разные чекбоксы - в скрипте же у меня указано, что чекбокс в ячейке А1 и я это дополнительно пояснил. Можно это поведение "расширить" и на другие(ветвления вроде if ... then и другие конструкции). Но если настолько далеко от программирования - то явно не Ваш путь. Потому что даже если это Вам сделают на форуме - при любом изменении придется обращаться снова и снова.
|
|
|
15
|
Основные форумы / Вопросы по работе в Google-таблицах / Re:Появление диаграммы по формуле
|
: 23.11.2023, 12:21:27
|
Насколько мне известно, скрывать диаграммы в GoogleSheets вообще нельзя. Никак. Но можно схитрить через скрипты - перемещать диаграмму за пределы видимости: 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, думаю, понятно.
|
|
|
|
|