Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
Евгений написал: мне нужно это осознать, как применить... в любом случае спасибо.
Вставьте, то что я написал в модуль (2 функции) Кликните внутрь функции "start" и нажмите f9 (вы начнёте построчную компиляцию кода) Далее нажимайте f9 и смотрите в locals (окошко с переменными). Должно стать понятно.
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
Sub start()
x1 (1)
End Sub
Sub x1(ByRef a As Integer)
MsgBox (a)
End Sub
Функция start в теле вызывает функцию x1 с целочисленным параметром "а". В Вашем случае стоит событие на изменение листа(worksheet_change) которое передает активную ячейку как параметр.
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
Евгений написал: Вот и пытаюсь понять, какие фундаментальные знания у меня отсутствуют
Фундаментальные знания о процедурах и функциях с параметрами. Функцию с параметрами без передачи онных в VBA нельзя компилировать поэтапно (или всю целиком), пока не передадите в неё параметр.
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
Добрый день, Чтобы это сделать быстро и без проблем необходимо: 1) Сделать заголовки для двух столбцов 2) Поставить формулу во второй столбец со ссылкой на данные из первого (у Вас есть периодичность, то есть в ячейке B2 будет значение А4, в ячейке В6 значение А8) 3) Сделать фильтр 4) Выбрать в фильтре первого столбца Ф.И.О. 5) Протянуть первую ссылочную формулу до самого низа (периодично же) Всё, Ваша задача решена.
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
хоть это и офф. топ уже, но всё же: В настоящее время количество прикладных языков программирования (список языков), реализующих объектно-ориентированную парадигму, является наибольшим по отношению к другим парадигмам. Наиболее распространённые в промышленности языки (С++, Delphi, C#, Java и др.) воплощают объектную модель Симулы. Примерами языков, опирающихся на модель Смолтока, являются Objective-C, Python, Ruby. P.S.
Цитата
Deuce97 написал: Тот же массив mass( 4,9) на самом деле из 5 строк и 10 столбцов - МОЯ ГЛАВНАЯ ОШИБКА
Нет, главная ошибка это писать недокод на VBA и называть себя программистом, при этом обосновывая свои неудачи тупостью языка программирования.
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
Это нисколько не нелепо, а нормальная систематизация хранения данных. Вполне адекватный подход в консолидации необходимых данных и их отображений. В идеале клиент файл должен осуществлять минимум вычислительных и сложных функций, а являться удобным интерфейсом.
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
Deuce97 написал: без обид, но я на Си это сделал за 1,5 минуты.
Я прогаю на Си, на VBA и немного на Java. И скажу, что суть одна. Всё это ООП, все похоже. P.S. Если сетуешь на "плохой" язык программирования, то проблема в существе между клавиатурой и стулом, но не в языке.
Цитата
Anchoret написал: Deuce97 , на Си вроде есть встроеная сортировка?
Да, она есть, но истинных изобретателей велосипедов таких, как Deuce97, обычным заурядным людям не остановить.
З.Ы. зачем в коде Си вы постоянно для каждой базовой итерации инициализируете заново переменные? Почему бы не заменить на просто присвоение значений?
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
Hydro написал: кнопку которая закрывает файл на компьютере2 и открывает его заново
Нет, Ваша задача решается проще: 1) Создаете 1 мастер файл. С помощью него Вы будете изменять нужные параметры. В Вашем случае это Книга1. Это таблица с данными. В концепции - База данных. 2) Создайте клиент файл. С его помощью можно смотреть данные и обновлять их. В Вашем случае это книга 2. Это файл для визуализации. В концепции - клиентский модуль. 3) Себе оставляйте мастер файл, а всем другим пользователям на других ПК дайте клиент файл. В клиент файле создайте кнопку, которую будет нажимать пользователь для обновления данных из мастер файла, заливок и.т.п.. Реализовать это можно различными способами.
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
Добрый день, Hydro, а можно во втором файле сделать кнопку на обновления. Или это в данной задаче не подойдёт?
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
Карабас написал: Или как еще можно по другому выбрать мышью нужную книгу и столбец запуская макрос из Книги1?
Вообще я обычно делаю так: Создаю listbox (иногда listview, но с ним больше проблем из-за несовместимости Common Controls в 32 и 64 системах) на форме, в него вношу все имена активных книг (автоматически при инициализации формы). Пользователь выбирает нужную книгу, я обрабатываю его выбор и осуществляю действия с выбранной им книгой, столбцом, ячейкой, и.т.д.
P.S. А вообще в Вашем случае лучше сделать надстройку xlam и прикрепить её к панели инструментов.
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
Тогда попробуйте это (берётся 2-я книга, которая не первая ) Ну сами того хотели же. Можете адаптировать как пожелаете
Код
Dim wb As Workbook
For Each wb In Workbooks
if Wb.name <> thisworkbook.name then
LrOW1 = Workbooks(wb.name).Worksheets("Лист1").Cells(Rows.Count, Index1.Column).End(xlUp).Row
MsgBox LrOW1
end if
Next
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
Необходимо при создании файлов и добавлении в них информации макросом, еще и обновить в этих файлах все запросы и запустить некоторые макросы перед сохранением и закрытием, Пример кода в топике
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
ac1-caesar написал: то появляется лишнее ожидание +3 секунды.
Сразу видно профи, бережет секунды. Мало таких у нас в стране родимой... Если поставить частоту обновления в 1 сек, то макс задержка предложенного мной метода равна <1 сек. То что вы нарыли:
Цитата
ac1-caesar написал: Set WshShell = CreateObject("WScript.Shell").Run("MyScript", 0, True)
не используется для Вашего варианта.
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
Пример моей боевой сортировки (сортировка расчёской), она намного быстрее пузырьковой, а вот о чём Вам говорит Ігор Гончаренко: Есть массив есть сортируемое поле arr_X(i, 1), которое сортируется по возрастанию:
Код
maxs = k - 1
gap = k - 1
Do While gap >= 1
If gap >= 1 Then
i = 1
Do While (i - 1 + gap) < maxs
If arr_X(i, 1) > arr_X(i + gap, 1) Then
For j = 1 To 5
buf = arr_X(i, j)
arr_X(i, j) = arr_X(i + gap, j)
arr_X(i + gap, j) = buf
Next
End If
i = i + 1
Loop
If (i + gap) >= maxs Then
If gap = 1 Then
gap = 0
End If
If gap = 2 Then
gap = 1
End If
gap = CLng(gap / 1.24733095010398)
End If
Loop
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
Судя по коду Вы хотели реализовать сортировку перестановкой?
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
Честно говоря, я не пойду что тут правильного. Если вам нужна сортировка по возрастанию и/или убыванию, то я могу привести с десяток разных вариантов. Меня смущают какие-то условия, наподобие:
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
Deuce97 написал: Может, где-то что неправильно написал в коде
Конечно, неправильно, 4-х уровневый for и в нем 3 уровня IF. Какая задача была у Вас?
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
ac1-caesar написал: однако уж очень он не универсален
Посмотрите, пожалуйста, вторую часть я её изменил и обновил
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
Добрый день, Как насчёт другого подхода? Например, Вы всегда знаете, что процесс формирования ворд файла занимает определенное время, можно поставить ожидание:
Код
Application.Wait (Now + TimeValue("0:00:02"))
Пример ожидания выполнения на 2 сек. Также можно сделать каждые 2 секунды мониторить каталог и смотреть, если ли там нужный файл и повторять это же действия, пока его не будет там:
Код
Sub Search()
Dim xFactor As Boolean
Dim strDirPath, strMaskSearch, strFileName As String
strDirPath = "E:\test\" 'Папка поиска
strMaskSearch = "*.txt*" 'Маска поиска
Do While xFactor = False
'Ожидание 5 сек
Application.Wait (Now + TimeValue("0:00:05"))
'Получаем первый файл соответствующий шаблону
strFileName = Dir(strDirPath & strMaskSearch)
Do While strFileName <> "" 'До тех пор пока файлы "не закончатся"
If strFileName = "Имя вашего документа.txt" Then
xFactor = True
End If
strFileName = Dir 'Следующий файл
Loop
Loop
End Sub
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
Отображение и формирование нескольких форм отчетности в зависимости от выбора в выпадающем списке., Отображение и формирование нескольких форм отчетности в зависимости от выбора в выпадающем списке.
Doroshenko написал: Подскажите, пожалуйста, как можно реализовать данную задумку.
Я даже не знаю, что тут подсказывать. Тут нужно делать с помощью сводных и фильтров или VBA
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
GreyOLDsmile написал: Просто в школе и в институте учил другие языки программирования
Тогда проблем с VBA не должно быть. Он довольно простой. Я не люблю книги по 500-600 страниц (хотя не исключаю того, что они кому-то помогают), делаю всегда так: 1) Изучаю базовые объекты языка (переменные, функции, типы данных, функции, классы, и.т.д.) 2) Логические схемы языка (Циклы, условия, перечисления, сортировки) 3) Делаю базовые задачи, типа "Hello World!", "Калькулятор", "Маленькая БД с массивами данных" и.т.д. В процессе этого получаю сразу прикладные знания в нужном мне русле, все непонятные моменты ищу в интернете.
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
wowick написал: при отсутствии аргументов (пустая ячейка) ваш код вернет 1
Мы здесь не кривые руки обрабатываем, а решаем конкретные задачи с конкретными условиями. Для того, чтобы wowick, не ворчал
Код
If Left(ThisWorkbook.Sheets(1).[A1].Formula, 1) <> "=" Then
Exit Sub
Else
i = 0
x = ThisWorkbook.Sheets(1).[A1].Formula
Do While InStr(x, "+") <> 0
n = InStr(x, "+")
x = Right(x, Len(x) - n)
i = i + 1
Loop
MsgBox (i + 1)
End If
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.