Здравствуйте! Потребовалось из формул перейти на макрос и столкнулся с непониманием как в VBA использовать данную функцию. Подскажите пожалуйста. Спасибо
Microsoft Office 2010 64-bit, Windows 10 Professional 64-bit
Здравствуйте! Не знаю как правильно объяснить задачу. Попытаюсь) В столбце С указываются исходные значения которые необходимы для дальнейшей работы - среднее значение, количество отсчётов и допустимый разброс значений В столбце E необходима такая формула, чтобы при протягивании её вниз она заполнилась случайными значениями, но с ограничениями определенными в столбце С. В столбце Н - контрольное значение, рассчитанное как среднее значение величин, заполненных в столбце Е
Пример что необходимо - в приложенном файле
Microsoft Office 2010 64-bit, Windows 10 Professional 64-bit
Сторонней программой готовится отчёт в FastReport и сохраняется в файл ИмяФайла.fp3 (или .frx) В соответствии с требованиями нашей организации необходимо дополнить этот отчёт определенной информацией. Т.к. редактирование отчёта в FastReport достаточно трудоёмко, хочу сделать это в Excel. В самом FastReport есть возможность экспортировать данные в формат Excel или Html. Возможно ли средствами VBA осуществить импортирование данных из отчёта? Если это невозможно, то можно ли средствами VBA автоматизировать экспорт данных из FastReport в Excel (или Html)?
Спасибо
Microsoft Office 2010 64-bit, Windows 10 Professional 64-bit
Здравствуйте уважаемые форумчане! Вопрос такой. Сторонней программой через шаблон .xlt генерируются отчеты в формате Excel. Сохранением и нумерацией файлов управляет также сторонняя программа. Имена файлов имеют вид типа бла-бла-бла_1.xls, бла-бла-бла_2.xls, бла-бла-бла_3.xls, бла-бла-бла_4.xls. В данном конкретном случае 4 отчета. При генерации четвертого (последнего) отчета я из отчетов _1, _2, _3 копирую данные на лист 4 отчета, т.о. собираю все данные на один лист. Могу сохранить данные в новую книгу, удалить отчеты с первого по третий так как они уже есть на диске.
А вот как сделать удаление 4 книги, которой еще нет на диске???
Microsoft Office 2010 64-bit, Windows 10 Professional 64-bit
Здравствуйте уважаемые форумчане! Мой вопрос не относится непосредственно к Excel.
А вопрос такой. При открывании через проводник файлов MS Office Excel и Word расположенных на сетевых дисках лежащих вне локальной сети возникает сообщение-предупреждение от Windows (см. скриншот).
Что необходимо сделать чтобы оно не появлялось каждый раз. Сетевые диски подключены в системе и имеют букву диска. Логин/пароль сохранены. Надоело каждый раз видеть его и нажимать на кнопку Ок.
Спасибо
Microsoft Office 2010 64-bit, Windows 10 Professional 64-bit
Есть сайт ФГИС АРШИН, где по заводскому номеру прибора можно найти сведения о поверке. Т.к. при внесении записи поверяющая организация может указать номер содержащий пробел(ы) возникает сложность с поиском таких номеров. Необходимо перебрать возможные варианты таких номеров. Далее по составленному списку будут формироваться запросы к ФГИС, но это уже другая история
Вручную я понимаю как это сделать, но если номер содержит более 2 пробелов, то голова в ручном режиме закипает
В файле-примере в столбце А приведен исходный вид номера. В столбце В - какие варианты возможны для исходного номера.
Подскажите пожалуйста в каком направлении двигаться? Как можно это сделать?
Спасибо!
Microsoft Office 2010 64-bit, Windows 10 Professional 64-bit
Есть такое желание - сменить иконку приложения Excel на панели задач Windows. Есть код который делает это средствами WinAPI в Windows 7(32 bit) Microsoft Office 2010(32 bit), но в Windows 10(64 bit) Microsoft Office 2010(32 bit) и Windows 10(64 bit) Microsoft Office 2010(64 bit) - не делает. Не выдаёт ошибки, а просто не делает.
С чем это связано и как осуществить задуманное?
В приложенном архиве файл Excel и иконка
Спасибо
Microsoft Office 2010 64-bit, Windows 10 Professional 64-bit
Здравствуйте. Элемент ListBox заполняю присваиванием предварительно созданным массивом.
Код
ListBox1.List=aR
Данные каждый раз разные, в колонках разный текст. Если для одних колонок можно вручную подобрать нужную ширину, то для других необходимо ширину подстраивать в зависимости от длины текста в ней. Что сейчас сделано: в процессе подготовки массива определяется самый длинный элемент через функцию Len(). И кодом меняется ширина столбца рассчитанная таким образом: Размер шрифта Х Количество символов Х 0,0282. Результат получается в сантиметрах. Его и указываю для параметра ColumnsWidth с указанием 'cm'. Правильно ли так делать или есть более изящный способ?
Microsoft Office 2010 64-bit, Windows 10 Professional 64-bit
Здравствуйте уважаемые форумчане! Возникла потребность получения данных с одного сайта. Не знаю как это правильно называется, вроде парсинг) "Покурив" руководство пользователя этого сайта и погуглив, накропал макрос, которые извлекает данные. Но если данных много, то сайт начинает ругаться на множественные запросы и соответственно не отдает нужные данные. Если делать задержку методом Application.Wait то получение данных растягивается на N-ое время, и то не гарантирует что получится. И кириллицу тоже не хочет воспринимать(
Скрытый текст
Код
Sub Test()
Dim Result As String
Dim URL As String
Dim objHTTP 'As New MSXML2.XMLHTTP60
Dim Count As Long
Dim Results() As String
Dim Txt As String
Dim i As Long
Set objHTTP = CreateObject("MSXML2.XMLHTTP.6.0")
Txt = "29345-05" ' 125 записей
' Txt = "28363-14" ' 4358 записей
' сначала определяю сколько вообще записей есть
URL = "https://fgis.gost.ru/fundmetrology/eapi/vri?search=" & Txt
objHTTP.Open "GET", URL, False
objHTTP.Send
Result = objHTTP.responseText
Count = CLng(Mid(Result, InStr(11, Result, ":") + 1, InStr(1, Result, ",""start") - (InStr(11, Result, ":") + 1)))
'Debug.Print "Количество найденных записей := " & Count
' переопределяю массив под записи
ReDim Results(1 To Count, 1 To 1)
DoEvents
Sheets(1).UsedRange.Clear
[A1] = Count
' в цикле заношу записи в массив
For i = 1 To Count
'Debug.Print "Запись № " & i
URL = "https://fgis.gost.ru/fundmetrology/eapi/vri?search=" & Txt & "&start=" & i - 1 & "&rows=1"
objHTTP.Open "GET", URL, False
objHTTP.Send
Results(i, 1) = objHTTP.responseText
'Application.Wait (Now + TimeValue("0:00:01"))
Next
' выгружаю результат на лист
[B2].Resize(UBound(Results), 1) = Results
End Sub
Здравствуйте. Как убрать или сделать свой заголовок у приложения? (обведено на картинке) Если делаю Application.Caption=" ", то исчезает только правая часть, и остается показывать "Книга1 -" Как сделать чтобы там был только мой текст, или его вообще не было?
Microsoft Office 2010 64-bit, Windows 10 Professional 64-bit
Здравствуйте. В проекте использую свою, пользовательскую, ленту Ribbon, стандартную ленту полностью скрываю через редактор Ribbon. Но при запуске книги стандартная лента появляется в процессе загрузки, а потом спустя некоторое время убирается и появляется уже моя. Причем на разных компьютерах - разное поведение. Где-то это сразу происходит, а где-то 'подвисает' на несколько секунд. Как я понял зависит это от быстродействия компьютера. В процедуру Workbook_Open вставлял Application.Visible = False/True. Все равно временно показывает стандартную ленту. Как побороть это?
Microsoft Office 2010 64-bit, Windows 10 Professional 64-bit
Здравствуйте уважаемые форумчане. Столкнулся с непонятной мне проблеме при работе в Microsoft Office 2010. Устанавливаю защиту листа. Разрешаю следующее: - выделение заблокированных ячеек - выделение незаблокированных ячеек - форматирование ячеек - форматирование строк - форматирование столбцов - вставку гиперссылок. При нажатии на кнопку выделения всех ячеек происходит зависание Excel с невозможностью дальнейшее работы до перезапуска приложения. Опытным путем определил что это происходит если разрешаю вставку гиперссылок. Проверил это же в Office 2016. Там происходит небольшое подтормаживание при этом действии, но программа не виснет и продолжает работать. Как с этим бороться???
Microsoft Office 2010 64-bit, Windows 10 Professional 64-bit
Здравствуйте уважаемые форумчане. Мне нужны переменные к которым бы я мог обратиться через текстовую строку, например в циклах так: "Параметр" & i Как я понял это можно сделать если создать переменные в модуле класса.
Создаю переменные через класс. В модуле класса Class1 пишу следующее:
Скрытый текст
Код
Option Explicit
Private vЗнач_1 As Variant
Private vЗнач_2 As Variant
Public Property Get Знач_1() As Variant
Знач_1 = vЗнач_1
End Property
Public Property Get Знач_2() As Variant
Знач_2 = vЗнач_2
End Property
Public Property Let Знач_1(ByVal vValue As Variant)
vЗнач_1 = vValue
End Property
Public Property Let Знач_2(ByVal vValue As Variant)
vЗнач_2 = vValue
End Property
В общий модуль Module1 пишу следующее:
Скрытый текст
Код
Option Explicit
Public Товар As New Class1
Private Sub test()
Товар.Знач_1 = 666
Debug.Print Товар.Знач_1
End Sub
В похожей теме для обращения по имени в виде строки предлагали добавить в модуль класса следующее:
Скрытый текст
Код
Property Get Value(x As String)
Value = CallByName(Me, x, VbGet)
End Property
тогда к переменной можно будет обратиться по имени в виде строки, т.е. так: Debug.Print Товар.Value("Знач_1") Но при этом получается что когда вводим Товар. вываливается три варианта: мои переменные (Знач_1 и Знач_2) и переменная Value, т.е.: Товар.Знач_1 Товар.Знач_2 Товар.Value
Вопросы: Не понял что нужно добавить чтобы и присваивать можно было через имя в виде строки, т.е. работала бы конструкция типа Товар.Value("Знач_1")=666 Можно сделать так чтобы это Value не появлялось в списке выбора?
Спасибо
Microsoft Office 2010 64-bit, Windows 10 Professional 64-bit
В целях хранения настроек пользовательской формы хочу использовать диспетчер имен - добавлять туда скрытно данные и считывать их оттуда при загрузке и использовании пользовательской формы(может и не правильно это, но это не предмет обсуждения). Добавление идет так: Names.Add "string", "строка", True 'записываем строковое значение Names.Add "long", 1, True 'записываем целое число Names.Add "double", 1.2, True 'записываем дробное число Names.Add "boolean", True, True 'записываем булево значение
А вот считывать и присваивать их переменным уже засада. Например Txt=Names("string") присвоит значение ="строка", а не просто строка, lNum=Names("long") вернет =1, dNum=Names("double") вернет =1.2 и bNum=Names("boolean") вернет =TRUE, т.е. строковое значение. А мне нужно именно значение. Таким образом, чтобы присвоить эти значения переменным я их должен еще предварительно обработать.
Для переменной типа String: Txt = Names("string") Txt = Replace(Txt, "=", "") 'убираем знак равно Txt = CStr(Replace(Txt, """", "", 1, 2) ) 'убираем знаки кавычек и приводим к типу String.
Для переменной типа long: lNum = CLng(Replace(Names("long") , "=", "")) 'убираем знак равно и приводим к типу Long. Применение Clng не обязательно.
Для переменной типа Double: dNum= CDbl(Val(Replace(Names("double"), "=", ""))) 'убираем знак равно и приводим к типу Double. Применение CDbl не обязательно.
И для переменной типа Boolean: bNum= CBool(Replace(Names("boolean"), "=", "")) 'убираем знак равно и приводим к типу Boolean.
Нет ли другого, более простого способа?
В диспетчере имен есть столбец, название которого - Значение, и там вроде правильно указано значение параметра. Как к нему можно обратиться?
Спасибо
Microsoft Office 2010 64-bit, Windows 10 Professional 64-bit
Не обновляется панель Ribbon перед загрузкой пользовательской формы в модальном режиме. Обновление происходит после выгрузки пользовательской формы. Можно сделать чтобы обновление происходило или смириться с этим?
Если пользовательская форма была загружена в немодальном режиме, то обновление ленты происходит перед загрузкой пользовательской формы. Но при этом становится доступным нажатия на нехорошие кнопки - Закрыть Книгу через крестик или через меню Файл. Т.е. хотелось чтобы форма загружалась в модальном режиме.
Файл прилагается.
Подробное объяснение:
Скрытый текст
Файл отредактирован с помощью RibbonXMLEditor. В нем убраны все меню. На ленту добавлены две кнопки - Печать и Новый.
Объявлена глобальная переменная объекта ленты (Ribbon). Объявлена глобальная переменная признака включения кнопки. При загрузке если лист содержит данные то очищается. Признак включения кнопки устанавливается в False и обновляем Ribbon.
Кнопка Печать должна быть активна только если на листе есть данные. Кнопка Новый очищает лист и запускает пользовательскую форму.
На форме расположены две кнопки Пусто и Данные. При нажатии на Пусто устанавливаем признак включения кнопки в False, обновляем Ribbon и закрываем форму. При нажатии на Новый записываем в ячейку А1 текст, устанавливаем признак включения кнопки в True, обновляем Ribbon и закрываем форму.
Так вот. Если лист содержит данные, то при нажатии на кнопку Новый происходит очищение листа, признак включения кнопки устанавливается в False. Производим обновление Ribbon и запускаем форму. Т.е. кнопка Печать должна стать неактивной. А она остается активной до момента выгрузки пользовательской формы (хотя нажать на нее конечно не могу, форма то в модальном режиме).
Если форма в немодальном режиме, то работает корректно.
Здравствуйте уважаемые форумчане. Вопрос такой. Имеется пользовательская форма, на которой размещены два фрейма. В каждом фрейме размещены два текстбокса. В процедурах TextBox_Exit для каждого текстбокса написан код, который должен выполняться при выходе из него. При переходе между текстбоксами, принадлежащих одному фрейму, обработка события Exit происходит так, как и должно быть. Однако при переходе между текстбоксами, принадлежащих разным фреймам, обработка события Exit не выполняется, а происходит только при закрытии формы(в данном случае) Как в этом случае организовать такую обработку, чтобы Exit срабатывал? Спасибо
Microsoft Office 2010 64-bit, Windows 10 Professional 64-bit
Здравствуйте. При использовании свойства ComboBox.TextAlign = 3 - fmTextAlignRight текст располагается в ComboBox прижатым к правой стороне, однако часть текста оказывается скрытым за вертикальной полосой прокрутки. Можно это как то исправить? О каком параметре для этого я не знаю? Спасибо
P.s. Да, понимаю, что можно использовать левое расположение текста, что можно увеличить до необходимой ширины поле ComboBox.
Microsoft Office 2010 64-bit, Windows 10 Professional 64-bit
Не могу сообразить как отформатировать число в текстбокс чтобы было следующее: Если число не имеет дробной части, то и не показывать её Если число имеет дробную часть, но количество знаков после неё не превышает 9, то показывать столько знаков, сколько есть. Если в дробной части количество знаков превышает 9, то ограничить вывод знаков после запятой 9. Пример: Что имеем Что должно быть 100 100 0,567 0,567 0,5679643578884328 0,567964359
Если использовать так: format(textbox1,"#0.########0"), то отсутствующие числа заполняются нулями, т.е. например должно быть 100 а выводится 100,000000000 И не было экспоненциального представления.
Здравствуйте! Столкнулся с такой ошибкой. При объявлении одинаковых переменных в разных событиях при работе с Текстбоксом ругается на дублирование. Т.е. нельзя ввести код наподобие:
Код
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Dim X As Object
End Sub
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Dim X As Object
End Sub
Private Sub TextBox1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Dim X As Object
End Sub
Если я так сделаю, то в процедуре _MouseDown будет ругаться на дублирование. Почему так? В чём загвоздка? Просто принять как данность?
Microsoft Office 2010 64-bit, Windows 10 Professional 64-bit
Делаю обработку событий нажатия клавиши в текстбоксе. Хочу сделать "промаргивание" текстбокса при вводе запрещенного символа, т.е. чтобы его фон изменился и обратно вернулся в стандартный. Попробовал так:
Код
Select Case KeyAscii
...
Case Else
Beep
TextBox1.BackColor = vbRed
Application.Wait (Now + TimeValue("00:00:01"))
TextBox1.BackColor = vbWhite
End Select
Но никакой реакции не происходит. Можно ли это сделать? Спасибо
Microsoft Office 2010 64-bit, Windows 10 Professional 64-bit
Для пущей секретности хочу изменить у книг Excel, где расположены данные, расширение на другое. Которое будет не сопоставлено в системе ни с какой программой. Как кодом VBA открыть такой файл? Если так:
то ругается, что расширение отличается и просит подтвердить открытие. Как сделать чтобы это подтверждение не запрашивалось? А если этот файл еще и запаролен, то как тогда быть? Наверное перед открытием можно вносить запись в реестр а после закрытия удалять, но это наверное не будет работать если ограничены права пользователя администратором? Как быть?
Спасибо
Microsoft Office 2010 64-bit, Windows 10 Professional 64-bit
Помогите разобраться вот с каким вопросом. Имеется книга Excel. В ней необходимо загрузить UserForm в модальном режиме, т.е. чтобы пользователь не мог никуда "тыкать" пока не закроет эту форму. Из этой формы(назовём её главной) пользователь будет открывать другие формы(вспомогательные), тоже в модальном режиме, выполнять в них действия и возвращаться к главной форме. Как сделать чтобы при этом можно было открыть другую книгу Excel и она отображалась?, ведь модальность формы не даёт открыть другую книгу. И как сделать чтобы в процессе работы вспомогательных форм обеспечить открытие книг(эти формы работают с данными из этих книг) в скрытом режиме(т.е. чтобы пользователь не видил, что формой открывается какая-то книга) Напрашивается вариант открытие форм в немодальном режиме, но при этом у пользователя будет возможность "тыкать" там где не надо , а этого охота избежать
Спасибо
Microsoft Office 2010 64-bit, Windows 10 Professional 64-bit
Но в этой ячейке у меня отформатированный текст - расставлены степени у чисел(Формат-Шрифт ячеек-Надстрочный) Соответственно при передаче форматирование теряется. Как это можно исправить?
Спасибо
Microsoft Office 2010 64-bit, Windows 10 Professional 64-bit
Написал функцию которая форматирует текст, переводя в указанном месте текст в верхний регистр. Но после выполнения функции текст в ячейке остаётся пустым, хотя в процессе выполнения видно как он вносится и форматируется. Почему так, что не учёл?
Спасибо
Microsoft Office 2010 64-bit, Windows 10 Professional 64-bit
Доброго времени суток, уважаемые форумчане! Прошу помощи.
На форму в зависимости от предварительного выбора необходимо программно добавить 2 фрейма и в них добавить необходимое количество чекбоксов. Почитав форум вроде бы разобрался как это сделать. Сделал такую форму. Вроде работает так, как задумывалась.
Теперь нужно обработать эти чекбоксы, т.е. нужно как то в цикле пройтись по всем чекбоксам, и в зависимости от свойства .Value и .Caption выполнить определенные действия(алгоритм пока обдумывается).
Подскажите пожалуйста как это организовать, можно ли как то упростить код?
Спасибо
p.s. файл весит 160 кб. не даёт загрузить. упаковка тоже не помогает. может просто код выложить?
Как можно обратиться к свойству ячейки в которую вводится пользовательская функция, чтобы можно было менять цвет шрифта или заливки в зависимости от условий, которые прописаны в пользовательской функции. Чтобы это срабатывало не только при непосредственном вводе формулы в ячейку, но и при изменении аргументов функции, участвующих в вычислениях.
Что-то типа такого:
Код
Public Function c(a As Double, b As Double) As Double
c = a + b
If c < 0 Then
ячейка_куда_введена_формула.Interior.Color = vbRed
Else
ячейка_куда_введена_формула.Interior.Color = vbGreen
End If
End Function
Теперь если на листе книги я ввожу в какую-нибудь ячейку(например G8) свою пользовательскую функцию "=c(D2;R5)", то в зависимости от результата вычисления она должна быть залита красным или зелёным цветом. А также при пересчёте формулы(при изменении значений в ячейках D2 и(или) R5), тоже должно срабатывать условие и ячейка куда введена формула(G8) должна отработать этот пересчёт.
Спасибо
Microsoft Office 2010 64-bit, Windows 10 Professional 64-bit
Поиском ответа на свой вопрос не нашел, поэтому спрашиваю. Создал свою функцию, зарегистрировал её, добавил для неё описание(нашёл на форуме как это сделать). Всё ок, всё работает. Но терзают смутные сомнения
Сама функция:
Код
Public Function СЛУЧМЕЖДУСТАТ(Optional Нижн_граница As Double = 0, Optional Верх_граница As Double = 1) As Double
Application.Volatile False
Randomize
СЛУЧМЕЖДУСТАТ = (Верх_граница - Нижн_граница) * Rnd + Нижн_граница
End Function
Вот я добавляю её описание
Код
Public Sub RegisterFunction()
Application.MacroOptions "СЛУЧМЕЖДУСТАТ", Description:="Генерация случайного числа", Category:="Определенные пользователем", ArgumentDescriptions:=Array(" - наименьшее дробное число которое возвращает функция СЛУЧМЕЖДУСТАТ", " - наибольшее дробное число которое возвращает функция СЛУЧМЕЖДУСТАТ")
End Sub
Смущает то, что в значениях указываемых в табличке конечное значение разное(используется же рандомайзер ) ну и результат в ячейке отличается от того что было в табличке(обведено красным в скриншоте). В стандартной функции СЛУЧМЕЖДУ() там указывается просто "переменное". Можно ли и в своей функции так сделать?
Спасибо
Microsoft Office 2010 64-bit, Windows 10 Professional 64-bit