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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
    smirnvlad

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Flex_Dj
    В Excel 2010 и Excel 2007 размер листа составляет 16 384 столбца на 1 048 576 строк
    или через Access

    Всего записей: 417 | Зарегистр. 31-03-2009 | Отправлено: 13:46 24-10-2010
    yls

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    В ячейку вставлен элемент ActiveX "Поле со списком". Если скрыть столбец с этой ячейкой, а затем сохранить документ, то после его открытия и восстаносления видимости скрытого столбца   "Поле со списком" исчезает. Это происходит в Excel 2010. В версиях 2007 и более ранних такой проблемы не наблюдается - элементы ActiveX прекрасно сохраняются в скрытых столбцах. Как заставить Excel 2010 сохранять элементы ActiveX в скрытых столбцах?

    Всего записей: 18 | Зарегистр. 29-03-2007 | Отправлено: 16:53 24-10-2010
    DANYA198

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Доброго времени суток!
    Вопрос у меня следующий:  
     
    Есть столбец с ФИО. Некоторые из ФИО могут повторяться с некоторыми различиями: т.к. столбец делают несколько людей, то один человек может занести, например, "Андрияшкин О.А." а другой человек - "Андрияшкин О." Моя задача - найти такие различия, и исправить их, чтобы одинаковые ФИО совпадали. Т.е. в приведённом выше примере надо исправить с "Андрияшкин О." на "Андрияшкин О.А."
     
    Сейчас я сортирую список по алфавиту, и похожие ФИО выстраиваются рядом. Я пробегаюсь по списку глазками и правлю всё ручками. Как можно автоматизировать данный процесс? Хотя бы автоматически выявлять похожие ФИО? Пускай исправлять буду ручками.  
     
    На сайте planetaexcel.ru нашёл код функции (http://planetaexcel.ru/tip.php?aid=177), которая проделывает похожую операцию, но там проблема в том, что если искомое значение присутсутвует в области поиска, то функция его и выводит. Т.е. если есть точь-в-точь такие же ФИО, то эта функция отдаст приоритет этому слову, а не тому, что незначительно отличается.
     

    Всего записей: 21 | Зарегистр. 13-12-2006 | Отправлено: 21:09 24-10-2010
    Frantishek



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Парни, а можно такое под 2007 перевести -
     
    http://spreadsheetpage.com/index.php/tip/creating_custom_menus/
     
    Добавлено:
    И попутный вопрос, есть у кого нибудь развернутый реестр  FaceID чтобы сразу можно было увидеть все и отметить необходимое (приметить на будущее, классифицировать), т.е. как то обозначив словами, а еще лучше чтобы прямо в Эксель книге - индекс + иконка, а то так перебирать замучаешься.

    Всего записей: 1221 | Зарегистр. 02-05-2006 | Отправлено: 22:46 24-10-2010
    SAS888

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

    Цитата:
    ...есть у кого нибудь развернутый реестр  FaceID...

    Скопируйте следующий код в пустую книгу Excel и запустите макрос "ShFace".

    Код:
    Sub ShFace()
        Dim x As CommandBar, y As CommandBarButton, z As CommandBarComboBox, i As Integer
        On Error Resume Next: Application.CommandBars("FaceIds").Delete: On Error GoTo 0
        Set x = Application.CommandBars.Add(Name:="FaceIds", temporary:=True)
        x.Visible = True: ButtonGroup = 1
        For i = 1 To 200: Set y = x.Controls.Add(Type:=msoControlButton, ID:=2950): Next
        Set z = x.Controls.Add(Type:=msoControlDropdown)
        For i = 1 To 51: z.AddItem "Набор " & i: Next i
        z.ListIndex = ButtonGroup: z.Caption = "Button Set Number": z.OnAction = "NewBut"
        x.Width = 400: Call NewBut
    End Sub
    Private Sub NewBut()
        Dim i As Long, bgr As Long
        bgr = CommandBars("FaceIds").Controls("Button Set Number").ListIndex
        For i = 1 To 200
            With CommandBars("FaceIds").Controls(i)
                .FaceId = (bgr - 1) * 200 + i
                .Caption = "FaceID = " & (bgr - 1) * 200 + i
                .OnAction = "EmptySub"
            End With
        Next
    End Sub

     
    Добавлено:
    DANYA198
    А что делать, если есть 3 ячейки, которые, соответственно, содержат следующие значения:
    Андрияшкин О.
    Андрияшкин О.А.
    Андрияшкин О.Б.  
    Какой символ подставлять? И еще: приведите все возможные варианты записей: с точками, запятыми, пробелами и т.п.

    Всего записей: 398 | Зарегистр. 31-10-2007 | Отправлено: 07:17 25-10-2010
    Flex_Dj



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    smirnvlad
    Спасибо... но это не подойдет. Пользователи должны сами обновлять данные в базе и при том у них стоит excel 2003.
    У меня ни с чем не возникает проблем, кроме корректного чтения xml.
    Если есть что-нибудь о работе с DOM Document, плиз, выложите!

    Всего записей: 8 | Зарегистр. 24-01-2008 | Отправлено: 07:58 25-10-2010
    DANYA198

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SAS888
     
    Ничего не делать, т.к. "Андрияшкин О.?." может в равной степени оказаться любым из двух сотрудиков: с отчеством Б., или с отчеством А. В этом случае самое лучшее - поставить в соседнем со спорными ФИО столбце какой-нибудь знак, например, "1".  
     
    Возможные варианты записей:
     
    С пробелами:
    Пробел (или два, три) перед ФИО - "   Андрияшкин О.А."
    Пробел (два, три) после фамилии но перед Именем  - "Андрияшкин   О.А."
    Пробел (или два, три) после Имени но перед Отчеством - "Андрияшкин О.   А."
     
    Стандарт в пробелах, к котрому я привожу все ФИО, - один пробел, разделяющий Ф от ИО  - "Андрияшкин О.А."
     
    С точками:
     
    Точки могут отсутствовать - "Андрияшкин ОА"
    Точка может присутствовать только после Имени - "Андрияшкин О.А"
    Точка может присутствовать только после Отчества - "Андрияшкин ОА."
     
    Стадарт в точках - по одной после Ф и О - "Андрияшкин О.А."
     
    И, конечно, возможны опечатки: например, вместо "ш" могут вбить "щ", и т.п. Вот в случае опечаток - лучше, чтобы в соседнем столбце макрос ставил какой-нибудь знак, например, "1", т.к. это может быть не опечатка, а другая фамилия
     

    Всего записей: 21 | Зарегистр. 13-12-2006 | Отправлено: 09:07 25-10-2010
    Ogeris



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Вопрос: как нижеприведённый макрос изменить таким образом, что бы он "проходился" по зачениям не по столбцу вниз, а по строке вправо по столбцам?
     
    Макрос следующий:
     

    Цитата:
    Range("A1").Select
    lRow = ActiveCell.Row
    lCol = ActiveCell.Column
    For l1 = lRow + 1 To 1000
            If Cells(l1, lRow) = "" Then
            Cells(l1, lRow) = Cells(l1 - 1, lCol)
        End If
    Next l1
    End Sub

     
    Пытался заменить lRow на lCol, и строку "Cells(l1, lRow) = Cells(l1 - 1, lCol)" изменить на  "Cells(l1, lRow) = Cells(lRow, l1 - 1)", но получилась какая-то хрень ((((

    Всего записей: 19 | Зарегистр. 03-03-2006 | Отправлено: 09:49 25-10-2010 | Исправлено: Ogeris, 10:00 25-10-2010
    Flex_Dj



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Всё, вопрос снимается, нашел информацию.
    Вот, если кому-нибудь понадобится:
    http://www.microsoft.com/Rus/Msdn/Activ/MSVB/Archive/Mixture/XML/387.mspx

    Всего записей: 8 | Зарегистр. 24-01-2008 | Отправлено: 10:22 25-10-2010
    SAS888

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ogeris
    Судя по всему, Вам нужно следующее:

    Код:
    Dim i As Long, j As Long
    Application.ScreenUpdating = False: i = [A1].Row
    For j = [A1].Column + 1 To 256 ' До номера требуемого столбца
        If Cells(i, j) = "" Then Cells(i, j) = Cells(i, j - 1)
    Next

     
    Но Вашу задачу можно решить существенно проще: обойтись вообще без применения каких-либо циклов:

    Код:
    Dim x As Range
    Set x = Range([A1], Cells(1, Columns.Count).End(xlToLeft)).SpecialCells(xlCellTypeBlanks)
    x.FormulaR1C1 = "=RC[-1]": Rows(1).Value = Rows(1).Value

    Всего записей: 398 | Зарегистр. 31-10-2007 | Отправлено: 11:11 25-10-2010 | Исправлено: SAS888, 12:16 25-10-2010
    Ogeris



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SAS888
    СПАСИБО!
     
    Добавлено:
    Во время составления крупных отчётов во многих несущественных ячейках выскакивает ошибка #ЗНАЧ!. Всегда справлялся с этой проблемой след. образом: заменял формулы на значения, и заменял все "#ЗНАЧ!" на пустоту.  Решил автоматизировать сей процесс, но столкнулся с проблемой: записанный макрос почему-то не реагриует на "#ЗНАЧ!", хотя с легкостью заменяет, например, числа.  Возможно, проблема в символах # и !. Кто-нибудь знает, как можно это обойти?
     
    Код записанного макроса:

    Цитата:
        Cells.Replace What:="#ЗНАЧ!", Replacement:="", LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
            ReplaceFormat:=False


    Всего записей: 19 | Зарегистр. 03-03-2006 | Отправлено: 11:51 25-10-2010
    Drazhar

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ogeris
    Я решил через перебор ячеек и потом

    Код:
        If IsError(ActiveSheet.Cells(k, i).Value) Then
            ActiveSheet.Cells(k, i).Value = 0
        End If

    Всего записей: 88 | Зарегистр. 10-11-2009 | Отправлено: 12:59 25-10-2010 | Исправлено: Drazhar, 12:59 25-10-2010
    Ogeris



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    У меня сегодня день вопросов
     
    Как нижеприведённый макрос приспособить так, чтобы он выполнял свою работу не только по первому столбцу, но по любому, который я хочу указать?
     
    Код всё тот же:
     

    Цитата:
    Range("A1").Select  
    lRow = ActiveCell.Row  
    lCol = ActiveCell.Column  
    For l1 = lRow + 1 To 1000  
            If Cells(l1, lRow) = "" Then  
            Cells(l1, lRow) = Cells(l1 - 1, lCol)  
        End If  
    Next l1  
    End Sub  
     

     
    Даже когда я меняю наим. ячейки (что в первой строке), макрос всё равно вставляет данные в первый столбец.  

    Всего записей: 19 | Зарегистр. 03-03-2006 | Отправлено: 14:14 25-10-2010
    Lovec



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ogeris
    Зачем выделять ячейку, а потом получать ее строку и столбец? Если и так понятно что это строка 1 и столбец 1...
    Если вы хотите запускать цикл по произвольному столбцу, то оформите этот цикл в виде подпрограммы и передавайте ей параметры, например так

    Код:
    Sub xxx(lRow As Integer, lCol As Integer)

     
     
    All
    Надо запустить из VBA Internet Explorer и открыть в нем определенный URL.
    Раньше делал так

    Код:
     
    URL = www.ya.ru
    Set oIE = CreateObject("InternetExplorer.Application")
    oIE.Visible = True
    oIE.Navigate (URL)
     

     
    Это все работало на WinXP и IE6. Поставил IE7 (а до него ставил IE8) - в строке

    Код:
     
    Set oIE = CreateObject("InternetExplorer.Application")
     

    выдает ошибку создания объекта.
    Попробовал не через создание объекта, а через запуск напрямую исполняемого файла iexplorer.exe, типа того

    Код:
     
    Set WshShell = CreateObject("WScript.Shell")
    Set oExec = WshShell.Exec("C:\Program Files\Internet Explorer\iexplore.exe http://ya.ru")
    WshShell.Run "iexplore.exe www.ya.ru"
     

    Окно IE запускается и успешно зависает...
    Как бы лучше решить эту задачу?...

    Всего записей: 1028 | Зарегистр. 29-10-2002 | Отправлено: 15:53 25-10-2010
    Drazhar

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Lovec
    Не подскажу, но у меня(WinXP+IE7)  пашет

    Всего записей: 88 | Зарегистр. 10-11-2009 | Отправлено: 16:20 25-10-2010
    SAS888

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Можно использовать WinAPI:

    Код:
    Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, _
    ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
     
    Sub OpenWebPage()
        URL = "http://www.yandex.ru"
        ShellExecute 0&, vbNullString, URL, vbNullString, vbNullString, vbNormalFocus
    End Sub

    Более того, с поьщью данного кода можно не только открыть web-страницу, но и запустить файл, ассоциированный с приложением. Так, если указать

    Код:
    URL = "D:\Temp\LM2574.pdf"

    то откроется этот pdf-документ. Также, можно отправить почту:

    Код:
    URL = "mailto:SAS888@Mail.ru"
    и т.п.

    Всего записей: 398 | Зарегистр. 31-10-2007 | Отправлено: 16:32 25-10-2010
    Ogeris



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

    Цитата:
    Зачем выделять ячейку, а потом получать ее строку и столбец? Если и так понятно что это строка 1 и столбец 1...  
    Если вы хотите запускать цикл по произвольному столбцу, то оформите этот цикл в виде подпрограммы и передавайте ей параметры "Sub xxx(lRow As Integer, lCol As Integer)"  
     

    донт андерстенд. Можно чуть-чуть подробнее?

    Всего записей: 19 | Зарегистр. 03-03-2006 | Отправлено: 06:11 26-10-2010 | Исправлено: Ogeris, 07:08 26-10-2010
    SAS888

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

    Цитата:
    Даже когда я меняю наим. ячейки (что в первой строке), макрос всё равно вставляет данные в первый столбец.  

    1. В VBA синтаксис такой: Cells(x, y), где x - номер строки, y - номер столбца. У Вас же в коде все перепутано. Объясните, что Вы хотите? перебрать все строки от указанной ячейки до строки 1000 в этом столбце? Или перебрать все столбцы от указанной ячейки до столбца 1000 (???) в этой строке?
    2. Если эта процедура встречается неоднократно, тогда есть смысл сделать ее подпрограммой. А если нет, то лучше этого не делать. Пример:

    Код:
    Sub ОсновнаяПрограмма()
        Подпрограмма [D10]
    End Sub
     
    Sub Подпрограмма(cell As Range)
        Dim i As Long, j As Long
        Application.ScreenUpdating = False: j = cell.Column
        For i = cell.Row + 1 To 1000
            If Cells(i, j) = "" Then Cells(i, j) = Cells(i - 1, j)
        Next
    End Sub

    Т.е. из основной программы вызываем подпрограмму, в качестве аргумента которой передаем параметр, являющийся ячейкой. В примере это "D10".
    3. Чем Вас не устраивает предложенный вариант без каких либо циклов?

    Всего записей: 398 | Зарегистр. 31-10-2007 | Отправлено: 08:58 26-10-2010
    Ogeris



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SAS888
    Большое спасибо за подробное объяснение!

    Цитата:
    Объясните, что Вы хотите? перебрать все строки от указанной ячейки до строки 1000 в этом столбце?
    Да

    Цитата:
    Или перебрать все столбцы от указанной ячейки до столбца 1000 (???) в этой строке?  
     
    И это тоже, для формирования отчёта на одном этапе времени надо пройтись по столбцам, на другом - пройтись по строкам.

    Цитата:
    3. Чем Вас не устраивает предложенный вариант без каких либо циклов?

    Полностью устраивает, его я взял на вооружение на этапе со столбцами. Но вот на этапе со строками у меня возникли проблемы, т.к. 1) иногда бывает так, что в 1 строке нужного столбца нет данных. В этом случае во всём столбце "проставляется" #ССЫЛКА!
    2) макрос останавливается на последнем встретившемся числе, надо же, что бы он дошёл до конца (т.е. протянул значение последнего встретевшегося числа до конца указанного диапазона, или вообще до конца таблицы экселя - не имеет значения).
     
     

    Всего записей: 19 | Зарегистр. 03-03-2006 | Отправлено: 10:13 26-10-2010 | Исправлено: Ogeris, 10:15 26-10-2010
    SAS888

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    DANYA198
    Предлагаю такой вариант.
    Макрос пронормирует все записи в столбце "A" и добавит недостающие инициалы в том сдучае, если найдется такая же фамилия с полными инициалами. В столбце "B", напротив исправленной ячейки будет выведено исходное значение исправленной записи. Это и будет меткой для визуального контроля.
     
    Добавлено:
    Ogeris
    Предлагаю такой вариант: Пишем подпрограмму, в которую передаем 3 параметра:
    1 - Начальная ячейка
    2 - Конечная строка (столбец)
    3 - Идентификатор заполнения. Если "Строка" - то по строке. Если "Столбец" - то по столбцу.
    Подпрограмма не использует циклов. Посмотрите пример.:

    Код:
    Sub Пример1()
        Подпрограмма [D10], 1000, "Строка"
    End Sub
     
    Sub Пример2()
        Подпрограмма [D10], 100, "Столбец"
    End Sub
     
    Sub Подпрограмма(Ячейка As Range, Предел As Long, Идентификатор As String)
        Dim x As Range, y As Range, i As Long, j As Long: Application.ScreenUpdating = False
        i = Ячейка.Row: j = Ячейка.Column: On Error Resume Next
        Select Case Идентификатор
        Case "Строка"
            Set x = Range(Ячейка.Offset(, 1), Cells(i, Предел)): Set y = x.SpecialCells(xlCellTypeBlanks)
            y.FormulaR1C1 = "=RC[-1]": x.Value = x.Value
        Case "Столбец"
            Set x = Range(Ячейка.Offset(1), Cells(Предел, j)): Set y = x.SpecialCells(xlCellTypeBlanks)
            y.FormulaR1C1 = "=R[-1]C": x.Value = x.Value
        End Select
    End Sub
     

    По-моему, все очевидно. Запустив макрос "Пример1", будет осуществлено заполнение от указанной ячейки до указанного предела по строке. Соответственно для "Пример2" - по столбцу.
    По хорошему, нужно добавить проверку: не превышает ли позиция начальной ячейки (номер строки или номер столбца) указанного предела для заполнения.
    On Error Resume Next - это на случай, если в указанном диапазоне не нашлось ни одной пустой ячейки.

    Всего записей: 398 | Зарегистр. 31-10-2007 | Отправлено: 06:58 27-10-2010
    Открыть новую тему     Написать ответ в эту тему

    Страницы: 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