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

Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 13 След.
как получить список файлов в архиве (в тихом режиме)?, vba
 
БМВ, заработало!



.
как получить список файлов в архиве (в тихом режиме)?, vba
 
Цитата
nilske написал:
запретить выкладывать бред от ИИ, без собственной проверки насколько этот бред полезен
соглашусь на 146%
нейрослоп можно выключить, просто закрыв вкладку с чатом. а когда тебе авторитетно это пихают вне песочницы - становится грустно
да ещё где пихают? не на woman.ru, а на тематическом олдовом форуме
Изменено: KUDRIN - 05.02.2026 18:01:07
как получить список файлов в архиве (в тихом режиме)?, vba
 
Цитата
написал:
от ИИ
он мне пол дня сегодня пытался нерабочие способы подсунуть
я потому к людям и пришёл
у тебя даже если починить :
Код
Dim intProcessID As Integer
Private Sub WaitForProcess(processID As Long)
и запустить TestAllMethods

то вывод будет такой
Код
=== Метод 1: Временный файл ===
Результат (первые 500 символов): Ошибка: не удалось создать временный файл

=== Метод 2: WMI ===
Ошибка WMI: Automation error

=== Метод 3: Test3 исправленный ===
Файл не найден: D:\222.txt
т.е. ни один из трёх методов не сработал
не говоря уже о размере этой портянки, у меня в первом посте всё максимально компактно без этих вот лишних 200 строк, а точнее даже 462 строки
Изменено: KUDRIN - 05.02.2026 16:30:19
как получить список файлов в архиве (в тихом режиме)?, vba
 
есть один рабочий вариант, но он мигает (sub test1)
если несколько файлов обрабатывать, то забирается фокус на cmd окна, т.е. параллельно что-то делать невозможно

два вопроса:
1. как сделать выполнение .StdOut.ReadAll в скрытом режиме?
2. либо как починить sub test3?
Код
Const ar$ = "D:\test 111.7z"
Const ex$ = "D:\7-Zip 25.01 x64\7z.exe"
Const file$ = "D:\222.txt"
Sub test1() 'мигает
cmd = """" & ex & """" & " l " & """" & ar & """"
Debug.Print CreateObject("WScript.Shell").exec(cmd).StdOut.ReadAll
End Sub
Sub test2() 'не мигает, работает
cmd = "ver"
cmdtxt = "cmd /c " & cmd & " > """ & file & """ 2>&1"
CreateObject("WScript.Shell").Run cmdtxt, 0, True
'Shell cmdtxt, 0
End Sub
Sub test3() 'не мигает, не работает
cmd = """" & ex & """" & " l " & """" & ar & """"
cmdtxt = "cmd /c " & cmd & " > """ & file & """ 2>&1"
CreateObject("WScript.Shell").Run cmdtxt, 0, True
'Shell cmdtxt, 0
'Debug.Print Trim(CreateObject("WScript.Shell").exec(cmdtxt).StdOut.ReadAll)
End Sub

.
Изменено: KUDRIN - 05.02.2026 14:05:58
DateValue - Type Mismatch - как починить?, vba
 
Цитата
Дмитрий(The_Prist) Щербаков написал:
Вы серьезно? Т.е. Вы рассказываете, что нужна именно DateValue, которая если и преобразует текст в дату - выглядеть она будет точно так же - с днем недели(ибо локаль)
после того как узналась причина ошибки мною был написан уж точно стабильный вариант выгрузки даты в ячейку
что не так? чем текстовая "14/01/26" ЗНАЧИТЕЛЬНО хуже датированной "#среда 14/01/2026 по лунному календарю#" ?

кто даст гарантию, что на каком-то ПК не установлен такой формат даты? "ddd dd.MM.yyyy yyyy"

и что это никоим образом не повлияет на сотню различных возможных функций-преобразований вида (дата-число-строка) ? как например повлияло на DateValue, да даже банальная CStr(Date) выдаст тоже "среду", которая полетит дальше по коду пытаться обрабатываться как неожиданная фиктивная числовая дата
или вообще поедет в ячейку к бухгалтеру тёте Глаше, а потом они будут всем отделом гадать а откуда у них там взялась среда или два года подряд в ячейке с датой, ведь в коде у умного дяди погромиста было всё по науке, обработка только формата даты, и никаких тебе убогих стрингов

я лишь дал один из вариантов обработки, никого к нему не призываю
спорить про чей-то ЛИЧНЫЙ уровень понимания типов данных и прочие далёкие от конкретного кода филосовские штуки - это не ко мне
Изменено: KUDRIN - 14.01.2026 18:31:48
DateValue - Type Mismatch - как починить?, vba
 
Цитата
Дмитрий(The_Prist) Щербаков написал:
И есть специальные функции, переводящие правильные даты в любой нужный формат. Та же
Код
c = Format("14/01/2026")
тоже выдаёт "Ср 14.01.2026", но уже в виде строки а не даты
Изменено: KUDRIN - 14.01.2026 18:01:32
DateValue - Type Mismatch - как починить?, vba
 
Цитата
Дмитрий(The_Prist) Щербаков написал:
почему именно не стабильная DateValue
потому что простая, короткая, без лишних слов, и сестра к TimeValue

Цитата
Дмитрий(The_Prist) Щербаков написал:
Более стабильные варианты преобразований почему-то не воспринимаются.
например какой код в этом треде выдаст стабильно дату #14/01/2026#? или #14.01.2026# ? без дня недели (на ПК, где стоит формат даты с днём недели)

Цитата
Дмитрий(The_Prist) Щербаков написал:
А вот Int - это куда ближе при работе с датами, чем DateValue, т.к. любая дата это в первую очередь число и как раз такие методы куда быстрее и корректнее обработают даты.
Код
a = FileDateTime("C:\Windows\notepad.exe")
c = Int(a)
этот код через число тоже выдаёт среду #Ср 14.01.2026#

Цитата
Дмитрий(The_Prist) Щербаков написал:
почему-то не воспринимаются.
был же ответ - сначала искалась причина.
теперь же, когда причина ясна - остаётся дело за малым - топорно преобразовать дату в текст перед выводом. т.к. любой вывод или обработка именно даты - выдаст день недели, что как оказывается не всегда съедается самими же родными экселевскими функциями
Изменено: KUDRIN - 14.01.2026 18:09:33
DateValue - Type Mismatch - как починить?, vba
 
Цитата
Дмитрий(The_Prist) Щербаков написал:
есть же другие функции, куда более стабильно работающие вне зависимости от локализации и форматов:
Код
c = DateSerial(Year(a), Month(a), Day(a))
Код
a = DateValue("24/11/21")
оба кода выдают  #Ср 14.01.2026#


наверное в таком случае более стабильным вывод будет с такой текстовой, а не датированной пред-обработкой
(для вывода в ячейку или в дальнейшую обработку)
Код
Sub test()
a = FileDateTime("C:\Windows\notepad.exe")
b = IsDate(a)
c = Day(a) & "/" & Month(a) & "/" & Year(a)
d = Hour(a) & ":" & Minute(a) & ":" & Second(a)
End Sub
Изменено: KUDRIN - 14.01.2026 17:36:55
DateValue - Type Mismatch - как починить?, vba
 
Цитата
Дмитрий(The_Prist) Щербаков написал:
a = Date
Есть подозрение, что и там будет фигурировать день недели,
вот результат работы этого кода:
Код
#Ср 14.01.2026#
DateValue - Type Mismatch - как починить?, vba
 
Цитата
МатросНаЗебре написал:
Еще вариант.
работает, если перед дебагпринтом добавить строку :
Код
a = Replace(a, ".", "/") 
---
Цитата
Дмитрий(The_Prist) Щербаков написал:
c = DateSerial(Year(a), Month(a), Day(a))
причём оба кода выдают день недели в своём результате, а не просто день месяц год
Код
#Ср 15.12.2021#
Изменено: KUDRIN - 14.01.2026 17:07:12
DateValue - Type Mismatch - как починить?, vba
 
Цитата
sokol92 написал:
Скопируйте текст из окна Immediate (Ctrl+G в VBE) и поместите в сообщение
Увидел Ваши картинки.
да, тут ещё мне надо было делать ставку, что в сегодняшних реалиях отображение картинок с фотохостингов то нынче не у всех работает и лучше скрины прикреплять во вложение, чтобы всем было 100% видно

Цитата
sokol92  написал:
Про настройки форматов см., например, здесь,
хорошая ссылка, там и выставляется формат даты с днём недели "dddd dd.MM.yyyy" или "ddd dd.MM.yyyy", который ломает работу DateValue, и каждый может опробовать это на себе на практике
Изменено: KUDRIN - 14.01.2026 15:57:27
DateValue - Type Mismatch - как починить?, vba
 
Цитата
Дмитрий(The_Prist) Щербаков написал:
("Ср 14.01.2025"). И этот формат даты никак не может быть преобразован из VBA через DateValue,
всё, направление понятно, буду копать где убирается (и добавляется) эта "Ср". настройки винды это или может софтина какая, а может настройки часов

О, и даже с виртуалками морочиться не пришлось
вот где это убирается - ПКМ на часы справа снизу - настройка времени и даты - формат даты и времени и региона - изменить форматы данных - выставить ту, где нету "дня недели"
у меня после изменения строка со "Ср dd.mm.yyyy" куда-то пропала, а была выбрана внизу нижней строчкой (там где красная рамка)


я вроде какую-то софтину устанавливал или где-то что-то шаманил, чтобы в часах вин 10 отображался день недели в строке перед датой, как на вин7

после смены в (Пуск - Региональные параметры (Регион) - изменить форматы данных) - всё починилось и код заработал
Цитата
Дмитрий(The_Prist) Щербаков написал:
И это не единственный формат, который может "не понравиться" VBA.
ну, когда уже ясна причина, то можно искать всякие разные пути - изменение настроек часов, пользование другими функциями или преобразование и причёсывание выдаваемого значения FileDateTime, это уже дело десятое. именно DateValue - Type Mismatch плохо гуглилась и сразу была не ясна причина ошибки

благодарю каждого за помощь, каждый внёс свою прояснительную грань в этом вопросе
Изменено: KUDRIN - 14.01.2026 15:43:09
DateValue - Type Mismatch - как починить?, vba
 
_

Цитата
sokol92 написал:
А что у Вас указано в настройках Windows в разделе Регион



Цитата
МатросНаЗебре написал:
А так?

Цитата
МатросНаЗебре написал:
Или так?
в обоих случаях ошибка

Цитата
Дмитрий(The_Prist) Щербаков написал:
Даже достучавшись до причины ошибки(явно что-то в локали) - что делать будете
для начала достучусь до причины ошибки, а потом уже можно дальше подумать
вообще странно, что за столько лет такой ошибки ни у кого не возникало? с нуля копать

попробую позапускать код на разных версиях windows, о результатах сообщу
Цитата
sokol92 написал:
дата неявно преобразована в текст как "Ср 12.06.24 9:42:15". Такой текст функция DateValue "забракует"

а у всех остальных какой результат преобразования? вот такой? "12.06.24 9:42:15" ? значит проблема именно в том, чтобы выставить (в системе?), чтобы день недели спереди не отображался
Изменено: KUDRIN - 14.01.2026 15:17:57
DateValue - Type Mismatch - как починить?, vba
 
Цитата
Дмитрий(The_Prist) Щербаков написал:
И типы переменным Вы так и не назначили
я отвечал другому человеку, и скрин приложил тоже для него
скринить результат с объявлением типов данных я не стал, а просто написал текстом
если нужен персональный скрин и слов недостаточно, то пожалуйста



вот ещё и файл-пример прикреплён с этим же кодом, который тоже у меня выдаёт ошибку

Цитата
Дмитрий(The_Prist) Щербаков написал:
В чем смысл проверки с2, если Вы даже не дошли до назначения ей значения?
да, я умею пользоваться Ctrl+F9 , ещё вопросы?

Цитата
Дмитрий(The_Prist) Щербаков написал:
ct = a - c
вопрос был не в конвертации дат, а вопрос темы - причина ошибки и как эту ошибку полечить

Цитата
sokol92 написал:
Скопируйте текст из окна Immediate (Ctrl+G в VBE) и поместите в сообщение
готово:
Код
Ср 12.06.24 9:42:15 
Изменено: KUDRIN - 14.01.2026 14:34:13
DateValue - Type Mismatch - как починить?, vba
 
Цитата
Дмитрий(The_Prist) Щербаков  написал:
А зачем вообще применять DateValue к данным, которые и так являются датой?
например чтобы вместо каши получить нормальную дату, или время (TimeValue я не стал упомянать, т.к. в контексте этой проблемы нет разницы)
уместен ли тут вообще вопрос "зачем?"  
Изменено: KUDRIN - 14.01.2026 14:27:01
DateValue - Type Mismatch - как починить?, vba
 
Цитата
Sanja написал:
Код отработал, ошибка не воспроизвелась
а у меня вот так, ни c1 ни c2 не отрабатывает


Цитата
Sanja написал:
Вспоминайте, что изменилось после этого 'раньше'
например смена винды, в данном случае с 7+2010 на 10+2020

Цитата
Дмитрий(The_Prist) Щербаков написал:
Попробуйте задать типы явно:
с этим кодом тоже самое, та же ошибка
Изменено: KUDRIN - 14.01.2026 14:26:25
DateValue - Type Mismatch - как починить?, vba
 
такой код выдает ошибку DateValue - Type Mismatch, хотя раньше вроде бы работал
Код
Sub test()
a = FileDateTime("C:\Windows\notepad.exe")
b = IsDate(a)
c1 = DateValue(cstr(a))
c2 = DateValue(a)
End Sub

появление ошибки зависит от настроек винды? или настроек экселя?
как её чинить?
Изменено: KUDRIN - 14.01.2026 13:52:54
Поздравительные видео с НГ, в таблицах
 


Вот несколько видео по нашей теме
https://cs18.pikabu.ru/s/2025/12/12/14/xmfrcwlj_s0f0d12m0_464x848.mp4
https://cs20.pikabu.ru/s/2025/12/12/20/bhh2xquk_s0f0d10m0_640x382.mp4
https://cs19.pikabu.ru/s/2025/12/14/07/rejuwpd4_s0f0d82m0_1728x1080.mp4
https://cs16.pikabu.ru/s/2025/12/12/18/vnqsj5vd_s0f0d6m0_1440x1440.mp4
https://cs18.pikabu.ru/s/2025/12/12/23/imprchb3_s0f0d28m0_1920x1032.mp4

Вот код пятого видео https://pastebin.com/cbD4eLXG
Код
Sub HappyNewYear()

    Columns("A:AA").Select

    Selection.ColumnWidth = 2

    Rows("1:38").Select

    Selection.RowHeight = 40

    Range( _

        "M1,L2:N2,K3:O3,J4:P4,I5:Q5,H6:R6,G7:S7,F8:T8,E9:U9,D10:V10,C11:W11,B12:X12"). _

        Select

    Application.Wait (Now + 0.000007)

    Range("B12").Activate

    Application.Wait (Now + 0.000007)

    With Selection.Interior

        .Pattern = xlSolid

        .PatternColorIndex = xlAutomatic

        .ThemeColor = xlThemeColorAccent6

        .TintAndShade = -0.249977111117893

        .PatternTintAndShade = 0

    End With

    Application.Wait (Now + 0.000007)

    Range("M1").Select

    Application.Wait (Now + 0.000007)

    ActiveCell.FormulaR1C1 = "=RANDBETWEEN(1,10)"

    Range("M1").Select

    Selection.Copy

    Application.CutCopyMode = False

    Selection.Copy

    Application.Wait (Now + 0.000007)

    Range( _

        "L2,M2,N2,K3:O3,J4:P4,I5:Q5,H6:R6,G7:S7,F8:T8,E9:U9,D10:V10,C11:W11,B12:X12"). _

        Select

    Range("B12").Activate

    Application.Wait (Now + 0.000007)

    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _

        False, Transpose:=False

    Range( _

        "L2,M2,N2,K3:O3,J4:P4,I5:Q5,H6:R6,G7:S7,F8:T8,E9:U9,D10:V10,C11:W11,B12:X12,M1" _

        ).Select

    Range("M1").Activate

    Application.CutCopyMode = False

    With Selection

        .HorizontalAlignment = xlCenter

        .VerticalAlignment = xlBottom

        .WrapText = False

        .Orientation = 0

        .AddIndent = False

        .IndentLevel = 0

        .ShrinkToFit = False

        .ReadingOrder = xlContext

        .MergeCells = False

    End With

    Application.Wait (Now + 0.000007)

    With Selection

        .HorizontalAlignment = xlCenter

        .VerticalAlignment = xlCenter

        .WrapText = False

        .Orientation = 0

        .AddIndent = False

        .IndentLevel = 0

        .ShrinkToFit = False

        .ReadingOrder = xlContext

        .MergeCells = False

    End With

    Selection.FormatConditions.AddIconSetCondition

    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority

    Application.Wait (Now + 0.000007)

    With Selection.FormatConditions(1)

        .ReverseOrder = False

        .ShowIconOnly = False

        .IconSet = ActiveWorkbook.IconSets(xl3TrafficLights1)

    End With

    With Selection.FormatConditions(1).IconCriteria(2)

        .Type = xlConditionValuePercent

        .Value = 33

        .Operator = 7

    End With

    With Selection.FormatConditions(1).IconCriteria(3)

        .Type = xlConditionValuePercent

        .Value = 67

        .Operator = 7

    End With

    Application.ScreenUpdating = False

        Columns("AA:AA").Select

    Selection.ColumnWidth = 255

    Range("AD4").Select

    ActiveWindow.SmallScroll Down:=-12

 
    Columns("AB:CB").Select

    Selection.ColumnWidth = 2

    Union(Range( _

        "AX3:AX6,AX2,AU2:BA2,BE2:BE6,BF4:BH4,BI4,BJ5,BF6:BI6,BL2:BL6,AI12,AI11,AI10,AI9,AI8,AJ8,AK8,AL8,AM8,AN8:AN12,AR8:AR12,AS12,AT11,AU10,AV9,AW8,AX8:AX12,BA12,BB11:BG11,BH12,BC8:BC10,BD8:BF8,BF9:BF10" _

        ), Range( _

        "BK9:BK11,BL12,BM12:BO12,BP9:BP11,BL8:BO8,BT8:BT12,BU8:BX8,BY9,BU10:BX10")). _

        Select

    Range("BL2").Activate

    With Selection.Interior

        .Pattern = xlSolid

        .PatternColorIndex = xlAutomatic

        .ThemeColor = xlThemeColorAccent6

        .TintAndShade = -0.249977111117893

        .PatternTintAndShade = 0

    End With

    Range("AU2").Select

    ActiveCell.FormulaR1C1 = "=RANDBETWEEN(1,10)"

    Range("AU2").Select

    Selection.Copy

    Union(Range( _

        "BV8,BU8,AV2:BA2,AX3:AX6,BE2:BE6,BF6:BI6,BJ5,BF4:BI4,BL2:BL6,AI8:AI12,AN8:AN12,AJ8:AM8,AR8:AR12,AS12,AT11,AU10,AV9,AW8,AX8:AX12,BA12,BH12,BB11:BG11,BC8:BC10,BD8:BF8,BF9:BF10,BK9:BK11,BL12:BO12,BP9:BP11,BL8:BO8,BT8:BT12,BU10:BX10,BY9" _

        ), Range("BX8,BW8")).Select

    Range("BU8").Activate

    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _

        False, Transpose:=False

    Application.CutCopyMode = False

    With Selection

        .HorizontalAlignment = xlGeneral

        .VerticalAlignment = xlCenter

        .WrapText = False

        .Orientation = 0

        .AddIndent = False

        .IndentLevel = 0

        .ShrinkToFit = False

        .ReadingOrder = xlContext

        .MergeCells = False

    End With

    With Selection

        .HorizontalAlignment = xlCenter

        .VerticalAlignment = xlCenter

        .WrapText = False

        .Orientation = 0

        .AddIndent = False

        .IndentLevel = 0

        .ShrinkToFit = False

        .ReadingOrder = xlContext

        .MergeCells = False

    End With

    Union(Range( _

        "BV8,BU8,AU2,AV2:BA2,AX3:AX6,BE2:BE6,BF6:BI6,BJ5,BF4:BI4,BL2:BL6,AI8:AI12,AN8:AN12,AJ8:AM8,AR8:AR12,AS12,AT11,AU10,AV9,AW8,AX8:AX12,BA12,BH12,BB11:BG11,BC8:BC10,BD8:BF8,BF9:BF10,BK9:BK11,BL12:BO12,BP9:BP11,BL8:BO8,BT8:BT12,BU10:BX10" _

        ), Range("BY9,BX8,BW8")).Select

    Range("AU2").Activate

    With Selection

        .VerticalAlignment = xlCenter

        .WrapText = False

        .Orientation = 0

        .AddIndent = False

        .IndentLevel = 0

        .ShrinkToFit = False

        .ReadingOrder = xlContext

        .MergeCells = False

    End With

    Application.Wait (Now + 0.000006)

    With Selection

        .HorizontalAlignment = xlCenter

        .VerticalAlignment = xlCenter

        .WrapText = False

        .Orientation = 0

        .AddIndent = False

        .IndentLevel = 0

        .ShrinkToFit = False

        .ReadingOrder = xlContext

        .MergeCells = False

    End With

    Selection.FormatConditions.AddIconSetCondition

    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority

    With Selection.FormatConditions(1)

        .ReverseOrder = False

        .ShowIconOnly = False

        .IconSet = ActiveWorkbook.IconSets(xl3TrafficLights2)

    End With

    With Selection.FormatConditions(1).IconCriteria(2)

        .Type = xlConditionValuePercent

        .Value = 33

        .Operator = 7

    End With

    With Selection.FormatConditions(1).IconCriteria(3)

        .Type = xlConditionValuePercent

        .Value = 67

        .Operator = 7

    End With

    Range("A1").Select

    Application.ScreenUpdating = True

    Dim i As Integer

    For i = 1 To 300

        If Columns("AA").ColumnWidth > 2 Then

            Columns("AA").ColumnWidth = Columns("AA").ColumnWidth - 1

            If Columns("AA").ColumnWidth = 2 Then

                Application.ScreenUpdating = False

                Application.ScreenUpdating = True

            End If

        End If

        Application.CalculateFullRebuild

        Application.Wait (Now + 0.000005)

    Next i

End Sub
.
объединить текст (из разных ячеек в одну) с сохранением цвета (форматирования) текста, vba
 
Цитата

по другому алгоритму
способ рабочий, только в нём такой же алгоритм как в v2 первого сообщения - сначала вставка сырых значений, а потом посимвольная покраска


исходя из практики - такой алгоритм очень долгий, обрабатывает  200-1000 символов в минуту, но из альтернатив наверное ничего и нету
Изменено: KUDRIN - 05.03.2025 16:54:51
как включить ускоренную многопоточную x64 работу vba кода?, vba
 
после установки x64 офиса - формулы полностью нагружают все 100% потоки процессора и справа снизу в строке состояния пишет количество нагруженных процессоров
но сам vba код работает только в однопоточном режиме, загружая процессор на 5-15%

есть ли какие-то опции по включению всех потоков в vba?
бывают ли вообще многопоточные компиляторы в программировании?
Изменено: KUDRIN - 20.02.2025 11:37:01
объединить текст (из разных ячеек в одну) с сохранением цвета (форматирования) текста, vba
 


как объединить несколько ячеек в одну с сохранением всех цветов?
кто-то прорабатывал такую процедуру?

тут есть два момента:
1. обрабатывать нужно посимвольно, т.к. в исходных ячейках может быть несколько цветов текста внутри каждой ячейки, т.е. цвет текста нельзя считывать со всей ячейки
2. этот код имеет максимальную длину 255:
Код
[A1].Characters.Text(Start, Length)
[A1].Characters(Start, Length).Caption
т.е. посимвольно удлинять результирующую строку и тут же менять цвет в этом же цикле сработает только до длины 255

одно решение есть тут, но страдает от ошибки переполнения 255 и не учитывает разный цвет внутри исходных ячеек
Код
Sub Tester()
    With ActiveSheet
        AddValue .Range("A1"), "Hello", vbRed
        AddValue .Range("A1"), "Hello", vbGreen
        AddValue .Range("A1"), "Hello", vbBlue
    End With
End Sub
Sub AddValue(rngVal As Range, val, theColor As Long)
    Const SEP As String = " "
    Dim firstChar As Long, extra As Long
    firstChar = 1 + Len(rngVal.Value)
    extra = IIf(firstChar = 1, 0, 1)
    With rngVal
        .Characters(firstChar).Text = IIf(Len(rngVal.Value) > 0, SEP, "") & val
        .Characters(firstChar + extra, Len(val)).Font.Color = theColor
    End With
End Sub

ещё одно из решений есть тут, но страдает от ошибки переполнения 255
Сцепляет с сохранением форматирования выделенные строки и помещает результат справа от выделения. Ячейка куда записывается результат сначала затирается
Код
Sub RunConcat()
  ConcatenatewithFormat Selection, ThisWorkbook.ActiveSheet.Cells(Selection.Row, Selection.Column + Selection.Columns.Count)
End Sub
Sub ConcatenateWithFormat(InputRange As Range, OutPutRange As Range)
Dim i As Integer, q As Variant
Dim sText As String, c As String, A As Variant
Dim oChars As Characters, n As Integer
  OutPutRange.Clear: n = 0
  For Each A In InputRange
    sText = A.Text
    For i = 1 To Len(sText)
      Set oChars = A.Characters(i, 1)
      Set q = OutPutRange.Characters(i + n, 1)
      q.Caption = oChars.Caption
      With oChars
        q.Font.Bold = .Font.Bold
        q.Font.Name = .Font.Name
        'q.Font.Color = .Font.Color
        q.Font.ColorIndex = .Font.ColorIndex
        q.Font.FontStyle = .Font.FontStyle
        q.Font.OutlineFont = .Font.OutlineFont
        q.Font.Size = .Font.Size
        q.Font.Strikethrough = .Font.Strikethrough
        q.Font.Subscript = .Font.Subscript
        q.Font.Superscript = .Font.Superscript
        q.Font.Underline = .Font.Underline
      End With
    Next i
    n = n + Len(sText)
  Next A
End Sub

пока что думаю алгоритм такой:
v1
1. сначала выгрузить сырое сцепленное Value в результирующую ячейку
2. пройтись по исходным ячейкам и изменение цвета текста записать в словарь или коллекцию в виде [номер символа, индекс нового цвета]
3. покрасить итоговый сырой результат на основе этого словаря или коллекции
4. если нужно сохранить не только цвет, но и форматирование - то писать кодировку вида Font_Size_Bold_Underline_italic_Color, например Arial_12_NoBold_UL_Noit_FFFF00, хотя в данном случае возможно проще будет сделать на многомерном массиве, чтобы не сплитать и не расшифровывать эту кодовую строку форматирования

v2
а можно так:
1. сцепить сырой текст из всех исходников в результат
2. покрасить текст функцией выше, заквотив в ней две строки - 1. предочистка результирующей ячейки и 2. посимвольное впечатывание символа в результирующую ячейку
v2 успешно отрабатывает на длине более 255

таким образом можно переделать пару строк в ConcatenateWithFormat и получить процедуру, которая успешно отработает и на разных цветах и на длине более 255, вдобавок можно добавить кастомный сепаратор между значениями исходных ячеек и фильтр по ячейкам

смежные темы:
https://www.planetaexcel.ru/forum/?PAGE_NAME=read&FID=8&TID=11600
https://www.planetaexcel.ru/forum/?PAGE_NAME=read&FID=1&TID=137447
Изменено: KUDRIN - 19.02.2025 09:42:04
Как открыть рабочий стол?, vba, winapi, CLSID, win7, Shell.windows
 
Цитата
testuser написал:
Вот эта комманда
да, Shell.Explore помогла
только если открыт рабочий стол через InvokeVerbEx, то Shell.Explore уже не откроет новое, а просто активирует.

1. если вручную открыто 3 рабочих стола, потом InvokeVerbEx откроет 4-ое окно (игнорируя ранее открытые), и Explore активирует это 4-ое окно
2. если вручную открыто 3 рабочих стола, и сразу Explore, то открываются новые окна
таким образом - у окна, открытого InvokeVerbEx , некий особый статус
Изменено: KUDRIN - 02.08.2024 18:49:50
Как открыть рабочий стол?, vba, winapi, CLSID, win7, Shell.windows
 
testuser, сработало

ниже:
обычная папка - это та которая не нужна (если вручную идти в мои документы\рабочий стол)
уникальная папка с синей иконкой - тот рабочий стол, который нужен - если тыкать на рабочий стол в боковом меню любой папки

1. если открыта "обычная" папка рабочий стол - то открывает всё равно новое окно с уникальной синей иконкой
2. если уже открыто хотя бы одно окно с уникальной иконкой - то активирует его
3. если открыто несколько окон с уникальной синей иконкой - то активирует самое раннее открытое
4. если не открыто ни одного окна с уникальной синей иконкой - то открывает новое нужное окно

таким образом - это лучше, чем всё, что у меня было до этого, т.к. первая команда которая умеет открывать рабочий стол с синей уникальной иконкой
и всё ещё - эта команда не может открыть 3 отдельных окна.
есть такая же команда, только с принудительным открытием нового окна?

нашлась только
Код
CreateObject("Shell.Application").Namespace(0).Self.InvokeVerbEx ("open")
но она работает аналогично - тоже только 1 окно открывает/активирует

а список команд;

Код
objFIV = CreateObject("Shell.Application").Namespace(0).Items().Verbs

не показывает ничего интересного в духе "new window"

Код
CreateObject("Shell.Application").Namespace(0).Self.InvokeVerbEx ("Explore")

не делает ничего

--

что интересно, в кавычках "CreateObject("Shell.Application").Namespace(0).Self.InvokeVerbEx" гуглится и яндексится только 1 результат

Изменено: KUDRIN - 02.08.2024 10:02:33
Как открыть рабочий стол?, vba, winapi, CLSID, win7, Shell.windows
 
с каких пор vba код стал быть в курилке?
Как открыть рабочий стол?, vba, winapi, CLSID, win7, Shell.windows
 
Цитата
\root , "C:\Users\Admin\Desktop"
Как открыть рабочий стол?, vba, winapi, CLSID, win7, Shell.windows
 
Цитата
написал:
Уточнить бы еще какая из картинок какая :-).


пока никакими командами не удалось открыть три рабочих стола, только мышкой
Изменено: KUDRIN - 01.08.2024 09:51:04
Как открыть рабочий стол?, vba, winapi, CLSID, win7, Shell.windows
 
Как открыть рабочий стол? (vba, winapi, win7)
по какому адресу он находится?

в идеале бы получить CLSID
в реестре прописан "Desktop" ::{00021400-0000-0000-C000-000000000046}, но он никуда не ведёт
"file:///C:/Users/Admin/Desktop" открывает папку с рабочим столом (на картинке слева)
а нужно именно виндовый рабочий стол с уникальной иконкой (на картинке справа)


Изменено: KUDRIN - 01.08.2024 04:24:11
как автоматически проставить табуляцию или отступы в vba коде?, онлайн или офлайн
 
Цитата
Sanja написал:
Smart Indenter v3.5
инсталятор просто распаковывает одну DLL в отдельную папку - C:\Program Files (x86)\Office Automation\Smart Indenter\VBA6
как его подключить к офису выше 2003 ?
через VBA - Tools - References - Browse - IndenterVBA.DLL - не подключается
Изменено: KUDRIN - 05.12.2023 11:55:56
как автоматически проставить табуляцию или отступы в vba коде?, онлайн или офлайн
 
у плекса 6/65 - это значительно ниже чем 27/58

v05/12/23
6/64 PLEX.zip https://www.virustotal.com/gui/file/b17e08c0a7b4959eb0c375924f7d5f6e6b804df1132711124f8bea01843b­f892
6/62 PLEX.xlam https://www.virustotal.com/gui/file/39ffdee6c41b97a128ed8162bd4a3a4c1d4b7dcf3c99e33d8ec539547f1f­f52d
6/65 PLEX_Eng.xlam https://www.virustotal.com/gui/file/8fa3cb0d2cfbb702810d866b986f626efad3bd728aacbb3101c056faaf08­be3d

Изменено: KUDRIN - 05.12.2023 10:46:20
как автоматически проставить табуляцию или отступы в vba коде?, онлайн или офлайн
 
Цитата
написал:
Снимок экрана
кроме каспера есть ещё 60 других антивирусов
с подключением
с таким же успехом можно вообще ни один антивирус не ставить и говорить, что вирусов не существует в природе
Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 13 След.
Наверх