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

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

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

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
    shune4ka

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    andrewkard1980
    Спасибо.
    Видимо я не совсем верно объяснила проблему.
    В книге есть 4 скрытых листа с формами для печати. И текст из столбца F вставляется в определенное место в них.
    Т.е. на листе Таблица, мне не нужно ничего менять, а вот когда из этого столбца информация попадает в форму для печати, как раз и нужно менять размер шрифта, чтобы поле было занято как можно лучше.
     
    Еще раз спасибо и сорри за неверное толкование задачи)

    Всего записей: 10 | Зарегистр. 14-01-2008 | Отправлено: 11:50 03-08-2013
    andrewkard1980

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

    Код:
    Sub ChangeFontSize()
        Dim l&, s&
     
        For s = 1 To ThisWorkbook.Sheets.Count
            Select Case ThisWorkbook.Worksheets(s).Name
            Case "new_45"
                With ThisWorkbook.Worksheets("new_45")
                    Select Case Len(.Cells(5, 4))
                    Case Is < 26
                        .Cells(5, 4).Font.Size = 6
                    Case 26 To 30
                        .Cells(5, 4).Font.Size = 5
                    Case Else
                        .Cells(5, 4).Font.Size = 4
                    End Select
                End With
            Case "45x45"
                With ThisWorkbook.Worksheets("45x45")
                    Select Case Len(.Cells(4, 4))
                    Case Is < 26
                        .Cells(4, 4).Font.Size = 6
                    Case 26 To 30
                        .Cells(4, 4).Font.Size = 5
                    Case Else
                        .Cells(4, 4).Font.Size = 4
                    End Select
                End With
            Case "size_45"
                With ThisWorkbook.Worksheets("size_45")
                    Select Case Len(.Cells(4, 4))
                    Case Is < 26
                        .Cells(4, 4).Font.Size = 6
                    Case 26 To 30
                        .Cells(4, 4).Font.Size = 5
                    Case Else
                        .Cells(4, 4).Font.Size = 4
                    End Select
                End With
            Case "50x80"
                With ThisWorkbook.Worksheets("50x80")
                    Select Case Len(.Cells(4, 4))
                    Case Is < 26
                        .Cells(4, 4).Font.Size = 6
                    Case 26 To 30
                        .Cells(4, 4).Font.Size = 5
                    Case Else
                        .Cells(4, 4).Font.Size = 4
                    End Select
                End With
            End Select
        Next
     
    End Sub
     

    Проект тут:
     
    http://rghost.ru/47892803
     
    Если опять что то не то - пишите - будем исправлять.

    Всего записей: 209 | Зарегистр. 01-05-2010 | Отправлено: 21:30 04-08-2013
    andrewkard1980

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

    Всего записей: 209 | Зарегистр. 01-05-2010 | Отправлено: 16:38 05-08-2013
    shune4ka

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    andrewkard1980
     
    все получилось)) Огромное спасибо.

    Всего записей: 10 | Зарегистр. 14-01-2008 | Отправлено: 11:38 06-08-2013
    Zhiv4ik

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

    Всего записей: 6 | Зарегистр. 06-08-2013 | Отправлено: 22:30 06-08-2013
    andrewkard1980

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

    Код:
     
    Sub test()
        Dim s1$, s2$
        Dim oCBrd As DataObject
     
        Set oCBrd = New DataObject
        Cells(1, 1).Copy
        oCBrd.GetFromClipboard
        s1 = Cells(2, 1).Value
        s2 = oCBrd.GetText
        Cells(2, 1).Value = s1 & s2
        Set oCBrd = Nothing
    End Sub
     
     

    Всего записей: 209 | Зарегистр. 01-05-2010 | Отправлено: 23:03 06-08-2013
    Zhiv4ik

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    andrewkard1980
    а как тут задать адрес ячейки???
     
    Добавлено:
    andrewkard1980
    не работает!!!!....
    а имеет значение как я єту команду запускаю!!
    в моем случаи все это вшито в кнопку!)))

    Всего записей: 6 | Зарегистр. 06-08-2013 | Отправлено: 23:52 06-08-2013
    andrewkard1980

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Zhiv4ik
    Добавьте в проект UserForm. Почему не работает, что именно не работает? Я проверял - все отлично пашет.
    Cells(1, 1).Copy  ' Это адрес первой ячейки, данные которой мы копируем в буфер;
    s1 = Cells(2, 1).Value ' Значение второй ячейки записываем в переменную
    Cells(2, 1).Value = s1 & s2 ' Записываем значения обоих в ячейку Cells(2, 1)
     
    "Cells(6,1) returns cell A6 on Sheet1." - это и есть адреса, Вам нужно подставить свои ячейки

    Всего записей: 209 | Зарегистр. 01-05-2010 | Отправлено: 08:23 07-08-2013
    Zhiv4ik

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    andrewkard1980
    если у меня нет второй ячейки.... информация береться из-вне (допустим с интернета как текст или числовые значения)!!! мне нужно к тому тексту что есть в яцейки, допустим Cells(3,2), дописать другой текст в туже яцейку!!!!
     
    Добавлено:
    andrewkard1980
    у меня получается что копируется один и тот же текст!
     
    Добавлено:
    andrewkard1980
    все.... получилось!!!
    спасибо))
    немного по другому прописал правда!! НО РАБОТАЕТ!

    Всего записей: 6 | Зарегистр. 06-08-2013 | Отправлено: 18:47 07-08-2013
    Leojse

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Добрый день. Помогите, пожалуйста, со следующим вопросом.
    Есть два столбца. Необходимо скрыть строки, содержащие ноль в парных ячейках (т.е. если в А1 и В1 есть нули, то строку нужно скрыть, если в А1 стоит ноль, а В1 ячейка пуста, то строку скрывать не нужно). Причем ноль может быть результатом формулы, либо вбит вручную. Хотелось бы, чтобы не было привязки к определенным столбцам, т.е. выделить 2 произвольных столбца и запустить макрос.
     
    Добавлено:
    Прикладываю файл  
    http://rghost.ru/48026141

    Всего записей: 107 | Зарегистр. 05-11-2009 | Отправлено: 12:36 10-08-2013
    vikkiv



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Leojse
    Код:
    Sub hidezeroes()
    a = Selection.Rows.Count
    b = Selection.Columns.Count
    If b = 2 Then
    For i = 1 To a
    If Len(Selection.Cells(i, 1)) > 0 And Selection.Cells(i, 1) = 0 And Len(Selection.Cells(i, 2)) > 0 And Selection.Cells(i, 2) = 0 Then
    Selection.Cells(i, 1).EntireRow.Hidden = True
    End If
    Next i
    Else: MsgBox "Select 2 columns"
    End If
    End Sub

    Всего записей: 748 | Зарегистр. 10-11-2005 | Отправлено: 16:34 10-08-2013 | Исправлено: vikkiv, 16:39 10-08-2013
    Leojse

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    vikkiv
    Спасибо БОЛЬШОЕ! Очень выручили!

    Всего записей: 107 | Зарегистр. 05-11-2009 | Отправлено: 16:41 10-08-2013
    Zhiv4ik

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Помогите с таким интересным вопросом!
    Есть экселевский файл делающий определенные вычисления. Мне нужно что бы конце, возможно с помощью кнопки, создавался текстовый документ в той же директории где находиться сам файл в который буду заносить основные значения! лучший вариант в виде таблицы такой формы:  
    текст текст текст текст    
    ## ## ######## ########

    и что бы каждый раз значения вносимые значения дополняли эту таблицу а не создавали ее заного

    Всего записей: 6 | Зарегистр. 06-08-2013 | Отправлено: 12:29 17-08-2013 | Исправлено: Zhiv4ik, 12:40 17-08-2013
    SFC



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Добрый день всем.
    Стоит задача удалить все строки сгруппированные в уровень 2

    Код:
    Sub DELETE_2_LEVEL()
    Application.ScreenUpdating = False
    With ActiveSheet
    For i = .Cells(.Rows.Count, 1).End(xlUp).Row To 1 Step -1
    If .Rows(i).OutlineLevel = 2 Then .Rows(i).Delete
    Next
    End With
    End Sub

    Вот этот код с задачей справляется частично,
    т.е. корректно работает только со строками = удаляет строки, в которых ячейка самого первого столбца не пустая.
    Например, если строка вложенная в уровень 2, но в столбце A пустое значение, то она будет проигнорирована
     
    Вопрос снят
     
    Макрос удаляет в выделенном блоке строки, которые сгруппированы в уровень 2.

    Код:
     
    Sub DeleteRowsLevel2()
    Dim i As Long
        With Application
            .Calculation = xlCalculationManual
            .ScreenUpdating = False
        For i = Selection.Rows.Count To 1 Step -1
            If Selection.Rows(i).OutlineLevel = 2 Then
                Selection.Rows(i).EntireRow.Delete
            End If
        Next i
            .Calculation = xlCalculationAutomatic
            .ScreenUpdating = True
        End With
    End Sub


    ----------
    [ offline ]

    Всего записей: 1669 | Зарегистр. 21-01-2003 | Отправлено: 12:54 17-08-2013 | Исправлено: SFC, 19:50 17-08-2013
    karlss0n



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

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

     

    Цитата:
     
        Dim rs
        Dim delta
         
        delta = 0
        With Selection
            For i = 1 To .Rows.Count
                rs = 0
                For y = 1 To .Columns.Count
                    rs = rs + .Columns(y).Rows(i - delta)
                Next y
                If rs = 0 Then
                    .Rows(i - delta).Delete
                    delta = delta + 1
                End If
            Next i
        End With
     

    Всего записей: 136 | Зарегистр. 12-07-2004 | Отправлено: 15:19 18-08-2013
    rbrd78

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Добрый день.
     
    Подскажите пожалуйста, как сохранять и просматривать debug информацию в VBA?

    Всего записей: 3 | Зарегистр. 15-08-2013 | Отправлено: 15:39 18-08-2013
    karlss0n



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

    Цитата:
    Помогите с таким интересным вопросом!
    Есть экселевский файл делающий определенные вычисления. Мне нужно что бы конце, возможно с помощью кнопки, создавался текстовый документ в той же директории где находиться сам файл в который буду заносить основные значения! лучший вариант в виде таблицы такой формы:  
    текст     текст     текст     текст    
    ##     ##     ########     ########
     
    и что бы каждый раз значения вносимые значения дополняли эту таблицу а не создавали ее заного

     

    Цитата:
     
        Filename = ThisWorkbook.FullName & ".txt"
         
        Const DELIMITER As String = "|"
        Dim myRecord As Range
        Dim myField As Range
        Dim sOut As String
         
        Open Filename For Append As #1
        For Each myRecord In Range("A1:A" & _
            Range("A" & Rows.Count).End(xlUp).Row)
            With myRecord
                For Each myField In Range(.Cells, _
                    Cells(.Row, Columns.Count).End(xlToLeft))
                     
                    sOut = sOut & DELIMITER & myField.Text
                Next myField
                Print #1, Mid(sOut, 1) & "|"
                sOut = Empty
            End With
        Next myRecord
        Close #1
     

    Всего записей: 136 | Зарегистр. 12-07-2004 | Отправлено: 15:40 18-08-2013
    Zhiv4ik

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    karlss0n черт...... не могу до конца понять что тут что!?)))
    можешь объяснить, плиззззз!

    Всего записей: 6 | Зарегистр. 06-08-2013 | Отправлено: 18:21 18-08-2013
    karlss0n



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

    Цитата:
    karlss0n черт...... не могу до конца понять что тут что!?)))
    можешь объяснить, плиззззз!

     
    Получаем полное имя книги (с путём) и добавляем к названию .txt
        Filename = ThisWorkbook.FullName & ".txt"
     
    определяем разделитель      
        Const DELIMITER As String = "|"
    определяем переменные
        Dim myRecord As Range
        Dim myField As Range
        Dim sOut As String
     
    открываем файл для записи в конец (append)      
        Open Filename For Append As #1
    для каждой строчки на листе...
        For Each myRecord In Range("A1:A" & _
            Range("A" & Rows.Count).End(xlUp).Row)
            With myRecord
    для каждой ячейки в строке...
                For Each myField In Range(.Cells, _
                    Cells(.Row, Columns.Count).End(xlToLeft))
                     генерируем строку "РАЗДЕЛИТЕЛЬ Значение ячейки"
                    sOut = sOut & DELIMITER & myField.Text
                Next myField
    Пишем результат в файл
                Print #1, Mid(sOut, 1) & "|"
    обнуляем строку (т.к. ряд закончили)
                sOut = Empty
            End With
        Next myRecord
    закрываем файл
        Close #1

    Всего записей: 136 | Зарегистр. 12-07-2004 | Отправлено: 20:22 18-08-2013
    Zhiv4ik

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    karlss0n это создается файл с именем книги, но мне этого не надо!!
     
     
    Добавлено:
    karlss0n + шапка таблицы нужно прописать в коде, это определитель к значения которые будут записываться

    Всего записей: 6 | Зарегистр. 06-08-2013 | Отправлено: 20:33 18-08-2013
    Открыть новую тему     Написать ответ в эту тему

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

    Компьютерный форум 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