Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 След.
Связи в файле Excel: специфика работы кэша
 
vikttur, Название темы, как вариант: Специфика работы кэша в файле эксель

Samvel, Спасибо. Похоже, что действительно так и есть. С той лишь оговоркой, что дело не в связи как таковой, а в том, что второй файл был создан из первого. Поэтому структура их идентична и кэш подгружается из того файла, к-ый открыт в последнюю очередь (вроде как самый "свежий").
Знать бы еще, что это за идентификатор такой, тогда его легко можно было бы заменить в xml-ке (если он не двоичный конечно).
Связи в файле Excel: специфика работы кэша
 
SuperCat,

У пользователя автообновление отключено. Доступа к источнику нет.
То, что данные берутся из кэша - это понятно. Но я думал, что для каждого файла свой кэш.

Но получается, что кэш общий на эти два файла.

Т.е. если у меня открыт ТОЛЬКО файл "file_1.xlsx", то значение в ячейке A1 = 61 177 872 631
Если у меня открыт ТОЛЬКО файл "file_2.xlsx", то значение в ячейке A1 = 60 680 563 428
Но если я открою оба файла (и file_1.xlsx и file_2.xlsx), то значение ячейки A1 в обоих файлах у меня станет равно значению из последнего открытого файла. Автообновление при этом отключено, доступа к источнику нет.

Как я и писал выше, помогает только отключение пересчета формул. Тогда ячейки сохраняют свои уникальные значения.
Но почему кэш общий для обоих открытых файлов, вот вопрос? Может это где-то настраивается?
Изменено: Andrew - 21.07.2016 09:34:39
Связи в файле Excel: специфика работы кэша
 
Всем добрый день.

Есть два файла Excel (file_1.xlsx и file_2.xlsx).
В каждом из файлов есть одна связь на внешний файл. Исходя из указанной связи идет расчет в ячейке A1.
Внешний файл для обоих файлов один и тот же. Разница лишь во времени обновления данных (старая и новая версия), т.е. исходник для file_1.xlsx и file_2.xlsx один и тоже, но т.к. делались они в разное время, то и цифра соответственно разная.

Если file_1.xlsx и file_2.xlsx отправить человеку, который не имеет доступа к исходному файлу, он с ними сможет работать без обновления связей.
Но что любопытно. Если человек одновременно откроет  file_1.xlsx и file_2.xlsx, то цифры в обоих файлах сравняются.

Почему такое происходит?

Содержимое \xl\externalLinks\externalLink1.xml в каждом файле свое. Если открывать файлы по одному, то тоже ок - цифры отличаются. Почему же, когда оба файла открыты данные совпадают, будто подключаются к одному кэшу?

Да, можно отключить пересчет формул и "слияния" значений не произойдет. Можно разорвать связь, тем самым преобразовав ее в значения, тогда разумеется значения также зафиксируются.

Но хочется понять принцип работы экселя. Почему он склеивает эти кэши, тогда как файлы совершена разные (хоть и открыты в рамках одного процесса).
Excel, VBA и SSH
 
Никто не работает с SSH из VBA?
Excel, VBA и SSH
 
Всем доброго дня.

Скажите, кто-нибудь использует в работе VBA + SSH? Если да, то как реализуете процесс работы?

Поискал по форуму и в интернете. Всё, что удалось найти так или иначе завязано на том, что в комплекте с файлом Excel надо всегда носить еще пачку файлов, необходимых для работы с SSH (будь то файлы от Putty Portable или иного какого клиента). Также некоторые приложения платные и стоит немало.

Из бесплатных и с минимальным движений со стороны пользователя, интересно, есть вообще что-нибудь?
Работа Excel в OneDrive
 
Подскажите, пожалуйста, может кто использует.

Есть файл excel, который загружен в onedrive.live.com
Режим просмотра: в браузере. Будут ли доступны макросы vba таким образом?

Сделал простенький файл excel с простейшим макросом вывода MsgBox. Но что-то не получается его запустить.
Первое впечатление, что данный функционал не поддерживается.
Доработка ComboBox1_MouseMove
 
Спасибо
Доработка ComboBox1_MouseMove
 
Спасибо, Влад.
Не подскажите, значение 9.65 от чего зависит? От разрешения монитора, размера шрифта или чего-то другого?
Включение COM надстройки
 
Владимир, спасибо за помощь.

Проверил у себя с надстройкой "Fuzzy Lookup". С ней всё ок. После запуска vbs скрипта указанная надстройка работает.
А вот используемая мной надстройка так и не заработала. Скорее всего, дело в самой надстройке.

Использовал: Excel 2013 32bit
Надстройка: Smart View (от Oracle), ссылка
Доработка ComboBox1_MouseMove
 
Добрый день.
Подскажите. Есть такой код:
Код
Private Sub ComboBox1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    If ComboBox1.TopIndex < 0 Then
        Frame1.Caption = "откройте список"
        Exit Sub
    End If
    Frame1.Caption = Range("C1:C10").Cells(Int(Y / 9.65) + 1).Value
End Sub

Код рабочий, но если в выпадающем списке больше 8 вариантов, появляется скролл, и позиция элемента считается неверно. Т.е. если в приложенном ниже примере в выпадающем списке скролл прокрутить вниз и навести курсор например на "Вариант10", то в подсказке уже отобразится совсем не то, что ожидалось.

Как в этом случае можно рассчитать номер строки для вывода корректной подсказки?
Включение COM надстройки
 
Цитата
ZVI написал: Инсталлированные COM надстройки при этом должны загружаться сами по себе, проверьте еще раз.
Проверял не однократно. К сожалению, этого не происходит. Точнее, как я и указывал выше, надстройки загружаются и в панели надстроек я их вижу как подключенные и активные, но при этом они не функциональны. Словно находятся в каком-то спящем режиме.

Цитата
Слэн написал: запустите иксель shell-ом и возьмите его getobject-ом
Попробовал через shell, а именно:
Код
set wShell = WScript.CreateObject("WScript.Shell")
iRes = wShell.Run("EXCEL.EXE", 1)
Excel запускается, но тут возникает другая проблема. Если у меня до был запущен и работает какой-либо excel-макрос, то запущенный через shell новый экземпляр приложения Excel не будет доступен до тех пор, пока указанный макрос не завершит свою работу. Т.е. книга (новый экземпляр Excel) открылась, но все время горит сообщение "Microsoft Excel ожидает, пока другое приложение завершит действие OLE."

Как я понял, открытие через shell аналогично команде: excel.exe /x
В обоих случаях новый экземпляр эксель ждет пока завершит работу макрос в другом процессе.

Конечно, можно перед запуском исходного макроса открыть нужное количество новых процессов (через shell либо через excel.exe /x), тогда они будут вполне функциональны. Но хотелось именно в процессе работы какого-либо кода создавать новый экземпляр и получать к нему доступ без ожидания окончания работы макроса. VBS скрипт в моем посте от 18 Июн 2015 20:06:05  это позволяет делать, но при этом не задействует нужные мне com-надстройки.
Включение COM надстройки
 
Добрый день.
Подскажите, пожалуйста.

Есть VBS скрипт с таким содержимым:
Код
Dim xlApp, xlWb, xlWs
Set xlApp = CreateObject("Excel.Application")
Set xlWb = xlApp.Workbooks.Add: Set xlWs = xlWb.Worksheets(1)
xlApp.Visible = TRUE
Set xlWs = Nothing: Set xlWb = Nothing: Set xlApp = Nothing

Excel успешно открывается, книга создается.
Но никак не могу решить одну проблему.

У меня в excel есть подключенные XLAM и COM надстройки. При открытии excel скриптом выше, надстройки не подключаются. При этом в самом excel (Параметры Excel -> Надстройки) я эти надстройки вижу как активные/подключенные.

С XLAM-надстройкой проблему я решил просто. В скрипт выше добавил строку:
Код
Set xlWb = xlApp.Workbooks.Open("C:\Users\User\Documents\MoяНадстройка.xlam")

А вот с COM надстройкой засада. Ни как не могу заставить работать.
Пробовал манипуляции с:
Код
xlApp.EnableEvents = false/true
xlApp.IgnoreRemoteRequests = false/true
xlApp.AutomationSecurity = 1
xlApp.AddIns.Add("C:\Users\User\Documents\НадстройкаCOM.dll").Installed = True 
xlApp.AddIns("НадстройкаCOM.dll").Installed = True
xlApp.VBE.ActiveVBProject.References.AddFromFile "C:\Users\User\Documents\НадстройкаCOM.dll"

Может кто сталкивался с подобным?
Проблема при подключении надстройки
 
Если в модуль книги файла надстройки добавить:
Код
Private Sub Workbook_Open()
    Application.ScreenUpdating = 1
End Sub
то все работает нормально.
Решение конечно простое, но все же любопытно, почему данная проблема стала возникать, если раньше такого никогда не было.
Проблема при подключении надстройки
 
Доброго дня.

Делаю надстройку для Excel 2007. Файл xlsm сохраняю в файл xlam. В файле надстройки всего один макрос (для теста).
Надстройку подключаю стандартно: Параметры Excel -> Надстройки -> Надстройки Excel ->  Перейти -> Обзор -> Выбираю файл надстройки (xlam) -> OK

Но после нажатия кнопки 'OK' Excel как-то странно себя ведет. А именно: "замараживается" рабочая область активного листа, т.е. не могу кликать по ячейкам и тп (будто у меня открыта модальная форма). Если нажать на крестик (закрытие книги Excel), то книга "отмирает" (словно закрывается какая-то ее копия, к-ая мешала нормальной работе).
Раньше такого не встречал.

Еще что любопытно. Данная проблема наблюдается только если надстройка подключается через "Обзор -> Выбираю файл надстройки (xlam) -> OK". Если эта же надстройка ранее была подключена (но не активирована) и я просто ставлю галочку напротив данной надстройки и нажимаю 'OK', то вышеуказанной проблемы не наблюдается.

Кто-нибудь сталкивался с подобным?
Отображение длинного текста в ComboBox
 
Спасибо, ребята.
Остановился на варианте RAN.

Еще нашел созвучную тему(возможно, кому-то пригодится)
Отображение длинного текста в ComboBox
 
Спасибо, что откликнулись.

Вариант Sanja конечно работает, но он меняет ширину самого ComboBox1, что не желательно.
Вариант "текст под мышкой" - идеально. Вот как бы его прикрутить, чтобы он был просто всплывающим рядом текстом (без отдельного вывода в Label или ТекстБокс)
Отображение длинного текста в ComboBox
 
Добрый день.
Подскажите, пожалуйста.
Например, я открываю форму, раскрываю выпадающий список. Но часть значений выпадающего списка у меня относительно длинные и их текст по ширине не помещается в сплывающее окошко ComboBox. В результате, окончание текста у ряда длинных значений не видимо.
Можно установить ширину ComboBox "с запасом". Но это не всегда удобно.

Есть ли возможность настроить ComboBox так, чтобы полный текст значения появлялся при наведении указателя мыши на соответствующее значение в выпадающем списке? Что-то вроде всплывающей подсказки.
Оптимизация формулы расчета суммы
 
Спасибо, Максим. Работает.
Оптимизация формулы расчета суммы
 
alexthegreat, одновременно написали )
Оптимизация формулы расчета суммы
 
Понятно, можно сделать "в лоб", как в примере alexthegreat.
Но функци массива как-то приятнее на глаз. Да и если строк будет много, то в лоб уже далеко не так практично.
Оптимизация формулы расчета суммы
 
А такой момент.
Если в массиве "Значение 2" одно из значений окажется ноль (или пусто), то результат функции СУММПРОИЗВ (равно как и функции массива СУММ) выдаст ошибку.
Можно как-то обойти (не отказываясь от функции массива) ?
Изменено: Andrew - 21.08.2014 13:28:04
Оптимизация формулы расчета суммы
 
Супер. Спасибо большое.
Так и думал, что ответ где-то на поверхности, но видать уже мозг затуманен.
Оптимизация формулы расчета суммы
 
Где-то на подсознательном уровне понимаю, что нужно применять функции массивов или функции вроде СУММКВРАЗН, но подобрать нужную формулу не могу.
Изменено: Andrew - 21.08.2014 13:07:40
Оптимизация формулы расчета суммы
 
Здравствуйте. Подскажите, пожалуйста.
Есть расчет суммы, которая считается как сумма разности между значениями двух массивов.
Сейчас расчет делаю с использованием дополнительного столбца.
Можно ли как-то изменить формулу, чтобы расчитать нужную сумму (ячейка J4) без использования вспомогательного столбца?
В приложенном файле пример исходных данных и пример текущего расчета суммы.
Отследить изменение содержимого ячейки
 
Спасибо за помощь. Все получилось.
Отследить изменение содержимого ячейки
 
В приложенном файле есть флажок и связанная с данным флажком ячейка I6.
При клике на флажок меняется содержимое ячейки I6 (с истина на ложь или с ложь на истина).
Проблема: события листа Worksheet_Change и Worksheet_SelectionChange не позволяют отследить изменение содержимого ячейки I6, когда оное происходит путем клика по флажку.

Решение, до к-ого смог додуматься: привязать к флажку макрос Флажок1_Щелчок.
Но тогда возникает другая сложность: если флажков будет много (а их будет много), то придется под каждый влажок делать свою привязку (Sub Флажок1_Щелчок(), Sub Флажок2_Щелчок(), Sub Флажок3_Щелчок() и тд). Решение рабочее, но из-за большого кол-ва флажков - код какой-то избыточный получается.
Цитата
Hugo пишет: отслеживаем изменение всегда
Это, если я правильно понял, можно сделать через событие листа Worksheet_Calculate или есть другие способы?
Цитата
Hugo пишет: смотрим на флажок
Как можно "посмотреть" на флажок, расположенный на листе? Если не сложно, можете показать мини-примерчик?
Код
'например, обновились формулы на листе, сработало событие Calculate
Private Sub Worksheet_Calculate()
   Application.EnableEvents = 0
      'как посмотреть на флажок? (или в идеале перебрать все имеющие флажки листа для проверки их свойств)
   Application.EnableEvents = 1
End Sub
Отследить изменение содержимого ячейки
 
В том-то и дело, что флажков много и не хотелось бы плодить пачки макросов (хоть и однотипных).

Неужели, кроме как через макрос Флажок1_Щелчок, изменение содержимого в ячейке не отследить?
Может можно как-нибудь щелчок по флажкам на листе отследить через WinAPI и тп?
Отследить изменение содержимого ячейки
 
Да, извините, сразу не указал.
После изменения содержимого нужно запустить макрос.
Отследить изменение содержимого ячейки
 
Единственное, что приходит в голову, это вешать макрос на клик по "флажку".
Но если флажков будет более 50, очень уж много макросов придется к ним подвязывать:

Код
Sub Флажок1_Щелчок(): Call MyTest: End Sub
Изменено: Andrew - 09.07.2014 09:55:15
Отследить изменение содержимого ячейки
 
Доброе утро!

Подскажите, пожалуйста, как отследить изменение содержимого связанной ячейки при клике чекбокса на листе.
Пример в вложении.  
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 След.
Наверх