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

Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 19 След.
MsgBox в Офис Р-7
 
Кстати забавная вещь, там команда print вызывает окно выбора пинтера. Да с msgboxom засада. Alert по идее должен быть доступен в режиме отладки. Там отладка с помощью браузера, но я например не смог её включить "с полпинка", и вообще
MsgBox в Офис Р-7
 
Отвлеченно глядя на обшую картину, видно, что серьезный подход такой. Там у них и то и это и третье, десятое. С другой стороны а нафиг офису все эти pdf-просмотрщики, видеоплееры. Этого добра и так хватает, не лучше ли было бы сосредоточиться на самом офисе..  Такие мюсли короче..
Предложение по послаблению правил при создании первых 3 тем
 
Цитата
Sanja написал:
Не уместными с какой точки зрения?
Вот с этой
Цитата
evgeniygeo написал:
в первых трех темах помочь новому участнику научиться соблюдать правила форума
С другой стороны, повторюсь что лично мне это не особо-то и важно, но если бы я рассуждал так как буд-то мне это было бы важно, то я рассуждал бы.. в общем как-то так или не так, в общем все это не очень важно.. ))
Вставить данные на лист Excel без преобразования (xlSet)
 
bedvit, можно сделать просто в vba получить указатель разименовать, поработать с данными, и отпустить указатель,  как буд-то ни чего не был,  а менеджер памти Excel пусть делает что хочет. В общем на VBa все это не проблемма, главное знать структуру  данных. Структура конечно не очен понятна, со всеми этими юнитами, нельзя ли ее привести к какому-то такому виду?
Код
Private Type tpVariant
    vt As Integer
    r1 As Integer
    r2 As Integer
    r3 As Integer
    pt As LongPtr
    r4 As LongPtr
End Type
Вставить данные на лист Excel без преобразования (xlSet)
 
Цитата
bedvit написал:
кто будет управлять памятью, когда я вам передам указатель на массив?
Вы передадите указатель мне и отпустите у себя указатель, а я разименую его на safearray-массив структуры типа XLOPER12. Попутно конечно хотелось бы знать эту структуру, на MS почему-то нет по ней информации.
Да скорее всего придется в VBA коде сделать освобождение указателя на массив, но это не проблема.
Изменено: testuser - 18.04.2024 13:27:05
Предложение по послаблению правил при создании первых 3 тем
 
По общей сложности меня мало волнуют все эти вопросы, но все же скажу, на мой взгляд те две блокировки с утра действитльно выглядели не очень уместными. Там вроде человек составил какой-то развернутый вопрос (я не читал).. Я понимаю бывают такие, которые ни бе ни ме, два слова связать не могут.. Получается как  бы тупая уровниловка, тех кто вообще не хочет шевелить мозгами со всеми остальными..
Изменено: testuser - 18.04.2024 13:20:34
Вставить данные на лист Excel без преобразования (xlSet)
 
bedvit, а вы не могли бы добавить опцию, чтобы передавать/получать данные непосредственно по указателю массива типа XLOPER12?? (речь о передаваче указателя как целочисленного знчения)
Изменено: testuser - 18.04.2024 12:57:22
Вставить данные на лист Excel без преобразования (xlSet)
 
Цитата
bedvit написал:
Собственно это основной тип (структура) данных. Для VBA, Excel трансформирует  XLOPER12 в Variant и наоборот
Ну тут понятно, там где какое-нибуь трансформирование, наверняка тупое копирование, а в вашем классе это наверное релизовано как-то поумней. Такой вопрос, а нельзя ли передать в vba указатель непосредственно на массивы данных в ячеек, чтоб непосредстенно из vba можно было работать с этими данными?
Вставить данные на лист Excel без преобразования (xlSet)
 
Цитата
bedvit написал:
возможно Empty.
Empty это пустой вариант, есть еще Null тоже пустой но единичка в начале (тип)
Изменено: testuser - 17.04.2024 18:40:20
Вставить данные на лист Excel без преобразования (xlSet)
 
Виталий, добрый день! По моему что-то интересное и своевременное. В то время как в соседней теме постановили, что "Эксель себя исчерпал". Это конечно все шутки. Вы как я понимаю сделали быструю выгрузку налист, как раз то чего не хватает. Не моглибы просветить темный народ, что значит тип LPXLOPER12. LP вроде понятно - указатель, а XLOPER12 это что-то вроде бейсикового Variant?
Изменено: testuser - 17.04.2024 18:14:50
Свойства и методы, установленные в VBA по умолчанию
 
Цитата
nilske написал:
да везде работает "оптимально", не только в JS  ))
Ну там другие зато погремушки, там царство дикой автоматики безальтернативной динамической типизации.
Свойства и методы, установленные в VBA по умолчанию
 
Цитата
sokol92 написал:
вызывает функцию MyFunc.
Видимо так работает калькуляция..
А нет, так не срабатывает, т.е. калькуляция может избирательно работать
Код
=ЕСЛИ(ИЛИ(C10;0);1;MyFunc())
Изменено: testuser - 10.04.2024 15:05:39
Свойства и методы, установленные в VBA по умолчанию
 
Касаемо затронутой темы, можно еще привести пример (без примера, на словах )). Допустим константы, по логике программы лучше их использовть там где они уместны. Но в VB есть небольшой нюанс.. Когда константа передается в другую процедуру, она перестает быть константой. Если быть точнее она копируется в другую переменную, которая уже может быть изменена внутри вызываемой процедуры. Если сравнить, передачу обычной переменной по ссылке с передачей константы, то во втором случае добавляются дополнительные издержки на копирование. В случае со длинными строками это должно быть особенно заметно..
Изменено: testuser - 10.04.2024 13:19:36
Свойства и методы, установленные в VBA по умолчанию
 
БМВ, в JS, например, не так работает, проверял
Свойства и методы, установленные в VBA по умолчанию
 
Так если подумать, возможных сокращений не так и много, кроме упоянутых If, For.. Но если взглянуть на вопрос немного иначе, точнее это будет уже другой вопрос, например - как работает невидимая автоматика языка - то таком ракурсе можно было бы выделить не мало нюансов. Вот, допустим, такая конструкция в vb* работает не очень правильно
Код
If условие1 OR условие2 Then

При выполении данной строчки кода будет проверено услвие1 и условие2 даже если условие1 верное, хотя фактически было бы достаточно выполнения условия1 чтобы войти в блок. И в таком случае технически более правильно будет работать Select Case, хотя это будет длинее и менее читаемо..
Код
Select Case True
Case условие1, условие2
***
End Select
Изменено: testuser - 10.04.2024 07:35:57
VBA Часть текста "полужирный" в буфер обмена, из переменной, Скопировать текст в буфер обмена, при этом его часть сделать "полужирной"
 
Цитата
AlexGor написал:
Copy же из этой книги копирует, если её закрыть то откуда копировать будет.
Ну так если с этой книги копируете, то лучше сначала вставить это куда-то, прежде чем закрыть эту книгу..
Свойства и методы, установленные в VBA по умолчанию
 
Выскажусь в пользу сокращений. Имхо, сама концепция-то сокращений правильная, как способ освобождения кода от всяческой избыточности и улучшения читабельности и т.д. Однако в объектной модели или может быть даже в автоматике самого языка не все так гладко устроено, в рез. чего приходится отказываться от некоторых приемов. В добавок если еще добавить случаи мертвых библиотечных ссылок в референсах, там вообще всякая чихорда начинает твориться, но, полагаю, их веротность нельзя принимать за норму. И вот, допустим, если представить код с обильным использованием коллекций или словарей и указанием в каждом случае метода item, наверное это будет грязно. Вот я, в частности, когда только осваивал словари, когда узнал о кратком обращение (без .item) прям удивился, насколько код станоится приятней и читабельней. В этом наверное и есть одна из лучших частей ООП.
VBA Часть текста "полужирный" в буфер обмена, из переменной, Скопировать текст в буфер обмена, при этом его часть сделать "полужирной"
 
Цитата
AlexGor написал:
wbx.Sheets(1).Range("A1:E" & StrStop - 6).Copy
   Close_TempWorkbook
Может быть сначала выполнить Close_TempWorkbook, потом ".Copy"?
Свойства и методы, установленные в VBA по умолчанию
 
Цитата
написал:
Вопрос: какие свойства , методы, конструкции операторов приняты в VBA по умолчанию?
На VBA можно добавить в метод(property или функцию) класса специальный атрибут, который делает его умолчательным. Причем атрибут можно добавить в парное свойство (Property Get/Let) и это будет работать практичеки как "Cell.Value" в обе стороны.
Код
Option Explicit

Private Prop1

Public Property Let Metod1(InValue)
    Attribute Item.VB_UserMemId = 0
    Prop1 = InValue
End Property

Public Property Get Metod1()
    Attribute Item.VB_UserMemId = 0
    Metod1 = Prop1
End Property

Но есть один нюанс, чтобы атрибут начал рабоать, после его прописывания нужно класс экспортировать, и вновь импортировать. Есть и более быстрый способ - скопировать класс перетаскиванием в другую открытую книгу, удалить в текущей, и вновь скопировать его из другой книги в текущую с уже "включенными" атрибутами.
Изменено: testuser - 08.04.2024 02:26:30
VBA Часть текста "полужирный" в буфер обмена, из переменной, Скопировать текст в буфер обмена, при этом его часть сделать "полужирной"
 
AlexGor, поищите в нете, есть еще функция на основе htmldoc-а или как там, в общем еще вариант для работы с буфером обмена, довольно простой синтаксически.
VBA Часть текста "полужирный" в буфер обмена, из переменной, Скопировать текст в буфер обмена, при этом его часть сделать "полужирной"
 
AlexGor, попробуйте выполнить "Clear" после использования буфера
Событие - скрытие строки, Как поймать событие
 
Цитата
Jack Famous написал:
То есть, если скрывать макросом, то так уже не отловить?
по факту работает и в таком случае. Универсальная штука этот CommandBars, можно скролл отслеживать, может быть еще что-то )
Событие - скрытие строки, Как поймать событие
 
Цитата
Jack Famous написал:
про CB и события на нём
Принцип такой, что коллекцияя CommandBars является объектом (com-классом), транслирующим (елси я правильно выразился) события. Чтобы подклюиться к событиям объекта нужно объявить его WithEvents. Кога мы инициализируем объект "cb" то автоматически подключаемся к его событиям. События там генерятся, очевидно, при любом (почти) действии прямо или косвенно связаном с панелями, менюшками, кнопками. При выборе пункта в контекстном меню, также генерится это событие и таким образом можно отловить момент скрытия строки, поскольку перед этим делается клик по пункту "Скрть" в контекстном меню.
Событие - скрытие строки, Как поймать событие
 
Цитата
Jack Famous написал:
А вообще, я не догоняю, как эта магия работает.
Извини, не увидел магии, точнее такая же магия как у меня была без флага )
Событие - скрытие строки, Как поймать событие
 
Jack Famous, уже выставляется )
Событие - скрытие строки, Как поймать событие
 
Дмитрий Дмитрий, в модуль книги добавьте код
Код
Private WithEvents cb As CommandBars, cbOn As Boolean
Private hiddens As Object 'As Dictionary

Private Sub Hiding_Event(Target As Range)
    MsgBox "Скрытие диапазона " & Target.Address
End Sub

Private Sub cb_OnUpdate()
    Dim sel As Range, addr$
    Set sel = Selection
    With sel
        addr = .Address
        If .EntireRow.Hidden Then
1           If Not hiddens.Exists(addr) Then
                hiddens.Add addr, Empty
                Hiding_Event sel
            End If
        ElseIf .EntireColumn.Hidden Then GoTo 1
        Else
            If hiddens.Exists(addr) Then
                hiddens.Remove addr
            End If
        End If
    End With
End Sub

Private Sub Workbook_Open()
    cbInit
End Sub
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    If Not cbOn Then cbInit
End Sub
Sub cbInit()
    Set cb = Application.CommandBars
    Set hiddens = CreateObject("Scripting.Dictionary")
    cbOn = True
End Sub
Изменено: testuser - 04.04.2024 15:58:24
CustomXMLParts, обращение по NameSpace
 
Цитата
dhead написал:
нельзя выцепить ни по Item, ни через SelectByNamespace
Но можно по ID
Похоже вам лучше было сделать так
Код
"<myns:mystruct xmlns:myns=""my-very-very-unical-namespace""><something/></myns:mystruct>"

Цитата
dhead написал:
Плюс, как я понял, есть SDK, позволяющий работать с XML данными в файлах Офиса без установленных приложений самого Офиса.
Файлы Excel типа .xlsx, .xlsm в принципе представляют из себя zip-архив с совокупностью xml и бинарных файлов..
Изменено: testuser - 28.03.2024 14:36:58
CustomXMLParts, обращение по NameSpace
 
Цитата
написал:
цель простая -- сохранять внутри файлов необходимые для работы макросов данные (настройки, например) в виде удобной структуры, а затем их использовать, вытаскивая по "знакомым" NamespaceURI.
Использование XML для хранения данных, распространенная практика в программировании, и может быть в чем-то более правильная. Но в vba есть другие возможности хранить дополнительные данные. В Excel у объектов Workbook есть коллекция CustomDocumentProperties, у объектов листов, есть коллекции CustomProperties, в которые можно загружать даже массивы данных, с одним  нюансом, в виде строки. Вот хороший пример использования. Есть еще один нюанс - утечка памяти, которую обнаружил bedvit, которая происходит при загрузке данных в CustomProperties и последующем удалении их. Впрочем, заметить эту утечку можно только в текущем сеансе работы Excel, и только при сколько-нибудь заметном объеме данных.
Изменено: testuser - 27.03.2024 15:53:44
Систематизация файлов, Windows 11
 
Цитата
написал:
Одной из штатной систем является SharePoint , который позволяет один и тот же объект показать в разных структурах и предоставить разные права пользователям при многомерной модели доступа. и более того связи будут работать если файлы ссылаются друг на друга.Да тот же 1с документооборот примерно также построен, файл хранятся в условной свалке (ну допустим в папках по датам) Внутри папок версии хранятся с UID а база хранит ссылку на файл, далее, поместить эту ссылку в документ нужными реквизитами - элементарно. Но все это система работающая поверх любой файловой структуры Или в базе. В случае с шариком там в базе SQL все .
Вник в эту мысль. Да, понятно, SharePoint "наше чье-то все", а по простому, можно сделать на ссылках, ярлыках, точках монтирования и т.д., но главное правило, всю систему хранения нужно разделить на две структуры - не изменяемую, в которой хранятся реальные файлы, и вторая структура или структуры, содержащие ссылки на эти файлы, которые можн изменять, перемещать как угодно вкладывать друг в друга, при этом не боясь потери связей, поскольку реальная структура файлов будет оставаться не тронутой. И это будет реальным подобием реляционной базы данных.
Изменено: testuser - 27.03.2024 15:06:11
Систематизация файлов, Windows 11
 
Цитата
написал:
задача скорее не переносить файлы, а хранить в строго отведенном месте а вот ссылаться на них из разных мест.
Жесткая ссылка как раз про это, но с некоторыми ограничениями
Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 19 След.
Наверх