Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 3 4 5 След.
Если ячейка 1 пустая то ячейка 2 ( )
 
Вы об этом?
Код
=ЕСЛИ(C5="";"ошибка";C6)

Или в самом списке должна быть склейка "Цена + Ошибка, если имеется"
Изменено: ProFessor - 16 Авг 2018 09:56:34
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
Отладка процедур обработки событий
 
Цитата
Евгений написал:
мне нужно это осознать, как применить... в любом случае спасибо.
Вставьте, то что я написал в модуль (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) которое передает активную ячейку как параметр.
Изменено: ProFessor - 8 Май 2018 15:42:36
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
Отладка процедур обработки событий
 
Добрый день,
Цитата
Евгений написал:
Вот и пытаюсь понять, какие фундаментальные знания у меня отсутствуют
Фундаментальные знания о процедурах и функциях с параметрами. Функцию с параметрами без передачи онных в VBA нельзя компилировать поэтапно (или всю целиком), пока не передадите в неё параметр.
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
Перенос сожержимого определенной ячейки (по содержанию), перенос значения чейки
 
Добрый день,
Чтобы это сделать быстро и без проблем необходимо:
1) Сделать заголовки для двух столбцов
2) Поставить формулу во второй столбец со ссылкой на данные из первого (у Вас есть периодичность, то есть в ячейке B2 будет значение А4, в ячейке В6 значение А8)
3) Сделать фильтр
4) Выбрать в фильтре первого столбца Ф.И.О.
5) Протянуть первую ссылочную формулу до самого низа (периодично же)
Всё, Ваша задача решена.
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
Сортировка матрицы VBA
 
Цитата
Deuce97 написал:
ProFessor ,СИ не ООП.
хоть это и офф. топ уже, но всё же:
В настоящее время количество прикладных языков программирования (список языков), реализующих объектно-ориентированную парадигму, является наибольшим по отношению к другим парадигмам. Наиболее распространённые в промышленности языки (С++, Delphi, C#, Java и др.) воплощают объектную модель Симулы. Примерами языков, опирающихся на модель Смолтока, являются Objective-C, Python, Ruby.
P.S.  
Цитата
Deuce97 написал:
Тот же массив mass( 4,9) на самом деле из 5 строк и 10 столбцов - МОЯ ГЛАВНАЯ ОШИБКА
Нет, главная ошибка это писать недокод на VBA и называть себя программистом, при этом обосновывая свои неудачи тупостью языка программирования.
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
Изменение книги на другом компьютере
 
Цитата
Hydro написал:
насколько это нелепо?
Это нисколько не нелепо, а нормальная систематизация хранения данных.
Вполне адекватный подход в консолидации необходимых данных и их отображений.
В идеале клиент файл должен осуществлять минимум вычислительных и сложных функций, а являться удобным интерфейсом.
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
Сортировка матрицы VBA
 
Цитата
Deuce97 написал:
без обид, но я на Си это сделал за 1,5 минуты.
Я прогаю на Си, на VBA и немного на Java. И скажу, что суть одна. Всё это ООП, все похоже.
P.S. Если сетуешь на "плохой" язык программирования, то проблема в существе между клавиатурой и стулом, но не в языке.

Цитата
Anchoret написал:
Deuce97 , на Си вроде есть встроеная сортировка?
Да, она есть, но истинных изобретателей велосипедов таких, как Deuce97, обычным заурядным людям не остановить.

З.Ы. зачем в коде Си вы постоянно для каждой базовой итерации инициализируете заново переменные? Почему бы не заменить на просто присвоение значений?
Изменено: ProFessor - 25 Апр 2018 13:52:33
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
Изменение книги на другом компьютере
 
Цитата
Hydro написал:
кнопку которая закрывает файл на компьютере2 и открывает его заново
Нет, Ваша задача решается проще:
1) Создаете 1 мастер файл. С помощью него Вы будете изменять нужные параметры. В Вашем случае это Книга1. Это таблица с данными. В концепции - База данных.
2) Создайте клиент файл. С его помощью можно смотреть данные и обновлять их. В Вашем случае это книга 2. Это файл для визуализации. В концепции - клиентский модуль.
3) Себе оставляйте мастер файл, а всем другим пользователям на других ПК дайте клиент файл. В клиент файле создайте кнопку, которую будет нажимать пользователь для обновления данных из мастер файла, заливок и.т.п..
Реализовать это можно различными способами.
Изменено: ProFessor - 25 Апр 2018 13:35:34
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
Выбор книги для взятия значений из столбца
 
Определение всего что Вы перечислили активного на данный момент
Код
WBname = ActiveWorkbook.Name
WBlist = ActiveWorkbook.ActiveSheet.Name
WBCellCol = ActiveCell.Column
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
Выбор книги для взятия значений из столбца
 
Цитата
Карабас написал:
Значит никак не выбрать другую книгу и ячейку кликом мыши?
"Мои вкусы очень специфичны"  :D

Можно и так сделать, но это странный подход. Методология тогда иная.

Цитата
Карабас написал:
если мышью нельзя активировать нужную книгу
Это как вообще возможно? Мышь сломалась? Книга не активируется?
Изменено: ProFessor - 25 Апр 2018 11:37:57
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
Пропали графики в сводная диаграмме
 
Перетащите поле "Цена" в "Значения" в сводной
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
Изменение книги на другом компьютере
 
Добрый день,
Hydro, а можно во втором файле сделать кнопку на обновления. Или это в данной задаче не подойдёт?
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
Выбор книги для взятия значений из столбца
 
Цитата
Карабас написал:
Или как еще можно по другому выбрать мышью нужную книгу и столбец запуская макрос из Книги1?
Вообще я обычно делаю так:
Создаю listbox (иногда listview, но с ним больше проблем из-за несовместимости Common Controls в 32 и 64 системах) на форме, в него вношу все имена активных книг (автоматически при инициализации формы).
Пользователь выбирает нужную книгу, я обрабатываю его выбор и осуществляю действия с выбранной им книгой, столбцом, ячейкой, и.т.д.

P.S. А вообще в Вашем случае лучше сделать надстройку xlam и прикрепить её к панели инструментов.
Изменено: ProFessor - 25 Апр 2018 11:04:15
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
Выбор книги для взятия значений из столбца
 
Тогда попробуйте это (берётся 2-я книга, которая не первая :D ) Ну сами того хотели же. Можете адаптировать как пожелаете
Код
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
Изменено: ProFessor - 25 Апр 2018 10:26:48
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
Выбор книги для взятия значений из столбца
 
Цитата
Карабас написал:
Книги2 не известно
То есть сейчас у вас 2 активные книги и нужно взять данные из другой книги, но не из той из которой Вы запускаете макрос?
Изменено: ProFessor - 25 Апр 2018 10:16:15
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
Выбор книги для взятия значений из столбца
 
Добрый день,
Замените ваш кусочек на вот этот (это обращение к конкретной книге и листу) По умолчанию у Вас стоит текущая книга.
Код
   LrOW1 =  Workbooks("Книга2").Worksheets("Лист1").Cells(Rows.Count, Index1.Column).End(xlUp).Row
   MsgBox LrOW1
Изменено: ProFessor - 25 Апр 2018 10:07:59
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
Необходимо при создании файлов и добавлении в них информации макросом, еще и обновить в этих файлах все запросы и запустить некоторые макросы перед сохранением и закрытием, Пример кода в топике
 
Добрый день,
Что Вы подразумеваете под
Цитата
falmrom написал:
Запустить несколько макросов
?

Если вы всё же про модули, то просто напишите:
Код
Call Имя_модуля.Имя_процедуры(функции)
Изменено: ProFessor - 25 Апр 2018 09:27:20
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
Сохранение листов книги как отдельных файлов-в продолжение темы, хотелось бы подстроить код под себя
 
Добрый день,
Цитата
Dobepman написал:
разрывались абсолютно все связи
Вы про ссылочные ячейки на данные из других книг? Или о чём?
Изменено: ProFessor - 25 Апр 2018 09:22:57
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
Ожидание завершения функции или процедуры
 
Цитата
ac1-caesar написал:
то появляется лишнее ожидание +3 секунды.
Сразу видно профи, бережет секунды. Мало таких у нас в стране родимой...
Если поставить частоту обновления в 1 сек, то макс задержка предложенного мной метода равна <1 сек.
То что вы нарыли:
Цитата
ac1-caesar написал:
Set WshShell = CreateObject("WScript.Shell").Run("MyScript", 0, True)
не используется для Вашего варианта.
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
Сортировка матрицы VBA
 
Цитата
Deuce97 написал:
Сортируем целиком, не отдельно строки или стоблцы, а ЦЕЛИКОМ
То есть по всем столбцам и строкам?
В чем проблема сцепить их вместе? И также сортировать по одному полю...
Изменено: ProFessor - 24 Апр 2018 16:51:59
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
Сортировка матрицы VBA
 
Пример моей боевой сортировки (сортировка расчёской), она намного быстрее пузырьковой, а вот о чём Вам говорит Ігор Гончаренко:
Есть массив есть сортируемое поле 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
Изменено: ProFessor - 24 Апр 2018 16:49:38
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
Сортировка матрицы VBA
 
Судя по коду Вы хотели реализовать сортировку перестановкой?
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
Сортировка матрицы VBA
 
Цитата
Deuce97 написал:
Что тут неправильного?  
Честно говоря, я не пойду что тут правильного.
Если вам нужна сортировка по возрастанию и/или убыванию, то я могу привести с десяток разных вариантов.
Меня смущают какие-то условия, наподобие:
Код
 If l = 10 And k = 17 Then
' Ничего не делаем
Else
Изменено: ProFessor - 24 Апр 2018 16:37:43
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
Сортировка матрицы VBA
 
Добрый день,
Цитата
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
Изменено: ProFessor - 24 Апр 2018 16:17:45
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
Отображение и формирование нескольких форм отчетности в зависимости от выбора в выпадающем списке., Отображение и формирование нескольких форм отчетности в зависимости от выбора в выпадающем списке.
 
Добрый день,
С таким ТЗ на отчёт нужно 1-но из 2-х:
1) Перенесите тему в https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=list&FID=7
2) Или ждать добрую безвозмездную душу с тонной времени.

Цитата
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
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
Страницы: 1 2 3 4 5 След.
Наверх