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

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



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    kii
    через ODBC можно настроить соединение к почти любой БД

    Всего записей: 576 | Зарегистр. 17-01-2003 | Отправлено: 10:26 09-06-2017
    DenSyo

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    есть пара вопросов по ADODB
     
    при работе с ms-sql через ADODB наличие в запросе бач разделителя "GO" лишь в редких случаях не приводит к ошибке выполнения, отрабатываются только очень простые запросы без логики. в подавляющем большинстве случаев имеем ошибку: Неправильный синтаксис около конструкции "GO". судя по тому, что такие запросы без проблем отрабатываются на самом сервере проблема в парсинге на стороне драйвера. есть возможность отключить проверку синтаксиса запроса у объекта ADODB? сделал самостоятельное разбиение запроса на несколько в случае наличия разделителя, но может есть более прозрачные варианты?
     
    после вызова объекта ADODB.Stream в модуле рушатся значения глобальных переменных, при этом переменные объявленные внутри вызывающей стрим процедуры сохраняют свои значения. более того, при дебаге значения глобальных переменных так же сохраняются, рушатся только непосредственно при работе. мистика. приходится сохранять значения глобальных переменных внутри процедуры и потом восстанавливать их. какие могут быть причины такого поведения переменных? (excel 2010x32, на остальных еще не проверял)

    Всего записей: 218 | Зарегистр. 19-01-2008 | Отправлено: 05:07 23-06-2017
    LaCastet



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Помогите разобраться:
    в ячейке формула =инвойс!$B$4
    Проверяю наличие формулы Excel.Cells(НомСтроки, РазукомСсылка).HasFormula. Результат Ложь.
    В чем может быть проблема?

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

    Всего записей: 4566 | Зарегистр. 27-07-2005 | Отправлено: 18:29 26-06-2017
    DenSyo

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

    Цитата:
    в ячейке формула =инвойс!$B$4  
    Проверяю наличие формулы Excel.Cells(НомСтроки, РазукомСсылка).HasFormula. Результат Ложь.  
    В чем может быть проблема?

     
    как вариант объект Excel ссылается не на тот лист от которого вы ждете ответа. для теста создайте такую функцию:

    Цитата:
    Function hasformulas(rng As Range) As Boolean
        If rng.HasFormula Then hasformulas = True Else hasformulas = False
    End Function

    и на листе с ячейкой содержащей формулу введите в любую ячейку =hasformulas(B4), где B4 замените на адрес интересующей вас ячейки.
     
    и на крайний случай вариант проверки наличия формулы по косвенным признакам:

    Цитата:
    Function hasformulas(rng As Range) As Boolean
        If Left(rng.Formula, 1) = "=" And rng.PrefixCharacter = "" And Len(rng.Formula) > 1 Then hasformulas = True Else hasformulas = False
    End Function

    Всего записей: 218 | Зарегистр. 19-01-2008 | Отправлено: 07:31 27-06-2017 | Исправлено: DenSyo, 07:53 27-06-2017
    LaCastet



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

    Цитата:
    как вариант объект Excel ссылается не на тот лист от которого вы ждете ответа.

    Нет, здесь всё верно.
    Мне присылали файл для отладки, и на нём всё работало.
    А на рабочем всё то же самое, не срабатывает. Я подставил костыли: проверяю левый символ на "=". Всё работает.
    Хочу понять причину.
    Заменял на Excel.Cells(НомСтроки, РазукомСсылка).Range("A1").HasFormula, не помогло.

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

    Всего записей: 4566 | Зарегистр. 27-07-2005 | Отправлено: 11:04 27-06-2017
    DenSyo

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    LaCastet
     
    я бы все-таки посоветовал не использовать глобальный объект Excel, а определять объекты листов руками. так надежнее.

    Цитата:
    Dim wsMySheet As Excel.Worksheet
    Set wsMySheet = ThisWorkbook.Sheets("MySheet") 'имя либо номер листа в этой книге
    If wsMySheet.Range("A1").HasFormula Then ....
    If wsMySheet.Cells(row, col).HasFormula Then ....  

     
    посмотреть что происходит можно дебагом. поставьте точка останова где-нибудь в вашей процедуре, запустите макрос и добавьте на просмотр Excel.Cells(НомСтроки, РазукомСсылка)

    Всего записей: 218 | Зарегистр. 19-01-2008 | Отправлено: 11:43 27-06-2017
    LaCastet



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

    Цитата:
    посмотреть что происходит можно дебагом. поставьте точка останова где-нибудь в вашей процедуре, запустите макрос и добавьте на просмотр Excel.Cells(НомСтроки, РазукомСсылка)

    Это загрузка в 1С из Excel. Я на этой команде и смотрю. Результат False. Возможно, это косяк самого Excel.

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

    Всего записей: 4566 | Зарегистр. 27-07-2005 | Отправлено: 12:22 27-06-2017
    DenSyo

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    LaCastet
    для этой загрузки в 1С используется и вызывается какая-либо библиотека или все делается средствами экселя? на знак = делаете проверку свойства Formula или Value? добавьте в проверку на знак = проверку PrefixCharacter = "". это принципиально, префикс не содержится ни в значении, ни в формуле. его наличие говорит, что это не формула. сделайте проверку hasformula проблемной ячейки в самом начале процедуры до вызова основного алгоритма.

    Всего записей: 218 | Зарегистр. 19-01-2008 | Отправлено: 13:07 27-06-2017
    LaCastet



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    DenSyo
        //Создаём COM-объект
        Excel = Новый COMОбъект("Excel.Application");
     
        //Открываем файл
        Попытка
            Excel.WorkBooks.Open(ВыбФайл);
            Состояние("Обработка файла: " + ВыбФайл);
        Исключение
            Сообщение = Новый СообщениеПользователю;
            Сообщение.Текст = "Ошибка при открытии файла с помощью Excel! Загрузка не будет произведена!";
            Сообщение.Сообщить();
            
            Сообщение.Текст = ОписаниеОшибки();
            Сообщение.Сообщить();
        КонецПопытки;
     
        //Переходим на нужный лист
        Попытка
            Excel.Sheets(ФайлЛист).Select();
        Исключение
            Excel.ActiveWorkBook.Close();
            Excel = 0;
            Сообщение = Новый СообщениеПользователю;
            Сообщение.Текст = "Файл " + Строка(ВыбФайл) + " не соответствует необходимому формату! Загрузка произведена не будет!";
            Сообщение.Сообщить();
        КонецПопытки;
     
     
                //Проверяем наличие формулы в ячейке
                Если Excel.Cells(НомСтроки, РазукомСсылка).HasFormula Или Лев(Excel.Cells(НомСтроки, РазукомСсылка).Value, 1) = "=" Тогда
     
     


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

    Всего записей: 4566 | Зарегистр. 27-07-2005 | Отправлено: 13:27 27-06-2017
    DenSyo

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

    Цитата:
    Лев(Excel.Cells(НомСтроки, РазукомСсылка).Value, 1) = "="

    если ячейка содержит формулу, то свойство Value возвращает результат этой формулы, либо сообщение об ошибке. если как в вашем случае Value начинается со знака равенства, то это не формула, это значение выглядящее как формула. если в самом экселе импортируемый файл содержит в этой ячейке адекватный результат формулы, то проблема на стороне 1С

    Всего записей: 218 | Зарегистр. 19-01-2008 | Отправлено: 14:10 27-06-2017
    LaCastet



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    DenSyo
    Вот значения при остановке:
    Excel.Cells(НомСтроки, РазукомСсылка)    COMОбъект    COMОбъект
    AddIndent                        Ложь            Булево
    Address                        "$B$2"        Строка
    AddressLocal                    "$B$2"        Строка
    AllowEdit                        Истина        Булево
    Application                        COMОбъект    COMОбъект
    Areas                            COMОбъект    COMОбъект
    Borders                        COMОбъект    COMОбъект
    Cells                            COMОбъект    COMОбъект
    Characters                        COMОбъект    COMОбъект
    Column                        2            Число
    ColumnWidth                    27,86        Число
    Columns                        COMОбъект    COMОбъект
    Comment                                    Неопределено
    Count                        1            Число
    CountLarge                        1            Число
    Creator                        1 480 803 660    Число
    CurrentArray    Произошла исключительная ситуация (Microsoft Excel): Не найдено ни одной ячейки, удовлетворяющей указанным условиям.    
    CurrentRegion                    COMОбъект    COMОбъект
    Dependents    Произошла исключительная ситуация (Microsoft Excel): Не найдено ни одной ячейки, удовлетворяющей указанным условиям.    
    DirectDependents    Произошла исключительная ситуация (Microsoft Excel): Не найдено ни одной ячейки, удовлетворяющей указанным условиям.    
    DirectPrecedents    Произошла исключительная ситуация (Microsoft Excel): Не найдено ни одной ячейки, удовлетворяющей указанным условиям.    
    DisplayFormat                    COMОбъект    COMОбъект
    End                            Неверное число параметров    
    EntireColumn                    COMОбъект    COMОбъект
    EntireRow                        COMОбъект    COMОбъект
    Errors                        COMОбъект    COMОбъект
    Font                            COMОбъект    COMОбъект
    FormatConditions                    COMОбъект    COMОбъект
    Formula                        "=инвойс!$B$4"    Строка
    FormulaArray                    "=инвойс!$B$4"    Строка
    FormulaHidden                    Ложь            Булево
    FormulaLocal                    "=инвойс!$B$4"    Строка
    FormulaR1C1                    "=инвойс!$B$4"    Строка
    FormulaR1C1Local                "=инвойс!$B$4"    Строка
    HasArray                        Ложь            Булево
    HasFormula                    Ложь            Булево
    Height                        15            Число
    Hidden    Произошла исключительная ситуация (Microsoft Excel): Невозможно получить свойство Hidden класса Range    
    HorizontalAlignment                -4 131        Число
    Hyperlinks                        COMОбъект    COMОбъект
    ID                            ""            Строка
    IndentLevel                        0            Число
    Interior                        COMОбъект    COMОбъект
    Item                            Неверное число параметров    
    Left                            72            Число
    ListHeaderRows                    0            Число
    ListObject                                    Неопределено
    LocationInTable    Произошла исключительная ситуация (Microsoft Excel): Невозможно получить свойство LocationInTable класса Range    
    Locked                        Истина        Булево
    MDX                            ""            Строка
    MergeArea                        COMОбъект    COMОбъект
    MergeCells                        Ложь            Булево
    Name    Произошла исключительная ситуация (0x800a03ec)    
    Next                            COMОбъект    COMОбъект
    NumberFormat                    "@"            Строка
    NumberFormatLocal                "@"            Строка
    Offset                        COMОбъект    COMОбъект
    Orientation                        -4 128        Число
    OutlineLevel    Произошла исключительная ситуация (Microsoft Excel): Невозможно получить свойство OutlineLevel класса Range    
    PageBreak    Произошла исключительная ситуация (Microsoft Excel): Невозможно получить свойство PageBreak класса Range    
    Parent                        COMОбъект    COMОбъект
    Phonetic                        COMОбъект    COMОбъект
    Phonetics                                    Неопределено
    PivotCell    Произошла исключительная ситуация (0x800a03ec)    
    PivotField    Произошла исключительная ситуация (Microsoft Excel): Невозможно получить свойство PivotField класса Range    
    PivotItem    Произошла исключительная ситуация (Microsoft Excel): Невозможно получить свойство PivotItem класса Range    
    PivotTable    Произошла исключительная ситуация (Microsoft Excel): Невозможно получить свойство PivotTable класса Range    
    Precedents    Произошла исключительная ситуация (Microsoft Excel): Не найдено ни одной ячейки, удовлетворяющей указанным условиям.    
    PrefixCharacter                    ""            Строка
    Previous                        COMОбъект    COMОбъект
    QueryTable    Произошла исключительная ситуация (0x800a03ec)    
    Range                                    Неверное число параметров    
    ReadingOrder                    -5 002        Число
    Resize                        COMОбъект    COMОбъект
    Row                            2            Число
    RowHeight                        15            Число
    Rows                            COMОбъект    COMОбъект
    ServerActions    Произошла исключительная ситуация (0x800a03ec)    
    ShowDetail    Произошла исключительная ситуация (Microsoft Excel): Невозможно получить свойство ShowDetail класса Range    
    ShrinkToFit                        Ложь            Булево
    SoundNote                        COMОбъект    COMОбъект
    SparklineGroups                    COMОбъект    COMОбъект
    Style                            COMОбъект    COMОбъект
    Summary    Произошла исключительная ситуация (Microsoft Excel): Невозможно получить свойство Summary класса Range    
    Text                            "=инвойс!$B$4"    Строка
    Top                            15            Число
    UseStandardHeight                Истина        Булево
    UseStandardWidth                Ложь            Булево
    Validation                        COMОбъект    COMОбъект
    Value                            "=инвойс!$B$4"    Строка
    Value2                        "=инвойс!$B$4"    Строка
    VerticalAlignment                    -4 108        Число
    Width                        150            Число
    Worksheet                        COMОбъект    COMОбъект
    WrapText                        Истина        Булево
    XPath                            COMОбъект    COMОбъект
    _Default                        "=инвойс!$B$4"    Строка
    _NewEnum                        COMОбъект    COMОбъект

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

    Всего записей: 4566 | Зарегистр. 27-07-2005 | Отправлено: 14:39 27-06-2017
    DenSyo

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    LaCastet
    формула не воспринимается как формула СОМ-объектом в 1С. почему не могу сказать. может не нравится ссылка на другой лист. есть на еще формулы на импортируемом листе и в частности содержащие ссылки на другие листы? создайте на листе несколько формул, без ссылок, со ссылками на этом же листе, и со ссылками на другой лист. и еще можно попробовать открыть книгу в эксель, зайти в эту проблемную ячейку и выполнить ее формулу получив результат. после этого сохранить книгу. эксель хранит в файлах как формулу, так и последнее значение этой формулы. но если СОМ-объект пытается пересчитать формулы, то это скорее всего не поможет.

    Всего записей: 218 | Зарегистр. 19-01-2008 | Отправлено: 15:41 27-06-2017
    LaCastet



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

    Цитата:
    формула не воспринимается как формула СОМ-объектом в 1С. почему не могу сказать. может не нравится ссылка на другой лист.

    В файле, который мне давали для отладки обработки, формула (со ссылками на другой лист) нормально определялась. А в том, с которым они сейчас стали работать, формула не определятся. Это особенность именно этого файла. У нас с клиентом разные платформы, а результат одинаковый. Пришлось костыли подставлять. Формулы вводятся вручную: добавляется пустая колонка и в неё вводятся ссылки на ячейки из другого листа (знак = , переход на другой лист, выбор ячейки, Enter).

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

    Всего записей: 4566 | Зарегистр. 27-07-2005 | Отправлено: 16:31 27-06-2017
    DenSyo

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    LaCastet
    попробуйте вызвать пересчет формул после открытия СОМ-объекта экселя
    Excel.Sheets(ФайлЛист).EnableCalculation = True
    Excel.Calculation = xlCalculationAutomatic
    еще можно попробовать  
    Excel.Cells(НомСтроки, РазукомСсылка).Formula = Excel.Cells(НомСтроки, РазукомСсылка).Formula

    Всего записей: 218 | Зарегистр. 19-01-2008 | Отправлено: 03:12 28-06-2017
    LaCastet



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    DenSyo
    Я думаю, это файл, который создаёт какая-то самодельная программа. Возможно она не всё прописывает в заголовок файла, что должно быть в файле, сформированном в Excel. Попробую сначала сохранить файл в Excel, если не поможет, копировать данные в файл созданный в Excel.
     
    Добавлено:
    DenSyo
    Установил в ячейках с формулами формат Общий (был Текстовый, если его не изменить ничего не получится), открыл ячейку на Редактирование F2, сохранил Enter. После этих действий формулы в ячейках стали определяться через HasFormula.

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

    Всего записей: 4566 | Зарегистр. 27-07-2005 | Отправлено: 11:26 28-06-2017
    vworld



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    требуется совет
    файл excel
    есть строка (вернее множество строк)
    в ней две ячейки
    в одной ФИО специалиста
    в другой код ошибки
    обе ячейки - текстовый формат
    мне надо соотнести ФИО к коду ошибки и все строки, которые попали под это условие выбросить в отдельный файл  
    в поиск даже сформулировать не могу запрос какие тут могут задействованы манипуляции

    Всего записей: 2617 | Зарегистр. 13-02-2003 | Отправлено: 14:02 31-08-2017 | Исправлено: vworld, 14:09 31-08-2017
    Maximus777

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

    Цитата:
    в поиск даже сформулировать не могу запрос какие тут могут задействованы манипуляции

    Как говорится, правильно сформулированный вопрос уже содержит в себе ответ. Что значит "соотнести ФИО к коду ошибки"? Таблица содержит список людей и у каждого прописана какая-то ошибка? То есть, как я понимаю, надо список отсортировать по ФИО и разложить по отдельным файлам? Текстовым или таблицам?

    Всего записей: 674 | Зарегистр. 27-07-2007 | Отправлено: 14:59 31-08-2017
    vworld



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

    Цитата:
    Что значит "соотнести ФИО к коду ошибки"? Таблица содержит список людей и у каждого прописана какая-то ошибка? То есть, как я понимаю, надо список отсортировать по ФИО и разложить по отдельным файлам? Текстовым или таблицам?

    Вы верно поняли
    таблица имеет вид
    ФИО|Услуга|Дата|Ошибка|
    Вот примерно из такой структуры, требуется по содержимому двух ячеек - ФИО, Ошибка выбрать строку и разложить в отдельный файл или лист
    P.S. пока я склепал примерно вот такой скрипт - с удалением пустых строк (вернее если в ячейке Столбца "Ошибка" пусто) и сортировкой по значению в столбце "Ошибка"

    Код:
     
    Sub del()
     
        Columns("Y:Y").Select
        ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("Y1"), _
            SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        With ActiveWorkbook.Worksheets("Sheet1").Sort
            .SetRange Range("Y2:Y4751")
            .Header = xlNo
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
     
    Dim ws As Worksheet
     
    'ws будет активным листом
    Set ws = ActiveSheet
     
    'цикл i от 5000 до 1
    For i = 5000 To 1 step -1
        'если значение в ячейке в строке i столбца 25 = пустая строка, то
        If ws.Cells(i, 25) = "" Then
            'всю строку ячейки в строке i столбца 25 удалить
            ws.Cells(i, 25).EntireRow.Delete
        End If
     
    Next i
    End Sub

    Всего записей: 2617 | Зарегистр. 13-02-2003 | Отправлено: 07:38 01-09-2017 | Исправлено: vworld, 07:38 01-09-2017
    alone_mech

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

    Всего записей: 1 | Зарегистр. 26-09-2017 | Отправлено: 15:32 26-09-2017 | Исправлено: alone_mech, 08:28 27-09-2017
    Leojse

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Добрый вечер, уважаемые форумчане!
    Подскажите, пожалуйста, как можно в VBA сделать следующее.
    Есть таблица (в ней 4 столбца A, B, C, D), которую мне нужно скопировать в другую книгу.
    Данные начинаются со 2 строки. Мне нужно скопировать строки, начиная со второй, но без последней (последняя - итоги таблицы). Количество строк всегда меняется. Буду рад любой подсказке!

    Всего записей: 107 | Зарегистр. 05-11-2009 | Отправлено: 23:01 29-09-2017
    Открыть новую тему     Написать ответ в эту тему

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