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

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

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

ShIvADeSt (11-01-2010 10:17): http://forum.ru-board.com/topic.cgi?forum=33&topic=10903  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

ShIvADeSt



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

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

 
Обратите внимание, этот топик для помощи в изучении и использовании VBA. Посему запросы типа "Напишите мне такой-то макрос, я VBA не знаю и знать не хочу" не приветствуются.
Древняя мудрость: "Накорми голодного рыбой и он погибнет, научи его ловить рыбу и ты спасешь его."(R)
 
Предыдущие ветки топика: Часть 1
 
Информация общего характера:
  • Список соответствия имен функций в английской и русской версиях 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

  • Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 01:58 23-04-2007 | Исправлено: JekG, 22:32 10-01-2010
    invisible17



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    to Olive77
     
    Спасибо, именно то, что нужно!
     
    Application.Calculation применяю, но хочется ещё хоть немного быстрее... вот и решил ещё и демонстрацию отключить.
     
    Добавлено:
    Ещё один вопрос:
     
    Я программно открываю файл Excel с Access, обращаюсь к конкретному листу, потом закрываю файл и приложение Excel, но при этом в диспетчере задач в процессах Excel остается. Где ошибка?
     
                    Dim fwb As Workbook
                    Dim wb As Workbook
                    Dim sh As Worksheet
     
                    Set fwb = Excel.Application.Workbooks.Open("C:\Analis\Reports\Current\oBalance_m_OF.xls")
                    Set wb = ActiveWorkbook
                    Set sh = wb.Worksheets(CStr("ОФ"))
                    sh.Activate
                     
                    fwb.Close False
                    Excel.Application.Quit
                    Set fwb = Nothing
                    Set wb = Nothing
                    Set sh = Nothing
     
    При этом, если я "убиваю" Excel в процессах вручную, то при запуске макроса появляется ошибка 462: the remote server machinedoes not exist or is unavaliable.
    После остановки макроса и повторного запуска данной ошибки нету.
     
    Может я как-то неправильно открываю (закрываю)?

    Всего записей: 3 | Зарегистр. 28-09-2007 | Отправлено: 12:20 28-09-2007
    CEMEH



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Каким образом реализовать задачу:
     
    Есть много файлов Excel (имена разные)
    Имя листа в файле совпадает с именем файла.
    Таблицы файлов одинаковые по формату но значения в них разные.
     
    Как получить лист с суммированием значений всех файлов?
     
    Знаю, что можно использовать функцию =СУММ(), где в качестве аргументов использовать ссылку на книгу_лист_ячейку, а потом потянуть за правый нижний угол. Но все осложняется тем, что файлов много очень, а формула может быть только 1024 знака.
    Желательно, если в макросе не придется прописывать имена файлов (все они лежат в одной папке)

    Всего записей: 237 | Зарегистр. 17-09-2006 | Отправлено: 00:28 30-09-2007
    SERGE_BLIZNUK

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

    Цитата:
    Как получить лист с суммированием значений всех файлов

    значений, наверное, всё таки ячеек? А каких именно? Я предполагаю, что в конце таблицы есть ряд сумм ("Итого:") - вот эти суммы по всем файлам и надо сложить?
    Или вообще ВСЕ значения по строкам и столбцам ?
     

    Цитата:
    осложняется тем, что файлов много очень

    Время работы будет очень большим. Основные затраты пойдут на - открытие/закрытие всёх файлов. Бывает, что один файл (правда большой) Excel почти полминуты открывает... ;-((

    Всего записей: 2014 | Зарегистр. 12-09-2002 | Отправлено: 07:05 30-09-2007
    CEMEH



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SERGE_BLIZNUK
    Не все так просто
    столбец А:А  даты возрастание
    строка А1:1 параметры
     
    В итоге надо получить сводную таблицу, в которой В3=сумма всех ячеек В3 всех файлов в папке
    Аналогично А4, А5 и так далее.
     
    Время работы не играет роли (у меня были макросы, которые работали по 12 часов на хорошей машине. Надеюсь 100 файлов он обработает за меньшее время)

    Всего записей: 237 | Зарегистр. 17-09-2006 | Отправлено: 14:38 30-09-2007
    Troitsky



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

    Цитата:
    Я программно открываю файл Excel с Access, обращаюсь к конкретному листу, потом закрываю файл и приложение Excel, но при этом в диспетчере задач в процессах Excel остается.

    Лучше сначала присвоить переменной ссылку на объект Excel.Application, и только затем пользовать его методы. По окончании освободить ссылки обычным образом:

    Код:
    Set objExcel = CreateObject("Excel.Application")
    Set objWorkbook = objExcel.Workbooks.Open("c:\temp.xls")
    ' <...>
    objWorkbook.Close SaveChanges:=False
    Set objWorkbook = Nothing
    Set objExcel = Nothing
     

    и в твоем коде, наверное, объект лишний есть - объект fwb дублируется объектом wb.

    Всего записей: 795 | Зарегистр. 13-12-2003 | Отправлено: 20:17 30-09-2007
    ProgrBoris2007

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    PavelO
    впринципе без разницы как они выбираются. можно и случайно. Главное чтоб никого не обидеть
    Эти льготники получат бесплатное стоматологическое лечение.
    У каждого льготника присутствует  уникальный паспортный номер и номер страхового полиса.
     
    Добавлено:
    PavelO
    при проверке достаточно ли фамилий на буквы, у меня находит на буквы Щ, Э -мало фамилий. Можно сделать чтоб он брал тех что есть, а остальное из других букв.

    Всего записей: 4 | Зарегистр. 27-09-2007 | Отправлено: 04:55 01-10-2007
    KChernov



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Понадобилось мне несколько документов с примечаниями перевести в текстовый формат.
    При простом сохранении в формат с разделителями примечания не сохраняются.
    Решил добавить их отдельным столбцом, но столкнулся с проблемой переноса примечаний в значения ячеек (вариант специальной вставки примечаний не помог).
    Попробовал написать скрипт на VBA, но попытка записать макрос проблему не решила - универсального варианта копирования комментария в значение ячейки там не оказалось.
    Помощь тоже до конца проблему не решила.
    То есть я понял, как:
    1. Получить значение примечания;
    2. Удалить примечание;
    3. Вставить из буфера.
     
    А вот поместить значение в нужную ячейку/буфер так и не получилось
     
    Вот такой код не работает:

    Код:
    Sub Макрос1()
        Selection.Text = Selection.Comment.Text
    '    Selection.ClearComments
    End Sub

     
    Нашел пример с помещением в буфер обмена, но ругается на как на неопределенный пользовательский тип (на самую первую строчку):

    Код:
    Dim MyData As DataObject
    Sub Макрос1()
        Set MyData = New DataObject
        MyData.SetText Selection.Comment.Text
        MyData.PutInClipboard
        ActiveSheet.Paste
    '    Selection.ClearComments
    End Sub

    Что не так?
    Вроде с программированием особых проблем нет, но как только приходится что-то делать в VBA, сразу возникает куча проблем

    Всего записей: 2471 | Зарегистр. 20-04-2004 | Отправлено: 14:56 01-10-2007
    kutso

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Помогите доделать задачу
     
    Есть в экселе общий список пользователей.
    Выделяю строчку с конкретным пользователем наживаю на кнопку и создается файл с данными этой строки.
     
    У меня 2 проблемы.
    1. Постоянно ругается .ActiveDocument.SaveAs Filename:=strOutFileName Причем я удаляла файлы из папки, все равно на этой строке дает ошибку.
    2. Как из макроса Экселя создать таблицу в ворде. Хотелось бы выводить часть информации не по строчно, а в таблице.
    Ниже приведен код.
     
     
    Private Sub CommandButton1_Click()
       Dim intReportCount As Integer  ' Количество сообщений
       Dim strForWho As String        ' Получатель сообщения
       Dim strSum As String           ' Рабочее место
       Dim strProduct As String       ' Отдел
       Dim strOutFileName As String   ' Имя файла для сохранения сообщения
       Dim strMessage As String       ' Текст дополнительного сообщения
       Dim rgData As Range            ' Обрабатываемые ячейки
       Dim rngCell As Range
       Dim objWord As Object
       Dim i As Integer
       
     
       ' Создание объекта Word
       Set objWord = CreateObject("Word.Application")
       
       ' Информация с рабочего листа
       
      ' rngCell = Application.ActiveCell
       Dim cur_range As Range
        With ActiveSheet
            Set cur_range = Selection
            cur_range.Activate
        End With
     
       Set rgData = cur_range
       'strMessage = Range("AC" & l)
     
       ' Просмотр записей на листе Лист1
       intReportCount = Application.CountA(Range("A:A"))
       For i = 1 To intReportCount
          ' Динамические сообщения в строке состояния
          Application.StatusBar = "Создание сообщения " & i
     
          ' Назначение данных переменным
          strForWho = rgData.Cells(i, 1).Value
          strProduct = rgData.Cells(i, 2).Value
          strSum = rgData.Cells(i, 3).Value
    'ThisWorkbook.Path & "\" & strForWho &
          ' Имя файла для сохранения отчета
          strOutFileName = ThisWorkbook.Path & "\" & strForWho & ".doc"
          ' Передача команд в Word
          With objWord
             .Documents.Add
             With .Selection
                ' Заголовок сообщения
                .Font.Size = 14
                .Font.Bold = True
                .ParagraphFormat.Alignment = 1
                .TypeText Text:="Инвентаризационная карточка пользователя"
                .TypeParagraph
                .TypeParagraph
                .Font.Size = 14
                .Font.Bold = False
                .ParagraphFormat.Alignment = 0
                .TypeText Text:="ФИО" & vbTab & strForWho
                ' Отправитель
                .TypeParagraph
                .TypeParagraph
                .TypeText Text:="Рабочее место" & vbTab & strProduct
                ' Сообщение
                 
                '.TypeText strMessage
     
                .TypeParagraph
                .TypeParagraph
                ' Название подразделения
                .TypeText Text:="Подразделение" & vbTab & strSum
                .TypeParagraph
                .TypeParagraph
                .Font.Size = 14
                .Font.Bold = True
                .ParagraphFormat.Alignment = 1
                .TypeText Text:="Технические характеристики ПК"
                 
                 
                .TypeParagraph
                .TypeParagraph
                .Font.Size = 14
                .Font.Bold = True
                .ParagraphFormat.Alignment = 1
                .TypeText Text:="Программное обеспечение ПК"
                 
                 
                 
                 'Format(strSum, "$#,##0")
             End With
             ' Сохранение документа
             
             .ActiveDocument.SaveAs Filename:=strOutFileName
          End With
       Next i
     
       ' Удаление объекта Word
       objWord.Quit
       Set objWord = Nothing
     
       ' Обновление строки состояния
       Application.StatusBar = False
       ' Вывод на экран информационного сообщения
       MsgBox intReportCount & " заметки создано и сохранено в папке " _
        & ThisWorkbook.Path
    End Sub
     

    Всего записей: 9 | Зарегистр. 19-09-2007 | Отправлено: 15:03 01-10-2007
    ol7ca

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

    Цитата:
    Как можно cкопировать множественный диапазон в него же (я хочу скопировать формулы и вставить значения)?

     

    Цитата:
    Так кто мешает?  
    pUnion.Copy  
    pUnion.PasteSpecial ...  

     
    у меня почему-то выдает ошибку-(
    вот мой скрипт:
     
    Sheets("1").Select
        Dim pUnion As Range
        Set pUnion = Application.Union(Range("C1:C4"), Range("B3:B8"), Range("A9,A7"))
        pUnion.Copy
        pUnion.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False

    Всего записей: 125 | Зарегистр. 01-02-2007 | Отправлено: 22:34 01-10-2007
    ferias



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Всем привет!  
    Помогите пожалуйста решить задачу. Мне нужно использовать в VBA функции аналогичны функциям Exel "Найти","ДЛСТР","ЗАМЕНИТЬ","СЖПРОБЕЛЫ","ЗНАЧЕН". Если можна так выразится, перевести их на язык VBA.

    Всего записей: 39 | Зарегистр. 28-06-2007 | Отправлено: 23:24 01-10-2007
    SERGE_BLIZNUK

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    KChernov
    Цитата:
     вот поместить значение в нужную ячейку/буфер так и не получилось  

    работает код:
      Selection.Value = Selection.Comment.Text
     


     
    ferias

    Цитата:
    Мне нужно использовать в VBA функции аналогичны функциям Exel "Найти","ДЛСТР","ЗАМЕНИТЬ","СЖПРОБЕЛЫ","ЗНАЧЕН".  

    Application.WorksheetFunction.<нужная функция>
     
    например, для "СЖПРОБЕЛЫ"
       Dim Res As String
       Res = Application.WorksheetFunction.Trim(" пример    вот   такой  ")
       MsgBox ">" & Res & "<"
     
    соответствие русских<->английских названий формул смотри шапку или файлик  
      "C:\Program Files\Microsoft Office\OFFICE11\1049\funcs.xls"
     
    и ещё, рекомендую ознакомится со стайкой (малюсенькой) Calling Worksheet Functions In VBA
     
     
    Добавлено:
     
    KChernov
    да, забыл сказать - проверяется, есть ли примечание - вот так:
      If Cells(iRow, ColSource).Comment Is Nothing Then
        ' ну нет тут примечания
        MsgBox "Not found comments!"
     else
       ....
     
    и ещё. несколько страниц назад я писал код по обработке ячеек с примечаниями...
    можете полистать-почитать... ;-)))
     

    Всего записей: 2014 | Зарегистр. 12-09-2002 | Отправлено: 01:51 02-10-2007
    ol7ca

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Какая используется команда для открытия файла эксель?
    Workbooks.OpenText Filename:="H:\File.xls"
            Sheets("list").Select
    ???

    Всего записей: 125 | Зарегистр. 01-02-2007 | Отправлено: 02:07 02-10-2007
    SERGE_BLIZNUK

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ol7ca
    может я неправильно понял вопрос...  
    а разве так не получается ?
       Workbooks.Open Filename:="H:\File.xls"  
     
     

    Всего записей: 2014 | Зарегистр. 12-09-2002 | Отправлено: 02:32 02-10-2007
    AndVGri

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ol7ca
    Похоже придётся делать циклом. Не хочет Excel копировать не равные диапазоны

    Код:
     
     Sheets("1").Select
        Dim pUnion As Range, pCell As Range
        Set pUnion = Application.Union(Range("C1:C4"), Range("B3:B8"), Range("A9,A7"))
        For Each pCell In pUnion
            pCell.Value = pCell.Value
    'или, для копирования формул
            'pCell.Copy
            'pCell.PasteSpecial ....
        Next pCell
     

    Хотя тогда теряется смысл в создании объединения
     
    CEMEH
    Сделай сканирование всех файлов  

    Код:
     
    Dim pFile As Scripting.File
    Dim fso As New Scripting.FileSystemObject
    Dim sumB3 As Double
     
    For Each pFile In fso.GetFolder("drive:\path").Files
        If LCase$(fso.GetExtensionName(pFile.Path)) = "xls" Then
            sumB3 = sumB3 + Application.ExecuteExcel4Macro("'" & pFile.ParentFolder.Path & "\" & _
                          "[" & pFile.Name & "]Лист1'!R3C2")
            'Ну и также для остальных
            '...
        End If
    Next pFile
    Activesheet.Cells(3&, 2&).Value = sumB3
    '...
     

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 05:27 02-10-2007 | Исправлено: AndVGri, 05:37 02-10-2007
    PavelO

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ProgrBoris2007
    Вот код, который копирует фамилии. Разбирайтесь на здоровье. Так как я ограничен по времени, то код несколько убогий, но в целом функционирует:
    Private Sub CommandButton1_Click()
    Dim FFArr(), KolFFArr(), KolLast(), rowNum(), rowNum2()
     
    Kol_vo = 101 'кол-во, которое нужно вывести
    KolFF = 0
    ReDim Preserve FFArr(0)
    ReDim Preserve KolFFArr(0)
    ReDim Preserve KolLast(0)
    ReDim Preserve rowNum(33, 0)
    y = 0
     
    For i = 1 To UsedRange.Rows.Count
    nachalo:
        Set proverka = Sheets("Лист2").Columns("a:a").Find(Cells(i, 1)) 'проверяем не встречается ли эта фамилия на Листе2 в столбце a
        If Not proverka Is Nothing Then 'если фамилия встречается - проверяем другие столбцы
            If Sheets("Лист2").Cells(proverka.Row, 2) = Cells(i, 2) And Sheets("Лист2").Cells(proverka.Row, 3) = Cells(i, 3) Then
                If i = UsedRange.Rows.Count Then
                    Exit Sub
                End If
                i = i + 1
                GoTo nachalo 'выходим из цикла
            End If
        End If
        ZapFF = True 'запись первой буквы фамилии разрешена
    'Пробегаем по всем записанным буквам
            For cFF = LBound(FFArr) To UBound(FFArr)
    'cells(i,1) - i -строка, 1-столбец с фамилией
                If FFArr(cFF) = Left(Cells(i, 1), 1) Then
                    ZapFF = False 'если первая буква уже встречалась, то запись запрещена
                    KolFFArr(cFF) = KolFFArr(cFF) + 1 'и прибавляем 1
                        If maxKol < KolFFArr(cFF) Then
                            ReDim Preserve rowNum(33, KolFFArr(cFF))
                        End If
                        rowNum(cFF, KolFFArr(cFF)) = i
                        If maxKol < KolFFArr(cFF) Then maxKol = KolFFArr(cFF)
                End If
            Next
            If ZapFF = True Then
                KolFF = KolFF + 1
                rowNum(KolFF - 1, 0) = i
                ReDim Preserve FFArr(KolFF - 1) 'меняем размерность
                FFArr(KolFF - 1) = Left(Cells(i, 1), 1) 'записываем первую букву
                ReDim Preserve KolFFArr(cFF)
                KolFFArr(cFF) = 1 'Кол-во данных букв = 1
            End If
    Next
     
    i = 0
    ReDim Preserve KolLast(UBound(FFArr))
    For cFF = LBound(FFArr) To UBound(FFArr)
        KolLast(cFF) = Int(Kol_vo / KolFF)
    Next
    For cFF = LBound(FFArr) To UBound(FFArr)
    line2:  If i > UBound(FFArr) Then
                i = 0
            End If
     
         
        If Kol_vo / KolFF <> Round(Kol_vo / KolFF, 0) And KolFFArr(cFF) > Round(Kol_vo / KolFF, 0) Then
            If KolFFArr(i) > Round(Kol_vo / KolFF, 0) Then
                KolLast(i) = KolLast(i) + 1
                Kol_vo = Kol_vo - 1
            End If
            i = i + 1
            GoTo line2:
        ElseIf KolFFArr(cFF) < Round(Kol_vo / KolFF, 0) Then
            KolLast(cFF) = Round(Kol_vo / KolFF, 0)
            Do While KolFFArr(cFF) <> KolLast(cFF)
                KolLast(cFF) = KolLast(cFF) - 1
    line:       If i > UBound(FFArr) Then
                    i = 0
                End If
                If KolLast(i) < KolFFArr(i) Then
                    KolLast(i) = KolLast(i) + 1
                    i = i + 1
                Else
                    i = i + 1
                    GoTo line
                End If
            Loop
        End If
    Next
    If Sheets("Лист2").Cells(1, 1) <> "" Then
        Z = Sheets("Лист2").Cells(1, 1)
    Else
        Z = 2
    End If
    For i = LBound(KolFFArr) To UBound(KolFFArr)
        r = 1
        For y = 0 To KolFFArr(i)
            If rowNum(i, y) <> Empty Then
                If r > KolLast(i) Then
                    Exit For
                End If
                Sheets("Лист2").Cells(1, 1) = Z - 1
                Sheets("Лист2").Cells(Z, 1) = Cells(rowNum(i, y), 1)
                Sheets("Лист2").Cells(Z, 2) = Cells(rowNum(i, y), 2)
                Z = Z + 1 ' строка на Листе2, в которую будем записывать
                r = r + 1 'счетчик кол-ва записей на каждую букву
            End If
        Next
     
    Next
    End Sub

    Всего записей: 27 | Зарегистр. 19-09-2006 | Отправлено: 11:17 02-10-2007
    KChernov



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SERGE_BLIZNUK
    Спасибо, все получилось
    Код тоже нашел - посмотрю.
     
    Еще такой вопрос (хотя не уверен, что он именно по VBA, но в интерфейсе такого не нашел, поэтому вероятно, что это решается только макросом):
    При вставке кусков текста, превышающих размер ячейки, ячейка автоматически меняет размер (вместе со строкой и столбцом)
    Причем в том же Ворде в очередь отмены кладется отдельно произведение изменений и отдельно автоэффект (то есть автомат всегда можно отменить, оставив ввод данных).
     
    Так вот, можно ли сделать, что либо просто размер ячейки после такой вставки не менялся, либо хотя бы чтобы изменение размера можно было отменить и как?

    Всего записей: 2471 | Зарегистр. 20-04-2004 | Отправлено: 14:27 02-10-2007
    ol7ca

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SERGE_BLIZNUK
     
    Спасибо, все открылось
     
    Добавлено:
    AndVGri
     
    Спасибо, я попробую

    Всего записей: 125 | Зарегистр. 01-02-2007 | Отправлено: 17:07 02-10-2007
    lex79



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    all
    Подскажите, как, решить.
    Есть столбец с датами - Срок годности. К ячейкам столбца применяется условное форматирование - используется функция СЕГОДНЯ(), со значением которой сравнивается значение ячейки, и в зависимости от результата сравнения ячейки окрашиваются в разный цвет. Столбец заполняется регулярно, а функция СЕГОДНЯ() не обновляется постоянно - т.е.  ячейки сохраняют тот цвет, который был у них на момент ввода. Если по ячейке кликнуть два раза, то функция пересчитается, учитывая новое значение СЕГОДНЯ(), и красится в нужный цвет. Как сделать, чтобы ячейки пересчитывались автоматически, т.е. сравнивались с СЕГОДНЯ() каждый раз, когда открывается книга?
    Может, подскажите код макроса, который бы брал значение ячеек из столбца, сравнивал его с СЕГОДНЯ() и вставлял обратно.
     

    Всего записей: 85 | Зарегистр. 31-10-2005 | Отправлено: 13:54 03-10-2007
    ol7ca

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите, плз, как можно:
    -открыть файл
    -при открытии мои файлы спрашивают "обновить?" - сделать отбой на обновления
    -распечатать отчет из книги 1 (параметры печати уже настроены)
    -распечатать отчет из книги 2
    -закрыть файл без сохранения
    -открыть следующий файл
    ...
     
    спасибо

    Всего записей: 125 | Зарегистр. 01-02-2007 | Отправлено: 17:15 03-10-2007
    ferias



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SERGE_BLIZNUK
    Спасибо за помощь.

    Всего записей: 39 | Зарегистр. 28-06-2007 | Отправлено: 19:58 03-10-2007
       

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

    Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Excel VBA (часть 2)
    ShIvADeSt (11-01-2010 10:17): http://forum.ru-board.com/topic.cgi?forum=33&topic=10903


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru