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

Страницы: 1
XMLDOM. Есть ли возможность добавить node в виде строки в корень xml
 
Пытаюсь сделать добавление noda таким образом
Например имеем xml такого вида <Root><Row><X>1</X><Y>f</Y><Row></Root>
Хочу добавить новый Row
Код
    Dim xmlDoc  As DOMDocument
    Dim nodRoot As IXMLDOMElement
    Dim nodChild As IXMLDOMText
    
    Set xmlDoc = New DOMDocument
    xmlDoc.setProperty "SelectionLanguage", "XPath"
    xmlDoc.async = False
    xmlDoc.Load ("D:\xmlname.xml")
    
    Set nodRoot = xmlDoc.getElementsByTagName("Root").Item(0)
   
    Set nodChild = xmlDoc.createTextNode("<Row><X>2</X><Y>r</Y>")
nodRoot.appendChild nodChild

Получаю в результате: <Root><Row><X>1</X><Y>f</Y><Row>&lt;Row&gt;&lt;X&gt;2&lt;/X&gt;&lt;Y&gt;f&lt;/Y&gt;&lt;Row&gt;</Root>
Прошу подсказать как можно конвертировать строку в нод для корректного добавления. Есть ли такая возможность?
Или нужно последовательно собирать нод Row, либо через клонирование и изменение?
Как открыть xlsm-файл функцией GetObject с выключением макросов
 
Собственно сабж. Открываю файл и в итоге вижу в дебагере вызов обработчика открытия книги в открываемом файле. Что мне совсем не нужно.
Как-то можно добиться, чтобы макросы не запускались? Получится ли это через GetObject. Использую её, чтобы файл открывался фоново
Изменено: Vargen - 22.10.2022 03:14:46
Можно ли получить индекс строки в Combobox UserForm по строке?
 
Собственно сабж. Задача заключается в том, чтобы выяснить входит ли произвольная строка в Combobox. Это можно бы было проверить, определив индекс этой строки в Combobox. Или такового метода в данном компоненте нет и единственный путь - это поиск строки в цикле?
Изменено: Vargen - 14.05.2018 11:51:03
Использование файлового потока FSO без иннициализации объекта, ведёт к утечке памяти?
 
В определённые моменты работы за компьютером текстовые файлы около 60, 90 и 190 МБ при помощи FSO либо читаются, либо не читаются. А именно, вчера вечером читался только файл около 60 МБ, а сегодня после вкл/выкл компьютера прочитался и файл 190 МБ. Чтение в одном приложении осуществлялось таким образом:
Код
With New FileSystemObject
  txt=.OpenTextFile(sPath).ReadAll
End With

Быть может в этом причина? Тут память используется, но принудительно не освобождается. Или не на то грешу? Ведь в течение дня я наталкивался на ошибки с процедурами, где использовался тот же FSO, и порой прерывал работу макросов с помощью диспетчера задач. Может быть в этом собака зарылась?
Или, например, можно ли делать вот так:
Код
Public Sub ReplaseFileContent(sFPSource$, sFPDestination$)
    With New FileSystemObject
        .CreateTextFile(sFPDestination, True).Write .OpenTextFile(sFPSource, Forreading).ReadAll
    End With
End Sub

Процедура работает нормально, но нет ли тут утечки памяти?

Изменено: Vargen - 12.04.2018 07:19:56
Как открыть файл в текстовом редакторе на определённой строке с помощью VBA?
 
Вот написал такую функцию, которая открывает файл в Notepad++.
Код
Function OpenFileInNotepadpp(sPath$) As Boolean
On Error GoTo ErrorHandler
OpenFileInNotepadpp = False
    If fsoFileExists(sPath) Then
        Shell Environ("ProgramFiles") & "\notepad++\notepad++.exe " & sPath, vbNormalFocus
        OpenFileInNotepadpp = True
    Else
        MsgBox "Файл """ & sPath & """ не найден", vbExclamation
    End If
GoTo Ends:
ErrorHandler:
    MsgBox Err.Description & "(" & Err.Number & ");" & _
        vbNewLine & "Источник ошибки: " & Err.Source & _
        vbNewLine & "Процедура: OpenFileInNotepadpp"
  OpenFileInNotepadpp = False
Ends:
End Function
Но этого недостаточно и хотелось бы, чтобы после открытия курсор перемещался на определённую строку. Как этого добиться?
Получение/присвоение значения ячейки по относительным и абсолютным координатам. Что быстрее?
 
Дано: координаты ячейки (r,c), и координаты этой ячейки (x,y) относительно другой ячейки, по которой заведомо инициализирован объект R. Будет ли разница в скорости между операциями: Cells(r,c)=10 и R.offset(x,y)=10? Или сии операции в случае их многократного повторения одинаково затратны по времени?
Изменено: Vargen - 20.11.2017 12:53:19
Как избавиться от сообщения Excel
 
Вот собственно сообщение:

выскакивает при закрытии рабочей книги и уничтожении объекта Workbook, которая была открыта при помощи GetObject
Как иннициализировать объект типа Workbook для книги открытой в ДРУГОМ экземепляре Excel?
 
Здесь обнаружил полезную функцию. Благодарю за это Игоря).  К сожалению, она не работает в обозначенном в названии темы случае. Данный случай возможен, если открыть книгу в новом экземпляре Excel и тогда она недоступна для функции GetObject. Можно ли сделать сабж или единственный выход - прикрутить в макросе сообщение: "книга открыта в другом приложении, для продолжения работы закройте это приложение". Либо выполнить работу за пользователя и снести все открытые эксели, в том числе хозяина макроса?
Изменено: Vargen - 14.11.2017 07:23:23
Как узнать место ошибки в коде при обработке ошибок через On Error GoTo
 
Без обработки ошибок их источники выделяются. Хотелось бы уже настроить обработчики ошибок в процедурах, но и не лишиться указанной функции, а получать координаты ошибочных участков кода
Реализация технологии предложения вариантов строк при вводе на подобие T9 или поисковых запросов Яндекс при помощи ListBox ActiveX
 
Для обозначенной в теме цели хорошо подходит ListBox, тем более требуется выбор из заведомо установленного списка. Свойству MatchEntry присваивается 1 (fmMatchEntryComplete). После этого, когда ListBox в фокусе, при вводе данных с клавиатуры в окне ListBox выделяется строка, первые символы которой совпадают с вводимой последовательностью. Один недостаток, выделение появляется внизу видимой части списка. Как добиться, чтобы выделение появлялось в вверху видимой в окне ListBox части списка?
Пример во вложении
Как прочитать бинарный файл в строку при помощи FileSystemObject, не взирая на нулевые байты ?
 
Делаю так
Код
Public Function GetFilePath() As String
On Error GoTo ErrorHandler
    With Application.FileDialog(msoFileDialogOpen)
        .ButtonName = "Выбрать"
        .Title = "Выберите файл"
        If .Show <> -1 Then Exit Function
        GetFilePath = .SelectedItems(1)
    End With
    
GoTo Ends:
ErrorHandler:
  'MsgBox "Вы ничего не выбрали!"
  GetFilePath = ""
Ends:
End Function

Sub Chitalka()
Const ForReading = 1
Dim sFP$, Ss() As String, i&, text$
Cells.Clear
sFP = GetFilePath
If sFP <> "" Then
    With New Scripting.FileSystemObject
        With .OpenTextFile(sFP, ForReading)
            text = .ReadAll
            'Ss = Split(text, vbNewLine)
        End With
    End With
    [A1] = text
'    For i = 0 To UBound(Ss)
'        Cells(i + 1, 1) = Ss(i)
'    Next i
End If
End Sub

Текст считывается до первого попавшегося нулевого байта. Как прочитать все байты?
Изменено: Vargen - 13.07.2017 08:54:18
Возможно ли передавать ссылки на объекты ActiveX в качестве параметров?
 
Собственно сабж. Если это возможно, то каким образом это сделать?
Например, есть две процедуры:

Код
Sub HideListBox(ByRef LstBx As ListBox)
If LstBx.Visible Then LstBx.Visible = False Else LstBx.Visible = True
End Sub

Sub HideListBox(ByRef Lbl As Label)
If Lbl .Visible Then Lbl.Visible = False Else Lbl.Visible = True
End Sub

Sub HideButton(ByRef Bttn As CommandButton)
If Bttn.Visible Then Bttn.Visible = False Else Bttn.Visible = True
end sub


Для проверки добавляю три кнопки, Label1 и ListBox1 и пишу следующие три обработчика кликов кнопок

Код
Private Sub CommandButton1_Click()
HideButton CommandButton2
End Sub

Private Sub CommandButton2_Click()
HideListBox ListBox1
End Sub

Private Sub CommandButton3_Click()
HideLabel Label1
End Sub


Нажав на кнопки вижу, что HideButton работает, а остальные две процедуры дают ошибку 13. Почему у ListBox и Label несоответсвие типов есть, а у CommandButton нет? Какие типы должны быть у ListBox1 и Label1, если взятые не верны?
Как передать ячейке значение ошибки через VBA?
 
Необходимо, чтобы в ячейку было записано, например, значение #ЗНАЧ!. Функция IsError, при этом, должна давать True.
События нажатия клавиш на листах
 
Вот это не работает:
Код
Private Sub Workbook_Open()
Application.OnKey "{ESC}", "Proc1"
End Sub

Sub Proc1()
ThisWorkbook.Sheets("Лист3").Select
End Sub

Выскакивает такое сообщение:

Что не так?
Изменено: Vargen - 24.10.2016 21:03:30
Как создать объект открытой рабочей книги в VBA Excel?
 
Как известно, для удобства оперирования данными рабочей книги бывает целесообразно создать объекта типа Workbook:
Например Dim wb as Workbook.
Как инициализировать объект wd для закрытой или не существующей книги - понятно:
- в первом случае Set wb = Workbooks.Open(ИмяКниги)
- во втором случае Set wb = Set oWbk = Workbooks.Add()
Но бывают случаи, когда книга уже открыта. Каким образом инициализировать её объект? Неужели лишь путём переоткрытия?
По поводу формулировок вопросов и ответов.
 
Как думаете, если кто-то не понял вопрос, значит ли это, что вопрос сформулирован неправильно?   И стоит ли, основываясь на своих заблуждениях, придумывать свои более понятные версии вопроса и давать на них ответы, скатываясь в оффтоп. Например, как в теме "VBA. Как узнать номер последней строки объекта класса Range, отсчитвываемый от первой ячейки листа?"
Изменено: Vargen - 18.07.2016 11:28:41
VBA. Как узнать номер последней строки объекта класса Range, отсчитвываемый от первой ячейки листа?
 
Собственно сабж.
Пробовал вот так:
Код
Dim LastRow as long
Dim Rng as Range
Dim Addr$
Addr = "A1:B12,C8:D14"
Set Rng = Range(Addr)
LastRow= Rng.Cells(Rng.Cells.Count).Row
Результат неправильный.
Есть идея выделить последний номер из строки адреса Rng, но данный вариант сработает, если последний номер в строке адреса действительно является номером последней строки листа, охваченной объектом Rng. Более универсальный вариант. Извлечь все номера строк и определить максимальной. Но может быть есть более изящный способ?
Изменено: Vargen - 18.07.2016 07:39:27
Страницы: 1
Loading...