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

Страницы: 1 2 3 4 След.
Какая функция окруляет так же как оператор Round в VBA?
 
Цитата
Jack Famous написал:
создавать надстройку ради одной функции - это, конечно, плохо
эльфийский работает, вручную переписал на русском, спасибо!
Какая функция окруляет так же как оператор Round в VBA?
 
Цитата
Jack Famous написал: применять ЕСЛИ с учётом  банковской специфики округления
Спасибо, эта статья и явилась первоосновой проблемы)
Пока самый просто вариант сделать надстройку с макросом новой функции и распространить ее по всем компьютерам компании. Не хотелось бы.
Какая функция окруляет так же как оператор Round в VBA?
 
Я попробовал 6: ОКРВВЕРХ.МАТ, ОКРВНИЗ.МАТ, ОКРУГЛ, ОКРУГЛВВЕРХ, ОКРУГЛВНИЗ, ОКРУГЛТ. Нужного результата нет. Что-то пропустил?
Какая функция окруляет так же как оператор Round в VBA?
 
Добрый день!
Мне нужно получить бухгалтерское (не математическое) округление в Excel с помощью функции. С этим прекрасно справляется оператор Round в VBA, но макросы использовать нельзя.
Подскажите функцию, которая дает тот же результат, что и оператор Round?

Спасибо!
Как получить имя родительского элемента в древовидной списке
 
Цитата
БМВ написал:
ну тогда так
Спасибо, посмотрю.

За ночь приснилось такое решение:
Код
For i = Application.WorksheetFunction.CountA(Columns(1)) To 2 Step -1
 If (Len(Cells(i, 3)) > 0) Then
   Call drawDown(i, Cells(i, 3))
 End If
Next i

Sub drawDown(startRow As Integer, counter As Integer)
Dim i As Integer
Dim curCell As Range

i = 1
Do
    Set curCell = Cells(startRow, 4).Offset(i, 0)
    If Len(curCell) = 0 Then
        curCell = Cells(startRow, 1)
        counter = counter - 1
    End If
    i = i + 1
Loop While counter > 0
End Sub
Как получить имя родительского элемента в древовидной списке
 
Спасибо за помощь.
При разборе функции нашел баг: если в ячейке С2 поставить значение 5, то в ячейке D14 должно проставляться значение 1, а фактически проставляется значение 7. Буду признателен, если подскажете, как это исправить.
Как получить имя родительского элемента в древовидной списке
 
Осознал свою ошибку, исправился
Как получить имя родительского элемента в древовидной списке
 
Оба решения, насколько я понял связаны с расположением элементов в столбце Caption. Но я их сам сместил для удобства при описании задачи. К тому же вложенных уровней может быть сколько угодно, гораздо больше 3.
Как получить имя родительского элемента в древовидной списке
 
Добрый день.
Помогите, пожалуйста, совсем что-то запутался, то ли рекурсия нужна, то ли вложенные функции.

Есть таблица, описывающая древовидную структуру. Детей и родителей в столбце Caption сместил для наглядности. В столбце Qty указано количество детей у текущего элемента. Нужно с помощью макроса заполнить столбец Parent Id, где указан Id родительского элемента.
Вроде задача на школу, а справиться не могу.
Экспорт из Word, не открывая файл
 
Цитата
Дмитрий(The_Prist) Щербаков написал:
oWordApl.ActiveDocument.Range().CopyWorksheets("Temp").Range("A1").PasteSpecial xlPasteAll
Вот это не стало работать, данные где-то по пути теряются.

За остальное спасибо, переделал так, чтобы Ворд открывался только один раз - на тестовых 25 файлах уменьшение времени обработки составило 65%.
Экспорт из Word, не открывая файл
 
Цитата
aequit написал:
Проблема интересна
Учитывая, что проблема интересна, всё-таки сделал образец файла
Код
Option Explicit
Const RowStart = 3
Const ColStart = 2

Dim objFSO As Object, objFolder As Object, objFile As Object

Sub workfile(filePath As String)
Dim wtemp As Worksheet
Dim wdb As Worksheet
Dim marsh As String
Dim tempstring As String, tempotdel As String, tempoper As String, tempcaption As String
Dim i As Integer
Dim startCell As Range

    Application.ScreenUpdating = False

    Set wtemp = Worksheets("Temp")
    Set wdb = Worksheets("БД")

    Worksheets("Temp").Cells.Clear
    
    On Error Resume Next

        loadfile (filePath)
        
        Set startCell = Worksheets("Temp").Cells.Find(What:="ЯкорьМакроса", After:=ActiveCell, LookIn:= _
        xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _
        xlNext, MatchCase:=False, SearchFormat:=False)
        
        If InStr(startCell.Offset(0, 1), "(") <> 0 Then
            wdb.Cells(RowStart + Range("TPCount"), ColStart + 1) = myTrim(Left(startCell.Offset(0, 1), InStr(startCell.Offset(0, 1), "(") - 1)) & ";" & myTrim(Mid(startCell.Offset(0, 1), InStr(startCell.Offset(0, 1), "(")))
        Else
            wdb.Cells(RowStart + Range("TPCount"), ColStart + 1) = myTrim(startCell.Offset(0, 1))
        End If
        wdb.Cells(RowStart + Range("TPCount"), ColStart + 2) = myTrim(startCell.Offset(1, 1))
        wdb.Cells(RowStart + Range("TPCount"), ColStart + 3) = myTrim(startCell.Offset(2, 1))
        If InStr(startCell.Offset(3, 1), "+") Then
            wdb.Cells(RowStart + Range("TPCount"), ColStart + 4) = myTrim(Left(startCell.Offset(3, 1), InStr(startCell.Offset(3, 1), "+") - 1)) & ";" & myTrim(Mid(startCell.Offset(3, 1), InStr(startCell.Offset(3, 1), "+")))
        Else
            wdb.Cells(RowStart + Range("TPCount"), ColStart + 4) = myTrim(startCell.Offset(3, 1))
        End If
        wdb.Cells(RowStart + Range("TPCount"), ColStart + 5) = myTrim(startCell.Offset(4, 1))
        wdb.Cells(RowStart + Range("TPCount"), ColStart + 6) = myTrim(startCell.Offset(5, 1))
        wdb.Cells(RowStart + Range("TPCount"), ColStart + 7) = myTrim(startCell.Offset(6, 1))
        wdb.Cells(RowStart + Range("TPCount"), ColStart + 8) = myTrim(startCell.Offset(7, 1))
        wdb.Cells(RowStart + Range("TPCount"), ColStart + 10) = filePath
        
        marsh = ""
        tempstring = ""
        tempotdel = ""
        tempoper = ""
        tempcaption = ""
        
        Set startCell = Worksheets("Temp").Cells.Find(What:="Якорь2", After:=ActiveCell, LookIn:= _
        xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _
        xlNext, MatchCase:=False, SearchFormat:=False).Offset(-2, 0)
        
        For i = 3 To 303
            If (startCell.Offset(i, 0) = "Ошибка") Then
                Exit For
            End If
            If (startCell.Offset(i, 1)) <> "" Then
                If tempoper <> "" Then
                    tempstring = tempotdel & "$" & tempoper & "$" & tempcaption & "@"
                    marsh = marsh & tempstring
                End If
                tempstring = ""
                tempotdel = myTrim(startCell.Offset(i, 0))
                tempoper = Format(CInt(startCell.Offset(i, 1)), "000")
                tempcaption = myTrim(startCell.Offset(i, 2))
            Else
                If (startCell.Offset(i, 0) <> "") Then
                    tempotdel = tempotdel & ";" & myTrim(startCell.Offset(i, 0))
                End If
                If (startCell.Offset(i, 2) <> "") Then
                    tempcaption = tempcaption & " " & myTrim(startCell.Offset(i, 2))
                End If
            End If
        Next i
        marsh = marsh & tempotdel & "$" & tempoper & "$" & tempcaption & "@"
        wdb.Cells(RowStart + Range("TPCount"), ColStart + 9) = marsh
        wdb.Cells(RowStart + Range("TPCount"), ColStart) = Range("TPCount") + 1

    
    wdb.Activate
    
    On Error GoTo 0
    
    Application.ScreenUpdating = True
    
End Sub

Sub loadfile(filePath As String)
Dim RngCopy
Dim oWordApl As Object
Dim oDocument As Object

    Application.ScreenUpdating = False
    Application.DisplayAlerts = False

    On Error Resume Next

    Set oWordApl = CreateObject("word.application")
    Set oDocument = oWordApl.Documents.Open(filePath)
    oWordApl.Visible = True
    
     With oWordApl.ActiveDocument
        Set RngCopy = .Range(0, .Characters.Count)
        RngCopy.Select
        oWordApl.Selection.Copy
    End With

    With Worksheets("Temp")
        .Select
        .Range("A1").Select
        .Paste
    End With
    
    oWordApl.ActiveDocument.Close
    oWordApl.Visible = False
    oWordApl.Quit
    Set RngCopy = Nothing
    Set oDocument = Nothing
    Set oWordApl = Nothing
    
    On Error GoTo 0
    
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
End Sub

Sub Get_All_File_from_SubFolders()
Dim sFolder As String

    sFolder = chooseFolder
    
    If sFolder <> "" Then
    
         sFolder = sFolder & IIf(Right(sFolder, 1) = Application.PathSeparator, "", Application.PathSeparator)
    
            Application.ScreenUpdating = False
            Set objFSO = CreateObject("Scripting.FileSystemObject")
            GetSubFolders sFolder
            Set objFolder = Nothing
            Set objFSO = Nothing
            Application.ScreenUpdating = True
    
    End If
      
End Sub

Private Sub GetSubFolders(sPath)
    Set objFolder = objFSO.GetFolder(sPath)
    For Each objFile In objFolder.Files
        workfile (objFile.path)
        ThisWorkbook.Save
    Next
    For Each objFolder In objFolder.SubFolders
        GetSubFolders objFolder.path & Application.PathSeparator
    Next
End Sub

Function chooseFolder()
Dim fd As FileDialog
Dim vrtSelectedItem As Variant
Dim path As String
 
 Set fd = Application.FileDialog(msoFileDialogFolderPicker)
 With fd
    .ButtonName = "Выбрать"
    If .Show = -1 Then
        For Each vrtSelectedItem In .SelectedItems
            path = vrtSelectedItem
        Next vrtSelectedItem
    Else
        Exit Function
    End If
 End With
 Set fd = Nothing
 
 If path <> "" Then
    chooseFolder = path
 Else
    chooseFolder = ""
 End If
End Function

Function myTrim(text As String) As String
  text = Trim(text)
    Do While InStr(text, "  ")
      text = Replace(text, "  ", " ")
    Loop
  myTrim = text
End Function

Sub aloneFile()
Dim filePath As String

    filePath = Application.GetOpenFilename
    If filePath <> "" Then
        workfile (filePath)
    End If
End Sub
Файл excel не влез по размеру, выкладываю код.
.
Изменено: Amberalex - 14.02.2020 12:55:11
Экспорт из Word, не открывая файл
 
К сожалению, информация закрытая, поэтому без примеров. Но описать могу. Вордовские файлы по сути состоят из табличек, с помощью которых сделан аналог рамки ЕСКД. Поэтому при копировании в excel сохраняется правильная разбивка на ячейки, и я могу правильно распарсить полученные данные,чтобы провести с ними работу. Поэтому непонятно, как скопируется в txt, буду проверять.
Экспорт из Word, не открывая файл
 
Цитата
Hugo написал:
Вообще экспорт производит тот, кто экспортирует.А импорт - тот кто импортирует
Ну конечно импорт, после рабочего дня уже не чувствуешь разницы))

Т.е. после каждого файла закрывать не все приложение Word, а только файл? Спасибо, попробую. А способа вообще без открытия нет?
Экспорт из Word, не открывая файл
 
Добрый день.
Мне нужно экспортировать данные из файлов doc в табличку excel. Я написал макрос, который по очереди открывает файлы doc, копирует оттуда все содержимое на лист таблицы, закрывает файл doc и обрабатывает скопированное. Таким образом, на один файл уходит около 10 секунд. И все бы хорошо, но файлов у меня 40000. По прикидкам обработка всего массива займет около недели)

Как я заметил, основное время тратится именно на открытие и закрытие файла. Вопрос: можно ли скопировать содержимое файла, не открывая его?
Обработка событий динамически создаваемых элементов управления пользовательских форм
 
Всем спасибо, решилось с помощью Unload UserForm
Обработка событий динамически создаваемых элементов управления пользовательских форм
 
Классы помогли, но теперь возник ещё один вопрос.

Событие change для textbox срабатывает при открытии формы. Я это переживу, но оно накапливается. Т.е. если форму закрыть, а потом снова открыть, оно произойдет 2 раза, потом 3 и т.д. Как этого избежать? Как вообще правильно закрыть форму (я использую Hide и сомневаюсь)?
Обработка событий динамически создаваемых элементов управления пользовательских форм
 
Цитата
Sanja написал:
Используйте  КЛАССЫ
Ох, прямо пример по моему случаю, большое спасибо!

Цитата
Юрий М написал:
А зачем создавать себе трудности с программно созданными контролами? Просто нарисуйте их один раз )
В этом месяце их 50, в следующем 30, а потом 92... А табличку хочется универсальную)
Обработка событий динамически создаваемых элементов управления пользовательских форм
 
Добрый день.
Я создал форму и на форме в цикле создаю 50 textbox'ов.
Помле этого я хочу написать функцию, которая будет считать сумму значений во всех этих textbox и выводить ее на экран. Обновление должно происходить после выхода из textbox, т.е. события change.

Подскажите, пожалуйста, где и как прописать событие change для textbox, сгенерированных программно?

Спасибо
Как сделать, чтобы имена не были видны над ячейками при масштабе менее 40%
 
Я тоже не нашел. А кто-нибудь нашел?
Как сделать, чтобы имена не были видны над ячейками при масштабе менее 40%
 
Добрый день.
Есть файл, на котором во весь лист синяя надпись. Хочется эту надпись убрать.
В именах нашел скрытое имя, которое радостно удалил и думал, что проблема решена, однако здесь http://www.planetaexcel.ru/forum/?PAGE_NAME=read&FID=8&TID=24935 вычитал, что имена FilterDatabase удалять не стоит во имя работы автофильтров.
Как же без этого убрать надпись? И вообще, просветите, пожалуйста, откуда она берется?
Различный результат при ручном и программном экспорте в CSV, Проблемы экспорта в csv
 
kalbasiatka, вопрос про одноименные файлы решился сам собой, я, к сожалению, не уловил, в какой момент. Сейчас всё работает отлично.

ZVI, ваш способ с отдельным макросом тоже работает, спасибо
Различный результат при ручном и программном экспорте в CSV, Проблемы экспорта в csv
 
kalbasiatka, спасибо, все работает. Только вопрос: если в директории уже есть файл с таким именем, то макрос вылетает с ошибкой. Как ее избежать?

ZVI, спасибо, но не помогло.
Различный результат при ручном и программном экспорте в CSV, Проблемы экспорта в csv
 
Хорошо, предлагаю название "Различный результат экспорта в CSV"
Различный результат при ручном и программном экспорте в CSV, Проблемы экспорта в csv
 
Добрый вечер!
Возник вопрос экспорта одного листа. Если я из Книги 0 вручную экспортирую 1 лист в новую книгу и сохраняю в формате csv (разделители - запятые), то получается Книга 1. Если же я делаю это с помощью макроса, то получается вариант Книга 2.
Где я сурово ошибся и как получить с помощью макроса первый вариант?
Активация Screen Updating, Вопрос по включению обновления экрана
 
RAN, не понял
Активация Screen Updating, Вопрос по включению обновления экрана
 
RAN, хм, я вроде делаю именно по этой инструкции. Монструозное у меня форматирование шапки, но как-то не получилось сократить. Не спорю, что возможны варианты элегантнее, но не шмогла я, не шмогла... )
Активация Screen Updating, Вопрос по включению обновления экрана
 
The_Prist, стараюсь оптимизировать при этом, не выключать ScreenUpdating, где не требуется.

AlexTM,

Цитата
AlexTM написал:
у Вас, если не создать таблицу, то можно вызывать другие процедуры
Да, так задумано. Просто изначально файл будет распространяться с уже отрисованной таблицей, так что поломать будет сложнее. Надеюсь... ))
Активация Screen Updating, Вопрос по включению обновления экрана
 
AlexTM, вот такой:
Код
Application.ScreenUpdating = False 
For i = 1 To TeamQuant - 1
        Call AddRow
        Application.ScreenUpdating = False
    Next i

'----------------------
Sub AddRow() 'Добавление пустой строки
Dim LastRow As Range
    
    Application.ScreenUpdating = False
    Call UpdateVar
    Application.ScreenUpdating = False
    Set LastRow = Range("Cellar").Offset(-1, 0).Resize(1, FieldLeft + (QuestQuant + 3) * RoundQuant + 3) 'Выделяем последнюю строку таблицы
    With LastRow
        .Copy
        .Offset(1, 0).Insert Shift:=xlDown
        .Offset(0, 0).Borders(xlEdgeBottom).Weight = xlThin
        .Offset(1, 0).Resize(1, 4).ClearContents 'Очищаем значение только что вставленной строки
    End With
End Sub
Активация Screen Updating, Вопрос по включению обновления экрана
 
Решил проблему на 90%. В принципе уже устраивает, чисто теоретический вопрос: можно ли полностью исключить мерцание? Осталось оно только на добавлении новых строк и заметно, когда их больше 40. Или это уже зависит от быстродействия железа?
Изменено: Amberalex - 17.11.2015 16:27:18
Активация Screen Updating, Вопрос по включению обновления экрана
 
JayBhagavan, спасибо
Страницы: 1 2 3 4 След.
Наверх