Option Explicit
Public ID As String
Private pValues() As Variant
' Публичное свойство для чтения массива
Public Property Get Values() As Variant()
Values = pValues
End Property
' Публичное свойство для записи массива
Public Property Let Values(ByRef arr() As Variant)
pValues = arr
End Property
И есть Процедура CreateErrorForReport, но на строке err.Values = Fields у меня вылезает Type Missmatch
Код
Option ExplicitSub CreateErrorForReport(ByVal errID As String, ParamArray Fields() As Variant)
Dim err As New ReportError
err.ID = errID
err.Values = Fields
End Sub
Sub Test()
CreateErrorForReport "01", 1, 2, 3, 4
End Sub
Как правильно передать ParamArray в pValues объекта ReportError?
Есть файл с таблицами и текстовыми данными. Проблема в том, что если я копирую данные на другой лист/другую книгу, данные переносятся, но без ширины столбцов. Пробовал: Ctrl+C -> Ctrl + V Ctrl+c -> Специальная вставка -> Копировать ширину столбцов Макросом:
Код
dataWs.Range(Cells(1, 1), Cells(lR, lC)).Copy
ws.Activate
With ws.Cells(1, 1)
.PasteSpecial xlPasteColumnWidths
.PasteSpecial xlPasteValues
.PasteSpecial xlPasteFormats
End With
Данные из файла удалил, вписал рандомные числа, прикрепил к теме. Есть идеи, как решить проблему? Спасибо.
Необходимо скопировать текст из Ворда в Outlook, сохраняя форматирование Нагугли нечто вроде:
Код
Sub CopyBodyFromWord()
Dim oOutApp As Object
Dim oMailItem As Object
Dim oWordApp As Object
Dim oWordDoc As Object
Dim oMailWordDoc As Object
On Error GoTo CleanUp
Set oWordApp = CreateObject("Word.Application")
oWordApp.Visible = True
Set oWordDoc = oWordApp.Documents.Open("C:\template.docx", False, True)
oWordDoc.Content.Copy
Set oOutApp = CreateObject("Outlook.Application")
Set oMailItem = oOutApp.CreateItem(0)
With oMailItem
.To = "xxx@yyy.com"
.Subject = "This email contains Word-formatted text"
.Body = "obrashenie"
.Display
End With
Set oMailWordDoc = oOutApp.ActiveInspector.WordEditor
oMailItem.Application.Selection.Paste
CleanUp:
oWordApp.Quit
Set oMailWordDoc = Nothing
Set oMailItem = Nothing
Set oOutApp = Nothing
Set oWordDoc = Nothing
Set oWordApp = Nothing
End Sub
Но валится на шаге: Set oMailWordDoc = oOutApp.ActiveInspector.WordEditor Может у кого есть советы или наработки как скопировать текст из ворда в outlook?
Есть механизм обхода графа с циклами, с условием, что прохождение циклов не более 1 раза. Прописано это в этой строке
Код
For i = 1 To N_NODES
If visited(i) <= 1 And edges(node, i) = 1 Then
VisitForTreeAndCirclesStructure i, visited, edges, Noda, stack
End If
Next
В файле 2 листа (для каждого из них сделал свой модуль для удобства запуска, модули идентичные). При обработке Sheet2 я получаю следующие цепочки: 1->2->3->4->3->4->5 1->2->3->4->3->4->5->6 Т.е. точка 3 посещается большее число раз чем положено. На листе Sheet1 такой проблемы нет.
Добавлю, что результат выводится в Immediate окно. Может быть кто подскажет, что необходимо добавить, чтобы цепочки с форматом 3-4-3-4 не попадали в результат. Файл прилагаю. Спасибо.
Добрый день. Есть набор цифр(допустим 1,2,3). Нужно получить все варианты строк состоящих из этих цифр, встречающихся от 0 до 2 раз, например: 1 2 3 11 22 33 1233 12233 1223 112233 и тд. Не пойму как подступиться к этой задаче. Необходимо реализовать это на VBA Может подскажете в какую сторону копать. Спасибо.
Добрый день. Есть таблица (табл.1) ~20к строк, где каждую строку необходимо сделать SUMIFS из таблицы (табл. 2) в ~70к строк по двум критериям. Таких SUMIFS будет около 20 (т.е. в 20 столбцов каждой строки табл.1 нужно сделать sumifs из табл. 2) Пытаюсь придумать наиболее производительный вариант. Сейчас пробую сделать просто через
Код
For i = 0 To 22417
DoEvents
arr(i) = WorksheetFunction.SumIfs(Worksheets("2").Range("K:K"), Worksheets("2").Range("I:I"), _
Worksheets("1").Cells(i + 10, 4).Value)
Next
'Вставляем массив одним действием в табл.1
[К сожалению, на один столбец уходит порядка 2 минут. Возникает вопрос, есть ли какой-то более удобный/оптимизированный вариант?
Добрый день. Есть вордовский документ с закладками (bookmarks), на эти закладки ведут перекрестные ссылки (cross-ref). Проблема в том, что данные в полях этих перекрестных ссылок отображаются в разном формате. Т.е. например, у меня в форматировании ворда поле настроено как Arial 10, но при обновлении поля (F9, чтобы туда встал текст из закладки. Предположим, у меня в закладке написано "Тестовое выражение") у меня слово Тестовое пишется Arial 10, а слово Выражение пишется Times New Roman 9. Предполагаю, что как-то неверна задана настройка поля. Прошу помочь, может кто-то сталкивался. Вот код моего поля: { REF ИмяЗакладки \h \* MERGEFORMAT }
Добрый день, есть задача сформировать документ Word из файла Excel. У меня есть рыба документа Word, в которой я сделал закладки (bookmarks), например [Name]. Так вот этот Name должен встречаться в word-документе несколько раз, поэтому я сделал перекрестные ссылки на него, с помощью Cross-Reference. Затем я обновляю поля bookmarks с помощью:
Код
wd.Bookmarks.Item(markName).Range.Text = x
После этого, как я понимаю, закладки из документа убираются, в результате слетают ссылки Cross-Reference и после нажатия ctrl+A - F9 или wd.Fields.Update у меня вместо нужного Name остается Error! Reference source not found.
Как лучше провернуть подобную операцию, чтобы все сработало? Спасибо.
Добрый день. Есть книга с макросами и пользовательской панелью (ribbon). После работы с файлом необходимо удалить эту панель и очистить книгу от макросов. 1. Для удаления (точнее скрытия) панели использую следующий момент: в XML коде моего excel-файла меня есть строка
Public Sub ClearFileForClient(ByRef rc As IRibbonControl)
HideMyRibbonTab
End Sub
Sub RibbonOnLoad(Ribbon As IRibbonUI)
Set Ribn = Ribbon
End Sub
Sub HideMyRibbonTab()
RibnTag = "HideTab"
If Not Ribn Is Nothing Then
Ribn.Invalidate
End If
End Sub
С помощью этой процедуры панель успешно скрывается.
2. Для удаления кода я сохраняю файл в xlsx формате.
Но возникает проблема, что при открытии свежесозданного xlxs файла вылезает ошибка "Cannot run the macro "RibbonOnLoad", because macroses is cleared" (что логично, макросы то из книги удалены).
Может кто сталкивался с подобной задачей и знает изящные варианты ее решения?
Добрый день. Есть XML-файлы, из которых парсятся данные (на c#) и записываются в csv-файл. В итоге получается 50 строк с одинаковыми разделителями. Но при вставке данных в Excel, корректно вставляются около 35, дальше почему-то разделители не срабатывают.
Может быть кто-то сможет подсказать, с чем это связано. Спасибо.
Я хочу, чтобы, чтобы А:А можно было заменить на что-нибудь другое, указав это в какой-нибудь ячейке на техническом листе, допустим в Z1,т.е. человек указывает в Z1 номер или адрес столбца (например, G:G) и в этой формуле меняется диапазон. Предполагаю, что надо использовать ДВССЫЛ, но как - не пойму. Были мысли в духе
Добрый день. Есть открытая книга, в которой в формулах есть ссылки на сторонний документ в сети, вроде такой ='\path\DATA\[wsName.xlsm]Discription'!$E$13 Есть вторая открытая книга, например 1.0.xlsm. Я хочу заменить "\path\DATA\[wsName.xlsm]" на новый путь книги. Пытался делать так:
Код
For Each wb In Application.Workbooks
If wb.name Like "1.0*" Then
newAddress = wb.path & "\[" & wb.name & "]" 'Получаем ссылку
End If
Next
Dim ttt As String
ttt = "\\path\DATA\[wsName.xlsm]"
With ThisWorkbook.Worksheets(1).UsedRange
.Replace What:=ttt, _
Replacement:=newAddress, _
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=False
End With
Но не работает. Ничего не происходит. Пытался делать так, тоже не работает:
Причем, если вместо newAddress вписать путь открытой книги - все равно не работает. А если вместо newAddress вписать путь другой книги (которая не открыта), то все отработает нормально. Поэтому предполагаю, что это связано с тем, что данная книга открыта.
Отсюда вопрос, как можно исправить ситуацию? Или может быть вы подскажете хороший способо обновить все ссылки в формулах в книге на новый путь (новый путь - путь второй открытой(!!!) книги). Спасибо
Добрый день. Появилась проблема суммирования с помощью суммесли/суммеслимн, когда в критерии попадает число (текстовая строка из цифр) длинной в 25 символов. Видимо, в момент расчета формулы эта строка переводится в экспоненциальный вид и суммирование происходит некорректно. Буду благодарен советам, как обойти данную проблему. Пример с конкретикой прилагаю.
Добрый день. Была подобная тема (http://www.planetaexcel.ru/forum/index.php?PAGE_NAME=read&FID=8&TID=30214), но к сожалению она мне не до конца помогла. Необходимо подтянуть поле "Ключ" из другой таблицы по нескольким условиям (в примере их 2, на деле будет больше). Есть несколько условий: 1. Нельзя делать доп столбцы; 2. Колонки, которые являются критериями идут не подряд; 3. Нельзя использовать массивы (точнее можно, я сам это реализовал, но не хочется "грузить" файл и пытаюсь найти путь проще)
Пробовал функцию =БИЗВЛЕЧЬ(H2:J5;3;A3:A6&C3:C6), но, предполагаю, что "A3:A6&C3:C6" так она не работает. Возможно, кто-то сможет подсказать более изящный вариант, нежели массив. Файл-пример прикрепляю.
Добрый день. Пользовался поиском, нашел похожую тему (http://www.planetaexcel.ru/forum/index.php?PAGE_NAME=read&FID=8&TID=24364) , но, насколько я понимаю, она не подходит для моего случая, либо я не понял до конца ее. Итак вопрос: Имеется таблица, к примеру, 5 колонок. Необходимо с помощью формул реализовать следующую проверку: Для колонки3 может быть только одно значение в колонке 1, иначе в столбце 6 должно быть сообщение об ошибке.
Т.е. если в таблице несколько раз встречается НЕТ 222 (как на строках 3 и 7), то все хорошо. Если же встречается связка ДА 111 и НЕТ 111, то должна сработать проверка и вывестись "Ошибка".
Т.е. по номеру в колонке 3 может быть только один вариант в колонке 1. Хорошо: НЕТ 123 ДА 234 НЕТ 123 ДА 555
Плохо: НЕТ 444 - ошибка ДА 987 ДА 444 - ошибка НЕТ 567
Простите если плохо искал или плохо сформулировал. Спасибо за помощь.