Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 18 След.
Что за массив возвращает функция CtrConv
 
Доброго здоровья!
Функция имеет следующий синтаксис: StrConv(String,Conversion,[LocaleID])
Аргумент Conversion может принимать 8 констант, задающих тип преобразования строки. 3 из них нам наверно не нужны (vbWide, vbNarrow, vbHiragana). Еще 3(vbUpperCase, vbLowerCase, vbProperCase) мы редко используем т.к. есть другие функции (UCase, LCase). А вот что возвращает функция с константами vbUnicode vbFromUnicode мне хочется понять. Что возвращает функция с константой vbFromUnicode вроде разобрался. А вот что получается с константой vbUnicode вообще непонятно.
Код
Sub DDDfgg()
Dim str1$, XX() As Byte
    str1 = "Яна" & ChrW(700)
XX = StrConv(str1, vbUnicode)
    For i = LBound(XX) To UBound(XX)
        Debug.Print XX(i)
    Next
End Sub
С помощью этой процедуры мы получаем массив. На каждый символ строки str1 получаем 4 элемента массива XX. Предполагаю, что в этих 4 элементах зашифрован код символа Unicode, но как получить этот код символа из этих 4 элементов не пойму. Который день не могу ничего найти в интернете. В справке по функциям VBA тоже нет ответа. Вопрос наверно простой, но я никак не могу разобраться, что в этих 4 элементах массива зашифровано. Помогите пожалуйста разобраться. (Очень буду признателен, если подробно разъяснят, что получается при использовании констант vbUnicode vbFromUnicode)
Парсинг .txt: в таблицу из множества файлов получить последнюю строку.
 
Filkri Если  кодировка UTF-8 попробуйте перед строкой Close #1 добавить строку. Правда не самое хорошее решение, но можно попробовать.
Код
Arr1(i, 1) = CreateObject("OlePrn.OleCvt.1").ToUnicode(Arr1(i, 1), 65001)
Парсинг .txt: в таблицу из множества файлов получить последнюю строку.
 
Написал как понял. Нужна только последняя непустая строка текстовых файлов.
Книга с макросом в той же папке, где текстовые файлы с расширением txt. Выгрузка на активный лист в 1 столбец.
Код
Sub enstaral11()
Dim File, Data$, Data1$, Put1$, Arr1, i&, Tp1
File = "*.txt": Put1 = ThisWorkbook.Path & "\": Data1 = "=FILES(""" & Put1 & File & """)"
Ima1 = "ZZZZ": ThisWorkbook.Names.Add Ima1, Data1, True
Tp1 = Evaluate(Ima1): ThisWorkbook.Names(Ima1).Delete
ReDim Arr1(1 To UBound(Tp1), 1 To 1)
For Each File In Tp1
Open Put1 & File For Input As #1: i = i + 1
    Do While Not EOF(1)
        Data1 = Space(Len(Data))
        Data1 = Data: Line Input #1, Data
    Loop
If Data = "" Then Arr1(i, 1) = Data1 Else Arr1(i, 1) = Data
Close #1
Next
Range("A1").Resize(UBound(Arr1)) = Arr1
End Sub
Работа с текстовыми файлами в режиме прямого доступа, Функции ввода-вывода низкого уровня
 
sokol92 Спасибо за ответ. Да я путаюсь  пока в терминах. Вернее было говорить не о языке VBScript, а о изучении Объектов WSH. В первой вашей ссылке действительно есть некоторые ответы, значит  плохо умею искать в интернете. Согласен для VBA режим Random не актуален, можно не забивать им голову.  Вашу тему по второй ссылке, я даже у себя на компе сохранил, но видимо первый раз не совсем внимательно прочитал. Перечитал еще раз.

Благодарю еще раз за ответы sokol92 и  bedvit. Вопросов стало меньше.
Удаление дублей строки по совпадению столбцов
 
Татьяна Красивая задачу объяснили хорошо, только пожалели свое время, чтобы на 2 листе составить строк 20-30  таких данных для проверки работы макроса. Не знаю захочет кто-то это делать сам. У вас наверно две разные версии Excel установлены. Написали Excel 2003 а файл в новом формате. Решение предложенное выше возможно не подойдет для Excel 2003.
Разбить таблицу на блоки, по 6 строк.
 
velmak Не забывайте, что столбец 4  должен быть отсортирован, иначе неверно отработает. Да что-то я второпях не проверил какие блоки получаются

Там вообще лучше написать
Код
If Col2.Count = 6

Так даже понятнее будет

Изменено: Евгений Смирнов - 05.02.2022 11:08:04
Разбить таблицу на блоки, по 6 строк.
 
velmak  Такое интересное и легкое задание, а никто не хочет помогать. Сортировку не добавлял, в файле примере столбец 4 отсортирован. Словарь не стал делать в принципе и коллекции пойдут. Выгрузку сделал на активный лист, что легко можно поменять. Сделал как понял. Проверяйте.
Код
Sub enstaralfffg()
Dim Arr1, Tp1(1 To 4), i&, j&
Dim Col1 As New Collection, Col2 As New Collection, Col3 As New Collection
Arr1 = Cells(1).CurrentRegion
For i = 1 To UBound(Arr1)
    Tp1(1) = Arr1(i, 1): Tp1(2) = Arr1(i, 2): Tp1(3) = Arr1(i, 3): Tp1(4) = Arr1(i, 4)
    Col1.Add Tp1
Next: i = 0
Do While Col1.Count > 1
i = i + 1
If Col2.Count = 0 Then
    Col2.Add Col1(i): Col3.Add Col1(i): Col1.Remove (i): i = 0
Else
    If Col2.Count > 6 Then
    Set Col2 = Nothing: i = 0
    Else
If Col1(i)(4) > Col2(Col2.Count)(4) Then Col2.Add Col1(i): Col3.Add Col1(i): Col1.Remove (i): i = 0
    End If
End If
Loop: Col3.Add Col1(1)
For i = 1 To Col3.Count: For j = 1 To 4: Arr1(i, j) = Col3(i)(j): Next: Next
Range("G1").Resize(UBound(Arr1), UBound(Arr1, 2)) = Arr1
End Sub
Получить из текста значения после последнего знака "/ "
 
huchos Просто описывайте в задании, что есть, и что хотите получить в итоге. Тогда вам предложат лучшее решение. Я вам только показал, как сделать используя вашу строку кода
Получить из текста значения после последнего знака "/ "
 
huchos Плохо описали задание и что вы хотите получить в итоге.
Насколько я понял: Получить правую часть строки с разделителем из значения ячеек.
Может так надо
Код
Sub test_carp_()
s = "*********** / 70g / *****************/ 965115040"
Dim MyRange As Range
Dim MyCell As Range
Dim Tp1$
Set MyRange = Range("D34:D" & Cells(Rows.Count, 1).End(xlUp).Row)
For Each MyCell In MyRange
 If MyCell.Value <> "" Then
 Tp1 = Right(MyCell.Value, Len(MyCell.Value) - InStrRev(MyCell.Value, "/") - 1)
 '    Right(s, Len(s) - InStrRev(s, "/") - 1)
  Debug.Print Tp1
 End If
Next MyCell
End Sub
Закрытая книга остается в редакторе VBA
 
Maxleon 5 раз пошагово выполнил макрос все нормально только на листе изменил конечно свой путь и имя файла.
Может какая то проблема с файлом адрес которого записан на листе или опять какие-нибудь заморочки с новыми версиями эксель У меня эксель 2010.
И зачем в макросе писать лишние переменные и строки
Код
Sub ТестОткрытия()
    Dim Dannye$, Path$
    With ThisWorkbook.Worksheets("Документы")
        Dannye = .Cells(2, 2).Value
        Path = .Cells(2, 1).Value
    End With
    Workbooks.Open Path & Dannye
    Workbooks(Dannye).Close True
End Sub
Работа с текстовыми файлами в режиме прямого доступа, Функции ввода-вывода низкого уровня
 
Здравствуйте bedvit Спасибо за ответ. Знаю, что надо матчасть учить. Просто не знаю какую книгу для этого лучше почитать, чтобы быстро «врубиться». Ведь очень важно например для автора книги, не только знать излагаемый материал, но и способность доходчиво донести эти знания другим. (По хорошему этой способностью должны обладать все учителя) Сейчас стал понимать, что Джон Уокенбах, кое где не совсем точен, а когда–то я по ней учился потому что не было больше ничего и доступа в интернет нормального не было. И сейчас тяжело искать информацию, если сам ничего не понимаешь. Пишут все кому не лень и  часто откровенную чушь. Когда искал инфо по этой теме сайтов 30 пересмотрел (может это и немного), но только 2 статьи выбрал и сохранил у себя.
После 6 вопроса в сообщении №1 это скопировано с какой - то лекции по программированию. Мне показалось что там в принципе правильно написано поэтому сохранил этот кусок у себя в файле.
Работа с текстовыми файлами в режиме прямого доступа, Функции ввода-вывода низкого уровня
 
Доброго здоровья!

Познакомился с этой темой в принципе давно, читая книгу Джона Уокенбаха, но поверхностно. За последнее время здесь было несколько тем по работе с текстовыми файлами. Одна из них «Сохранение файла с нужным разделителем» набрала ~ 30000 просмотров т.е пользователей интересует вопрос работы с текстовыми файлами. Я знаю, что с ними можно работать и на языке VBScript. С нового года стал изучать VBScript, но пришлось отвлечься и попробовать до конца разобраться с работой в режиме прямого доступа. Предполагаю, что принципы работы одинаковые (только операторы, функции разные) поэтому потом будет легче разбираться с VBScript. К великому моему сожалению найти  статьи, где все разложено по полочкам, мне не удалось. В книге Джона тоже маловато написано. Здесь ничего не нашел. На сайте Дмитрия Щербакова в разделе хитрости нашел и бегло прочитал несколько статей (некоторые  тонкости хорошо обьяснены), но по вопросу этой темы статья скудная. Нашел пару подходящих статей, и то в них есть некоторые противоречия. Строго следуя завещаниям великого Ленина,  исходя из лозунга «Учиться, учиться и ещё раз учиться» стараюсь разобраться, но в связи с тем, что не являюсь «профи» остались некоторые вопросы. Очень прошу помочь начинающему программисту разобраться, и ответить на вопросы изложенные ниже.

Есть 5 режимов работы Input, Output, Append, Binary, Random. Первые три объединяются в группу Sequential. В книге Джона написано, что для VBA интерес представляет только режимы последовательного доступа. С чем я не совсем согласен. Думаю, что бинарный режим тоже нужен, в определенных случаях. Больше всего проблем в изучении вызвал произвольный режим.

1 Во первых это связано с тем, что не знаю, что такое записи (определение) Или понятие записи в разных ситуациях разные понятия? ( Часто встречаю это понятие в статьях)
2 Ключевое слово Len в команде Open используется только в режиме Random?
3 Если мы не знаем длину записи, то не сможем открыть в режиме Random,  файл  записанный в режиме Random?
4 Вроде разобрался как заменить определенные символы в файле, увеличить размер файла не переписывая в другой, а вот как обрезать например конец файла (несколько символов) без перезаписи файла (т.е. создания другого файла меньшего размера) так и не понял. Или это невозможно в этих режимах?
5 Почему так редко применяют эти режимы для работы с текстовыми файлами? (Есть какие то ограничения например: нельзя работать с сетевыми дисками, маленькая скорость считывания или что-нибудь еще)
6 Все ли верно написано в тексте ниже:

Функции ввода-вывода низкого уровня (прямого доступа) осуществляют обмен с файлами или периферийными устройствами путем прямого обращения к соответствующим функциям операционной системы (системным вызовам). Отличительные особенности средств прямого доступа к файлам следующие.
1. Они не предоставляют возможности буферизации информации при пересылке.
2 Они не обеспечивают преобразования данных из внутреннего машинного представления в текстовый формат.
3 Они дают возможность перемещать указатель текущей позиции в потоке на нужный байт.
4 При низкоуровневом открытии файла с ним связывается файловый дескриптор. Дескриптор является целым значением, характеризующим размещение информации об открытом файле во внутренних таблицах операционной системы. Дескриптор используется при последующих операциях с файлом.
Программное заведение пароля на проект VBA
 
Msi2102  А вы упертый, как я. Ничего себе bedvit вас на 2 дня загрузил.  :D

Коллеги сейчас вот только пришло в голову, может диалоговые окна "Project Properties" разные у разных версий и клавиатурные комбинации для работы с ним, поэтому не срабатывает у всех один код. Я клавишами прошелся по окну у меня полностью все по коду сообщения№1 совпадает. Пошагово выполнить F8 не получается.
Может сверить клавиатурные комбинации окна. У меня Ctrl-Tab, пробел ,Tab,1,Tab,1,Tab,Enter.

Изменено: Евгений Смирнов - 03.02.2022 13:38:50
Программное заведение пароля на проект VBA
 
Цитата
MikeVol написал:   Win_10_Enterp_LTSC_x64, MSO_2019_Pro_Plus, i5 M450 @2,40GHz, RAM 12Gb. (Древний Мамонт)
У меня Супер свежий Intel Core Duo T2300E, 1666 MHz, Ram 1Гб все 32 bit. Этот код работает.
Может махнемся не глядя компами, пока у меня хорошее настроение. Завтра уже могу не согласиться. :D

Коллеги вывод: Не стоит «сломя голову» менять компы и программное обеспечение, пока ты можешь решать свои задачи на нем, и тебя устраивает время выполнения этих задач. Видимо всегда новое ПО «сырое». Хотя все равно когда то надо обновлять.
Программное заведение пароля на проект VBA
 

Msi2102  Попробуйте у себя тогда так после End With

Код
DoEvents
ThisWorkbook.Saved = False
ThisWorkbook.Close True
Программное заведение пароля на проект VBA
 
Msi2102 Попробуйте добавить задержку из первого кода сообщения №2
Программное заведение пароля на проект VBA
 

Msi2102 проверьте доступ к VBA проектам открыт или нет

Программное заведение пароля на проект VBA
 

bedvit Книга2.xls изначально без паролей. Открываю с поддержкой макросов. Нажимаю только кнопку на листе Закрыть книгу. При следующем открытии в VBA стоит пароль «1»

Программное заведение пароля на проект VBA
 

bedvit  Windows XP Excel 2002 и  Excel 2010  32 bit  работает в обоих.

Код
Sub TestPasswordProject()
With ThisWorkbook.Application
.VBE.CommandBars(1).FindControl(ID:=2578, recursive:=True).Execute
.SendKeys "^{TAB}"
.SendKeys "{ }"
.SendKeys "{TAB}" & 1
.SendKeys "{TAB}" & 1
.SendKeys "{TAB}"
.SendKeys "{ENTER}"
End With
DoEvents
ThisWorkbook.Close True
End Sub
Выбор и удаление строки, действие по кнопке комбобокса
 
Msi2102 Здравствуйте. Сильно не думал об этом скопировал код немного подправил, проверил и выложил.
В данном случае вы правы, можно было и без объектных переменных обойтись.
Выбор и удаление строки, действие по кнопке комбобокса
 
ktcmax Проверяйте
Программное заведение пароля на проект VBA
 

bedvit Здравствуйте Попробуйте после End With заменить ваши строки на

Код
Application.Wait (Now + TimeValue("00:00:01"))
ThisWorkbook.Close 1

Или так

Код
DoEvents
ThisWorkbook.Close 1

Но интуиция мне подсказывает, что лучше так писать

Код
DoEvents
ThisWorkbook.Close True

Изменено: Евгений Смирнов - 02.02.2022 10:04:25
Макрос импорта строк из txt-файла
 
New Павел как ни странно у меня все нормально отрабатывает. вроде я текстовый файл из темы не правил. сейчас еще попробую скачать заново

PS New Вы правы надо добавить +1. С файлом который в теме все нормально, но там последняя строка пустая. Если ее удалить, то последняя не выводится.
Изменено: Евгений Смирнов - 01.02.2022 11:39:23
Макрос импорта строк из txt-файла
 
МатросНаЗебре Привет жителям Благовещенска, почти земляк. Но мне подальше до Китая, чем вам. А к профи не отношусь. Если узнаете о моей профессиональной деятельности будете сильно удивлены. (Никогда не занимался программированием профессионально это честно без шуток)

МатросНаЗебре А я  подумал сибиряк значит земляк. Обманули меня.
Изменено: Евгений Смирнов - 01.02.2022 14:16:08
Значения из двух динамических таблиц в одну со сложными условиями: обрабатываемые строки, сумма, условие.
 
Согласен с NEW серьезное задание. Для того чтобы ответить, как лучше в VBA, надо толком разобраться с условиями проверки. Согласен с Игорем  Гончаренко, что можно и VBA. Если к примеру 100 строк в секунду через 63 секунды запускать макрос (как у вас написано хотя это не обязательно) 6300 новых строк на 1 листе. Это наверно лучше в словарь (По моему словарь быстрее чем коллекции). Что касается данных на 2 листе, то надо сначала разобраться с условиями, может и метод Find будет лучше, хотя и заполнения словаря(25000 строк) будет почти мгновенно, о чем написал Игорь Гончаренко. Поэтому время в основном будет зависеть от  ваших условий проверки и фильтрации.
Цитата
построчно обходить макросом каждую строку будет значительная задержка - 3-5 секунд.
Ну тут вы наверно переборщили. Надеюсь у вас комп не 486 DX2.
Макрос импорта строк из txt-файла
 
Chelovek: Спасибо за оценку моего скромного труда, но до профи мне далеко, как до Китая пешком. (Просто в некоторых вопросах, которые меня интересуют, стараюсь до конца разобраться)

New: Здравствуйте. В вашей функции CountLinesInTextFileFast надо добавлять +1 т.к. она считает количество строк в файле. В моем не надо. И вообще зачем вы 2 раза читаете текстовый файл. Первый раз чтобы посчитать кол-во строк, а второй, чтобы заполнить массив. Это все можно сделать за одно считывание (В данном случае). Про ограничение Transpose знаю, уже натыкался. Это легко обойти добавить цикл.(Сделать свою Transpose)
Макрос импорта строк из txt-файла
 
Цитата
Chelovek написал: Нужен небольшой макрос импорта данных из текстового файла в активный лист Excel.
Самый самый небольшой макросик, который смог за сегодня найти на бескрайних просторах интернета.(Весь день искал даже на обед не пошел)
Код
Sub enstaralgkl()
    Dim FileName$, Arr1
FileName = "Текст.txt": FileName = ThisWorkbook.Path & "\" & FileName
    Open FileName For Input As #1: FileName = Input(LOF(1), #1)
    Arr1 = Split(FileName, vbNewLine): Reset
Range("A1").Resize(UBound(Arr1)) = WorksheetFunction.Transpose(Arr1)
End Sub
Функция открытия диалогового окна есть в файле NEW
Ошибка при обращении методом Application.Run к макросу с определенным именем
 
Владимир Спасибо за пояснения. Я понял, что объект не находит, несколько минут тыкал не получалось, а про именованные диапазоны для метода Run не знал.
Функция перекодировки текстовых файлов из « родной кодировки» (1251) в UTF-8
 

6 строка кода сообщения №1 по моему должна быть такой (без учета отрицательных значений о которых разъяснил sokol92)

Код
Case Is > 2047: txt1 = Chr(224 + AscW(Sim) \ 4096) & Chr(128 + (AscW(Sim) Mod 4096) \ 64) & Chr(128 + AscW(Sim) Mod 64)

Огромное спасибо за помощь sokol92.

Макрос экспорта данных в Файл.txt, просьба подкорректировать
 
Проверяёте
Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 18 След.
Наверх