Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Excel VBA (часть 3)

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213

Открыть новую тему     Написать ответ в эту тему

ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

 
 
Обсуждаем вопросы только по Excel VBA
(программирование макросов, скриптов, пользовательских функций и т.п.).
Приветствуются ссылки на ресурсы и справочную литературу по теме.
 
Вопросы по работе с MS Excel, не относящиеся к программированию, задаем в теме Excel FAQ

 
Обратите внимание, этот топик для помощи в изучении и использовании VBA. Посему запросы типа "Напишите мне такой-то макрос, я VBA не знаю и знать не хочу" не приветствуются.
Древняя мудрость: "Накорми голодного рыбой и он погибнет, научи его ловить рыбу и ты спасешь его."(R)
 
Предыдущие ветки топика: Часть 1, Часть 2
 
Информация общего характера:
  • Список соответствия имен функций в английской и русской версиях Excel
  • Описание Microsoft Excel File Format (eng.)
     
    Рекомендации:
    Если у Вас есть проблема, не решаемая стандартными средствами Excel (об этом можно уточнить здесь) или требующая автоматизации, попробуйте для начала записать макрос самим Excel через меню Сервис (Tools) - Макрос (Macro) - Начать запись (Record New Macro). Подробнее здесь. В большинстве случаев получившийся код (Сервис-Макрос-Макросы-Изменить) Вас не удовлетворит, но подскажет, какие объекты-методы-свойства использовать.  
    Другой Ваш помощник - Просмотр объектов (Object Browser). Ну и встроення помощь (F1), естественно.
     
    Если Вы в тупике, покажите Ваш код (или часть кода) здесь.  Если вылазит ошибка, цитируйте ее полностью. Если код слишком большой, используйте тeг [more].
    Используйте отладчик - Breakpoints (F9), Watches (Shift-F9), Steps (F8 и др.) Сильно облегчает поиск ошибок.

     
    Рекомендуется к прочтению:
  • Первые шаги с Excel VBA
  • Excel VBA: Приёмы программирования
  • WinApi. Лекция из курса "Основы офисного программирования и язык VBA" (для продвинутых)
  • Daily Dose of Excel (eng.) - тематический блог: советы по работе с Excel и прочие материалы
  • Excel Macros & Excel VBA Code Tips, Tricks (eng.) - советы, трюки и уловки
  • Mr. Excel (forum) (eng.) - весьма оживленный форум по Excel&VBA.
  • Приемы, хитрости, трюки и нюансы работы в Microsoft Excel - сайт "Планета Excel", целиком посвященный Excel и всему, что с ним связано.
  • Microsoft Excel: Таблицы и VBA. Справочник. Вопросы и Ответы. Советы. Примеры.  
     
    Родственные топики:
  • Вопросы по работе с MS Excel - Excel FAQ - часть 1, часть 2, часть 3
  • Технические проблемы с MS Office 2003 или Office XP.
  • Word VBA все вопросы по Word VBA туда
  • Access все вопросы по программированию в Access туда
  • Книжульки по VBA - книги по программированию с использованием VBA
     
    Конкретные вопросы:
    Форма-заставка
    Как запустить макрос при изменении положения курсора или значения ячейки
  • Пример 1
  • Пример 2
  • Пример 3 (проверка области)
  • Пример 4
  • Пример 5
    Зацикливание в функции Change или SelectionChange
     
    Ранжирование без пробелов (макрос включает функции сортировки массива и удаления дубликатов, работает и в Excel 2007)
  • под Office 97
     
    Добавление в главное меню своего пункта, ассоциированного с макросом
    Создание ярлыка на рабочем столе
    Снятие защиты листа при забытом пароле
    Смена раскладки клавиатуры
    Скролл формы колесом прокрутки мыши
    Оптимизация кода по быстродействию использованием массивов
    Найти "чужое" окно и нажать в нем кнопку (вписать текст в текстовое поле)
    Работа с UNICODE-символами в VBA: запись, чтение из ячейки, перевод в ASС и обратно
    Как программно подключить дополнительные библиотеки (например, "Microsoft Scripting Runtime" или "Microsoft ActiveX Data Objects 2.8 Library) через References
     
    Перечень основных ColorIndex'ов из MSDN
     

    Смежные темы:
    Программы » Microsoft Office 2019 & 365 | 2016 | 2013 | 2010 | 2007 | 2003
    Программы » OneNote | Outlook 2013 & 2016 & 2019 | Outlook 2010 | Microsoft Mathematics & Math Solver
    Программы » Word FAQ | Excel FAQ | Access FAQ
    Прикладное программирование » Word VBA | Access VBA  
    Андеграунд » Microsoft Office 2019 | 2016 | 2013 | 2010 | 2007 | 2003
    Андеграунд » OneNote | Visio | SharePoint Server | Project Server | Exchange Server
    Андеграунд » Надстройки (add-ins) и коммерческие макросы Excel
    Андеграунд » Самостоятельная сборка дистрибутивов Оffice 2007/2010/2013/2016 | MUI для Office 2007

  • Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 10:16 11-01-2010 | Исправлено: ALeXkRU, 16:42 03-08-2021
    UserAtta

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте.
    Изучаю VBA. Новичок. Помогите решить проблему. Задача следующая.
    С одного рабочего листа(Расчётный_Итог) информация переносится на другой(Табель) с сохранением данных.
    Затем на первом листе информация стирается для внесения данных для другого клиента,
    а на втором листе (Табель) нужно, сохранив информацию об первом клиенте, перейти в следующий свободный столбец для заполнения данных для нового клиента. Использовал макросы для решения. Всё вроде получается, а как перейти в следующий свободный столбец не знаю. Конкретно информации по своему вопросу нигде не нашёл. Подскажите, как справиться с проблемой. Вот Макрос по переносу данных на лист Табель:
     
    Sub Проба2()
    '
    '
    '
        Range("D4").Select
        Selection.Copy
        Sheets("Табель").Select
        Range("B4").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Sheets("Расчётный_Итог").Select
        Range("D5").Select
        Application.CutCopyMode = False
        Selection.Copy
        Sheets("Табель").Select
        Range("B5").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Sheets("Расчётный_Итог").Select
        Range("E11:E205").Select
        Application.CutCopyMode = False
        Selection.Copy
        Sheets("Табель").Select
        Range("B6").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Sheets("Расчётный_Итог").Select
        Range("F206").Select
        Application.CutCopyMode = False
        Selection.Copy
        Sheets("Табель").Select
        Range("B202").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Sheets("Расчётный_Итог").Select
        Range("O206").Select
        Application.CutCopyMode = False
        Selection.Copy
        Sheets("Табель").Select
        Range("B203").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Sheets("Расчётный_Итог").Select
        ActiveWindow.SmallScroll Down:=-198
    End Sub
     
    Нужно, чтобы после заполнения курсор перешёл в следующий свободный столбец и процесс повторился. Заранее благодарен.

    Всего записей: 2 | Зарегистр. 23-01-2011 | Отправлено: 23:35 23-01-2011
    SAS888

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    UserAtta

    Цитата:
    Нужно, чтобы после заполнения курсор перешёл в следующий свободный столбец и процесс повторился.

    1. Активировать лист и ячейку для того, чтобы вставить значение вовсе не нужно.
    2. До каких пор повторять процесс копирования данных с одного листа на другой?
    3. Ваш макрос можно (нужно) существенно оптимизировать. Например, так:

    Код:
    Sub Проба2()
        Application.ScreenUpdating = False: Sheets("Расчётный_Итог").Activate
        With Sheets("Табель")
            .[B4] = [D4]: .[B5] = [D5]: .[B202] = [F206]: .[B203] = [O206]
            [E11:E205].Copy: .[B6].PasteSpecial Paste:=xlPasteValues
        End With
    End Sub

    Поясните условие п.№2 и только тогда мы сможем организовать требуемый цикл.

    Всего записей: 398 | Зарегистр. 31-10-2007 | Отправлено: 05:55 24-01-2011
    Kolonit

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    друзья, подскажите пожалуйста как внутри цикла и внутри оператора if если значение, попустим, истина оператор перехода автоматически переходил на следующую переменную цикла, в данном случае, на следующую i
     
    ну что-то типа такого, тока это не работает
     

    Код:
    Dim i As Integer
    For i = 15 To 7500
      If Not IsEmpty(Cells(i, 1)) Then goto next i
       Else: Cells(i, 1) = "yes"
      End If
    Next

     

    Всего записей: 5 | Зарегистр. 21-03-2008 | Отправлено: 18:27 27-01-2011
    Dmitriy05



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Kolonit
    А может упростить условие
    Если ячейка не пустая  - пишем yes
    Если пустая - ничего не делаем и переходим на следующий i:
     

    Код:
     Dim i As Integer  
    For i = 15 To 7500  
      If IsEmpty(Cells(i, 1)) Then
       Cells(i, 1) = "yes"
      End If
    Next
     

    Всего записей: 2514 | Зарегистр. 03-08-2005 | Отправлено: 19:50 27-01-2011
    Kolonit

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    А может упростить условие
    Если ячейка не пустая  - пишем yes
    Если пустая - ничего не делаем и переходим на следующий i:  

     
     
    я задал вопрос на примере сильно упрощенной задачи, в реальности все несколько сложнее, я просто хотел узнать как корректно задать безусловный переход внутри цикла и внутри if, чтобы перешлось на следующую i (на следующую переменную цикла)
     
    а ещё подскажите пожалуйста: допустим задано такое условие

    Цитата:
    If Cells(1, 1).Value Like "корень"  
    , т. е. если ячейка сдержит искомое слова, либо комбинацию символов то...
     
    А как задать подобным образом условие: "Если ячейка не содержит заданное слово либо комбинацию символов"?

    Всего записей: 5 | Зарегистр. 21-03-2008 | Отправлено: 20:55 27-01-2011
    LaCastet



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Kolonit

    Цитата:
    ну что-то типа такого, тока это не работает


    Код:
    Sub aaa()
    Dim i As Integer
    For i = 15 To 7500
      If Not IsEmpty(Cells(i, 1)) Then
        GoTo Lab1
      Else
        Cells(i, 1) = "yes"
      End If
    Lab1:
    Next
    End Sub


    ----------
    Пиво — это еще одно доказательство того, что Господь любит нас и хочет, чтоб мы были счастливы!

    Всего записей: 4560 | Зарегистр. 27-07-2005 | Отправлено: 21:20 27-01-2011
    SAS888

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Kolonit

    Цитата:
    А как задать подобным образом условие: "Если ячейка не содержит заданное слово либо комбинацию символов"?

    Вместо
    Код:
    If Cells(1, 1).Value Like "корень" Then...
    использовать
    Код:
    If Not Cells(1, 1).Value Like "корень" Then...

    Всего записей: 398 | Зарегистр. 31-10-2007 | Отправлено: 06:03 28-01-2011
    Kolonit

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Всем огромная благодарность спасибо за помощь

    Всего записей: 5 | Зарегистр. 21-03-2008 | Отправлено: 08:05 28-01-2011
    KolyaP

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    На листе "Лист1" есть 2 сгруппированных объекта OptionButton.
    Как програмно менять их значение (OptionButton.Value) из внешнего модуля? Т.е. не из модуля листа "Лист1".
    При просмотре коллекции Worksheets("Лист1").OLEObjects
     OptionButton отсутствует в списке членов коллекции.

    Всего записей: 43 | Зарегистр. 04-01-2009 | Отправлено: 20:24 28-01-2011
    VladimirKataliz

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    У меня куча гиперссылок в вложеной папке типа "записи\KS Nokia\2010\01\20100121-174124-973983535.amr"
    После неудачного сохранения стало "C:\Documents and Settings\Яциків\Application Data\Microsoft\Excel\записи\KS Nokia\2010\01\20100121-174124-973983535.amr"
     
    Подскажыте как можно во всех гиперссылках удалить "C:\Documents and Settings\Яциків\Application Data\Microsoft\Excel\"
     
    Буду рад, а то я макросы писал, а как читать и изменять гиперссылку не орентируюсь
    Заранее благодарен умному совету
    Такое вить может повторитса... а противодействия пока нету
     
     
    Добавлено:
    Вопрос не в имени гиперссылки, а в адресе
     
    Добавлено:
    Я могу написать макрос, если подскажыте как значению ячейки2 присвоить значение адреса гиперссылки ячийки1. Дальше найду позицыю "записи". Урежу значение ячейки 2. И дальше надо подсказку как значению гиперссылки ячейки1 присвоить урезаное значение, что будет находится в ячейке2.  
     
    Если это вариант?  
     
    HELP me PLEASURE...

    Всего записей: 3 | Зарегистр. 30-01-2011 | Отправлено: 02:38 30-01-2011 | Исправлено: VladimirKataliz, 23:56 30-01-2011
    ZlydenGL



    Moderator
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Есть, с гиперссылками надо работать через объект HyperLinks. Например, если нужно добавить гиперссылку, используешь конструкцию

    Код:
    HyperLinks.Add Cells(1,1), "здес_будет_адрес", "здесь_допадрес", "здесь поясняющий текст"

    Прочитать гиперссылку из ячейки можно так:

    Код:
    Cells(1,1).HyperLinks(1).Address

    А вообще в хелпере VBA по данному объекту много расписано, в том числе с примерами. Удачи!

    ----------
    Переработал: втыкая аккумулятор в шуруповерт пытаешься передёрнуть затвор

    Всего записей: 4264 | Зарегистр. 22-06-2002 | Отправлено: 16:42 30-01-2011
    UserAtta

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    [/q]
    [q]2. До каких пор повторять процесс копирования данных с одного листа на другой?  

    Здравствуйте.
    Выделенные ячейки в макросе переносятся на лист Табель для каждого клиента. Заходит клиент. Заполняется расчётный лист и данные с него считываются на лист Табель. Затем расчётный лист очищается и заполняется для следующего клиента. Может кнопки построить? И связать макрос заполнения и макрос очистки с кнопками?

    Всего записей: 2 | Зарегистр. 23-01-2011 | Отправлено: 20:17 30-01-2011
    VladimirKataliz

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здраствуйте ещё раз
    Вы мне помогли.
    Как редактировать гиперссылку я разобрался но столкнулся с проблемой
    когда в ячейке её нету выбивает ошыбку Run-time error"9": Subscript out of range
    Может поскажыте как проверять наличие гиперссылки, а то я по английски не спец и хелпером не понимаю

    Всего записей: 3 | Зарегистр. 30-01-2011 | Отправлено: 00:50 31-01-2011
    AndVGri

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    VladimirKataliz
    If Cells(1, 1).Hyperlinks.Count > 0 Then MsgBox Cells(1,1)..Hyperlinks(1).Address

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 08:35 31-01-2011
    VladimirKataliz

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Спасибо, ZlydenGL  AndVGri
    Работает
    Может комуто пригодитса
    изменить адреса гиперссылок после автосохранения и утери оригинал файла
    змінити адреси гіперссилок
     
    Sub hyperlink()
    Sheets("11").Select
        Dim I_0, K_n, J, IK, NKa As Integer
        Dim no, no1, Te As String
        I_0 = 1
        NKa = 6619    ' останній № по рядкам
        For IK = I_0 To NKa ' цикл по рядкам
        For J = 1 To 50 ' по стовбчикам
        If Cells(IK, J).Hyperlinks.Count > 0 Then 'проверять наличие гиперссылки
        no = Cells(IK, J).Hyperlinks(1).Address ' читаем
        Te = InStr(1, no, "записи", vbTextCompare)  'позиція в адресі папки "записи"
         K_n = Len(no)  ' довжина адреси
    Cells(IK, 63) = Right(no, K_n - Te + 1) ' обрізаєм адрес
          no1 = Cells(IK, 63) '
          Cells(IK, 63).Clear
          Cells(IK, J).Hyperlinks(1).Address = no1 ' присвоюєм обрізаний адрес
          Else: GoTo Line3579 ' якщо нема гіперссилки
          End If
    Line3579:
    Next J
    Next IK
    End Sub

    Всего записей: 3 | Зарегистр. 30-01-2011 | Отправлено: 11:51 31-01-2011
    sham1963

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Написал программу с заполнением огромной формы , имеющей поля ввода TextBox.
    Не могу, однако, в некоторые поля ввода ввести информацию правой кнопкой "мышки", используя Windows-ское контекстное меню (копировать-вставить).
    Помогите
    Спасибо

    Всего записей: 2 | Зарегистр. 05-02-2011 | Отправлено: 11:44 05-02-2011
    Kreol64

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Всем привет.
    С excel я работаю довольно часто, но макросами никогда не интересовался особо, ввиду ненадобности ... но вот вдруг приперло ... пробовал найти выход с помощью формул, но не вышло .... посему оказался здесь Итак проблема :
    В приаттаченном документе .xls нужно, чтобы в колонке "final calls" в колонке "level" писались уровни от большего к меньшему, которые находятся в колонке "level CALL", при условии, что общая сумма "Size" для этих уровней во всём документе была >=1, а соответственно в колонке "size" отражалась эта общая сумма (например level1,3798 - size500, level 1.3647 - size200 значит на уровне 1,3798 накопилось 500 size на протяжении всего документа, а на уровне 1.3647 накопилось 200 size.)  
    А в колонке "final puts" аналогично, но только для уровней, находящихся в "level PUTS".
    Ребят, с макросами у меня напряжёнка, поэтому буду очень благодарен, если поможете написать. Если что-то непонятно написал - спрашивайте. Заранее спасибо !
    Документ : http://zalil.ru/30455611

    Всего записей: 1 | Зарегистр. 05-02-2011 | Отправлено: 17:52 05-02-2011
    KolyaP

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Задача делать выборки из файла dbf. Нашёл в описании функцию SQLExecQuery. Пробую прокомпилиривоть приведённый в описании пример. Выдаётся ошибка Sub or Function not defined.
    Что делать?

    Всего записей: 43 | Зарегистр. 04-01-2009 | Отправлено: 18:26 07-02-2011
    AndVGri

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    KolyaP
    Подключи Xlodbc.xla add-in
    А лучше используй ADO, DAO, (как советует документация по функции SQLExecQuery )
    Можешь записать макрорекордером использование источника данных Microsoft Query или ему подобных с последующей редакцией под свои нужды.

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 02:57 08-02-2011
    Kiljes



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Помогите, пожалуйста.
    Нужно как то, чтобы находились одинаковые числовые значения (повторы) в столбце, допустим C.
    Например, вот допустим список на 900 чисел:
    4156420011223344
    4156420045454545
    4156420011223344 - чтобы этот повтор как-то отобразился.  
    Заранее спасибо за помощь

    Всего записей: 911 | Зарегистр. 09-12-2003 | Отправлено: 00:49 09-02-2011 | Исправлено: Kiljes, 01:11 09-02-2011
    Открыть новую тему     Написать ответ в эту тему

    Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213

    Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Excel VBA (часть 3)


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru