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

Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 162 След.
Путем упрощения примера с ошибкой пришел к неожиданному открытию и не знаю как решить эту проблему, Бонус: способ как устроить ошибку "Разрушительный сбой" в абсолютно новом файле
 
Спасибо за исследование!
Последовательность действий, описанная Вами, приводит к разрушению структуры проекта книги (\xl\vbaProject.bin), после этого файл уже не отремонтировать.

Я не знаю, как сообщить разработчикам о баге.
Владимир
Путем упрощения примера с ошибкой пришел к неожиданному открытию и не знаю как решить эту проблему, Бонус: способ как устроить ошибку "Разрушительный сбой" в абсолютно новом файле
 
Проделал операции, указанные в стартовом сообщении, на компьютере с Win 10, Excel 2016 (32).
Результат прилагается.
У меня файл открывается в обычном режиме.
Изменено: sokol92 - 04.06.2025 17:08:05
Владимир
Вставка формулы в ячейку с помощью VBA
 
В макросах лучше (при прочих равных) не использовать локализованные свойства. Если Вашу книгу откроют на компьютере с Windows другой локализации, то макрос выдаст ошибку.
В Вашем случае можно так:
Код
Range("A1").Formula = "=TODAY()"
Владимир
При открытии файла - недоступный тип шифрования.
 
Официальная поддержка MS Office 2007 завершилась в 2017 году, так что сейчас вряд ли можно дать точный ответ.
Владимир
При открытии файла - недоступный тип шифрования.
 
Поисе приводит к подобной ситуации с версиями Excel 2007:

Цитата
Изначально был установлен офис версии 12.0.4518.1014 - он не поддерживает данный тип шифрования.
Офис версии 12.0.6612.1000 файл открывает корректно.
Владимир
Постраничная разбивка и сохранение при слиянии excel и word, Не получается через ActiveDocument.MailMerge.DataSource.DataFields.Value получить значение полей при процедуре слияния word и excel
 
Рад, успехов!
Изменено: sokol92 - 26.05.2025 21:12:31
Владимир
Постраничная разбивка и сохранение при слиянии excel и word, Не получается через ActiveDocument.MailMerge.DataSource.DataFields.Value получить значение полей при процедуре слияния word и excel
 
Давайте добавим в пример из #3 после строки 13:
Код
            .ActiveRecord = i
            MsgBox .DataFields("score").Value
Владимир
Постраничная разбивка и сохранение при слиянии excel и word, Не получается через ActiveDocument.MailMerge.DataSource.DataFields.Value получить значение полей при процедуре слияния word и excel
 
Типовой "обман зрения".  :)
Свойство ActiveDocument "склонно к измене" при открытии нового файла.
В таком виде макрос у меня работает:
Код
Option Explicit

Sub my_macro()
  Dim i As Long
  For i = 1 To 2

    With ThisDocument.MailMerge
        .Destination = wdSendToNewDocument
        .SuppressBlankLines = True
        
        With .DataSource
            .FirstRecord = i
            .LastRecord = i
        End With
                
        .Execute Pause:=False
    End With
  Next i
End Sub
Владимир
Подсчет количества именинников в базе данных
 
Цитата
Temniy.divers написал:
кто-то кроме автора имеет доступ к редактированию,
Для подобных случаев в Excel есть замечательный механизм проверки данных.
Владимир
Подсчет количества именинников в базе данных
 
См. приложенный файл
В ячейке C1 формула, которая подсчитывает число совпадений в диапазоне ячеек A2:A10000.
Какая именно ошибка у Вас выдается в этом файле?
Владимир
Подсчет количества именинников в базе данных
 
Цитата
Temniy.divers написал:
Дата вида 24.05.2025 не проходят по этой формуле.
Проходят. Локализованный вариант:
Код
=СУММПРОИЗВ((ДЕНЬ(A2:A100)=ДЕНЬ(СЕГОДНЯ()))*(МЕСЯЦ(A2:A100)=МЕСЯЦ(СЕГОДНЯ())))

(конструкция "--" для преобразования логических значений в число не обязательна, так как есть знак умножения).
Владимир
Странное поведение Like (VBA)
 
Здравствуйте, коллеги!
Здесь дана более подробная (?) спецификация оператора Like.
Изменено: sokol92 - 17.05.2025 15:52:13
Владимир
автоматическое изменение экселем кодового имени листа при открытии нескольких книг. как бороться, и можно ли бороться.
 
По Вашей картинке однозначно можно сделать вывод, что структура проекта нарушена. Срочно создайте новую книгу и перенесите туда информацию из испорченного файла.
Принин может быть несколько  (полная классификация вряд ли существует). Из уже встречавшихся:
  • корректировка (создание) книги в приложениях, отличных от MS Excel
  • корректировка книги, созданной в Excel Win, в Excel Mac..
  • последовательная корректировка книги Excel в системах Windows c разными кодовыми таблицами по умолчанию...
.
Владимир
Смена языка в датах сводной, Неожиданно поменялся язык в сводной таблице
 
Цитата
Михаил Нарвич написал:
Менял языки и в источнике, и в сводной - всё работает.
Михаил, спасибо за сообщение и подготовленный пример!

Посмотрите, как выглядит Ваш файл после открытия на компьютере с конфигурацией:  Win 10, кодовая страница по умолчанию windows-1252 (en), Excel 2019,  и обновления сводной таблицы.
Изменено: sokol92 - 03.05.2025 16:29:13
Владимир
Р7 офис, Импортозамещение аналог excel
 
Я думаю, что эти вопросы удобнее обсуждать в  форуме ONLYOFFICE.
Изменено: sokol92 - 02.05.2025 14:32:22
Владимир
Ширина и высота ячеек, Не получается точно указать ширину и высоту ячеек
 
Цитата
Михаил Нарвич написал:
потом увидел, что тема "архивная"
А где Вы это увидели?
Владимир
Р7 офис, Импортозамещение аналог excel
 
К словам Михаила добавлю, что ONLYOFFICE - продукт с открытым исходным кодом (как и LibreOffice) и при очень большом желании ( :)  )выдвинутые гипотезы (например, про SetValue и GetValue) можно превратить в утверждения.
Владимир
Ширина и высота ячеек, Не получается точно указать ширину и высоту ячеек
 
Здравствуйте, Михаил!

Да, какие-то искажения будут. Главное - Excel будет сам сражаться с особенностями принтера.  :)
Владимир
Р7 офис, Импортозамещение аналог excel
 
Поскольку наш форум обычно отвечает (почти) на все вопросы, то вот ключ к разгадке вопроса о загадочном поведении методов GetValue и SetValue.

Откройте новый документ  в P7 или ONLYOFFICE (у меня версия 8.3.3.21) с языком интерфейса "Русский" и занесите в ячейку A1 число 1,2 (или другое дробное).

Выполните макрос (JS):
Код
function test()
{
    const oRange1 = Api.GetActiveSheet().GetRange("A1");    
    const oRange2 = Api.GetActiveSheet().GetRange("A2");
    oRange2.SetValue(oRange1.GetValue());
} 
test();

У меня в ячейке A2 появляется дата 1 февраля 2025 года с соответствующим форматом ячейки.
Это говорит о следующем (в P7 могут быть другие результаты - проверьте):
1. Метод getRange возврашает строку (string) и для ячеек, содержащих число. Если эта ячейка содержит число, то число преобразуется в текст в соответствии с правилами JS (без учета настроек локали).
2. Метод setRange интерпретирует текст при занесении в ячейку в соответствии с настройками локали.
Изменено: sokol92 - 01.05.2025 17:06:58
Владимир
Ширина и высота ячеек, Не получается точно указать ширину и высоту ячеек
 
Я бы начал с уcтановки масштаба "разместить не более чем на 1 стр. в ширину и 1 стр. в высоту".
Изменено: sokol92 - 01.05.2025 16:14:21
Владимир
Р7 офис, Импортозамещение аналог excel
 
Посмотрел запись. Докладчик молодец, правда, в 1:36:32 кто-то задал коварный вопрос.
Владимир
Р7 офис, Импортозамещение аналог excel
 
Спасибо за ссылку. Функция Msgbox (или аналог) появилась?
Владимир
ДР (ex HB)
 
Уважаемый Юрий, с днем рождения!
Вы внесли и вносите исключительный вклад в успех этого форума и все мы Вам бесконечно благодарны. Примите наилучшие пожелания здоровья и успехов!
Владимир
Лучший парсер VBA-Json (ваше мнение)
 
Давайте проверим эффективность предлагаемых решений для Excel VBA на примере типового json - файла, аналогичного тем, которые возвращаются Web-сервисами.
Порядок проверки:
1. Создаем каталог C:\temp (если не существует)
2. Выполняем макрос CreateJson (см. ниже). Значения переменных nRows (число строк) и nCols (число столбцов) можно менять.
Макрос создает json - файл C:\Temp\example.json с кодировкой UTF-8.

Задача: выполнить парсинг этого файла и занести данные из этого файла в диапазон ячеек новой книги Excel (nRows строк, nCols столбцов).
Рассказать о результатах: примененный метод, время выполнения.
Код
Option Explicit

Sub CreateJson()
  Dim nRows As Long, nCols As Long, i As Long, s As String, arr
  
  nRows = 10000
  nCols = 30
  
  ' Генерируем объект Json с ключами "Field_i" и значениями "Значение i"
  ' Это представление одной записи результата.
  For i = 1 To nCols
    s = IIf(s = "", "{", s & ",") & """Field_" & i & """:""Значение " & i & """"
  Next i
  s = s & "}"
  
  ' Генерируем массив из nRows одинаковых записей
  ReDim arr(1 To nRows)
  For i = 1 To nRows
    arr(i) = s
  Next i
  
  s = "[" & Join(arr, ",") & "]"
  
  ' Записываем в файл C:\temp\Example.json в кодировке UTF-8
  Text_SaveToFile s, "C:\temp\example.json", "utf-8noBOM"
  
End Sub

'
' Источник макроса : https://excelvba.ru/code/TextFile
' © 2022 ExcelVBA.ru
'
Function Text_SaveToFile(ByVal txt$, ByVal Filename$, Optional ByVal Encoding$) As Boolean
    ' функция сохраняет текст txt в кодировке Encoding$ в файл filename$
    ' возвращает TRUE, если сохранение прошло успешно
    ' © 2022 ExcelVBA.ru
    On Error Resume Next: Err.Clear
    If Encoding$ = "ANSI" Then Encoding$ = "windows-1251"
    If Encoding$ = "" Then Encoding$ = "UTF-8" ' кодировка по умолчанию: UTF-8
    
    Select Case Encoding$
        Case "utf-8noBOM"
            With CreateObject("ADODB.Stream")
                .Type = 2: .Charset = "utf-8": .Open: .WriteText txt$
                Dim binaryStream As Object: Set binaryStream = CreateObject("ADODB.Stream")
                binaryStream.Type = 1: binaryStream.Mode = 3: binaryStream.Open
                .Position = 3: .CopyTo binaryStream        'Skip BOM bytes
                .flush: .Close
                binaryStream.SaveToFile Filename$, 2
                binaryStream.Close
            End With
 
        Case Else
            With CreateObject("ADODB.Stream")
                .Type = 2: .Charset = Encoding$: .Open: .WriteText txt$
                .SaveToFile Filename$, 2: .Close
            End With
    End Select
    Text_SaveToFile = Err = 0: DoEvents
End Function
Владимир
VBA. Медленная работа cells.copy и cells.format, На некоторых компьютерах.
 
Я думаю, что попытка за 0,66 сек 100 раз обновить буфер обмена является непростой задачей для MS Windows (да еще с учетом того, что может быть включено журналирование изменений буфера обмена). Можно добавить после обновлений буфера обмена вызов функции DoEvents, что повысит стабильность,  но замедлит время выполнения.
Владимир
VBA. Медленная работа cells.copy и cells.format, На некоторых компьютерах.
 
После сохранения в формате .xlsm (который можно анализировать) у меня (Excel 2016 Win 10) Ваши тесты выдают (стабильно) результаты такого порядка:(округлено до 2 знаков после запятой):

test1: 0.42
test2: 0,66
test3: 0,64
test4: 0,01

Остаюсь при своих рекомендациях.

P.S. У Вас макрос находится в модуле листа (а не стандартном модуле), так что не запускайте его кнопкой.
P.P.S. После команды PasteSpecial, если буфер обмена больше не нужен, лучше добавить строку:
Код
Application.CutCopyMode = False
Изменено: sokol92 - 23.04.2025 17:04:47
Владимир
VBA. Медленная работа cells.copy и cells.format, На некоторых компьютерах.
 
Спасибо за подготовленный пример.
Методы 2-3 100 раз копируют информацию в буфер обмена и вставляют информацию из буфера обмена. В эффективных программах необходимо минимизировать количество таких операций.

Общее замечание - следует минимизировать число взаимодействий между VBA и Excel. Копирование диапазона ячеек во много раз быстрее, чем копирование каждой ячейки этого же диапазона по отдельности.
Изменено: sokol92 - 23.04.2025 12:43:33
Владимир
VBA. Медленная работа cells.copy и cells.format, На некоторых компьютерах.
 
Файл - пример и описание действий, приводящих к неэффективной работе макросов, помогли бы прояснить ситуацию.
Владимир
Значение ячейки сделать адресом., Значение ячейки сделать адресом.
 
В A3:
=ДВССЫЛ(A2)
Владимир
Вставка массива в ячейки (VBA), Какой то странный баг со значениями после вставки
 
Цитата
Sanja написал:
Это транспонирование шалит.
+1.
Совет для читателей темы: никогда не используйте Application.Transpose (если только Вы не разработчик Excel и не видели исходного кода  программы).  :)

Поясню (упрощенно) суть вышеуказанного эффекта в макросе из стартового сообщения.
После цикла форматирования массива arr элементами массива являются переменные типа Variant подтипа Date. Поскольку такого типа данных для ячеек Excel не существует (в Excel датам соответствуют числа), то метод Application.Transpose преобразует эти даты в текст (в соответствии с локальными настройками). При присвоении значения свойству Value, наоборот, ожидается не локализованное выражение.
Изменено: sokol92 - 03.04.2025 18:02:50
Владимир
Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 162 След.
Loading...