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

Страницы: 1 2 3 След.
Обращение к Excel из Word
 
Wiss, Дмитрий(The_Prist) Щербаков, немного поэкспериментировал, создал несколько книг(две руками, две этим же макросом), наполнил первый столбец разным количество данных, и обратился к Exсel без персонализации книги и страницы вот так:
Код
x = objExcel.Cells(objExcel.Rows.Count, 1).End(-4162).Row

..в итоге код срабатывает применительно к тому экземпляру приложения, который был создан последним, т.е. он по-умолчанию является активным.

Обращение к Excel из Word
 
Wiss, Дмитрий(The_Prist) Щербаков,  Спасибо, понял!
Обращение к Excel из Word
 
Спасибо, Select-ы не нужны, забыл убрать,  но я пробовал и по-разному, не получается:
Код
rs = objExcel.ActiveWorkbook.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row
rs = objExcel.ActiveWorkbook.ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row

Wiss,Спасибо, но заполнение циклов просто для примера, чтобы руками не заполнять столбец, там не суть, мне важно узнать номер последней непустой строки первого столбца. Может и другие есть способы, но прям интересно почему не получается извне?
Обращение к Excel из Word
 
Всем доброго, не могу понять, почему не выходит получить доступ к функции Cells из Word, и узнать номер последней занятой строки, в первом столбце?
Код
Sub Test ()
Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = True
objExcel.Workbooks.Add (1)
For i = 1 To 5
objExcel.Cells(i, 1).Select
objExcel.Cells(i, 1) = 12
objExcel.ActiveCell.Offset(i, 1).Select
Next i
rs = objExcel.Cells(Rows.Count, 1).End(xlUp).Row
objExcel.Quit
Set objExcel = Nothing
End Sub
Сложение элементов массива по условию
 
Kuzmich,Спасибо большое, идеально!
Сложение элементов массива по условию
 
Всем доброго. Имеется массив с данными такого типа ДлинаКабеля-ЖильностьКабеля, пытаюсь найти и вывести в msgbox все суммы одинаковых по жильности кабелей. Какие условия нужно добавить для цикла, чтобы он работал, пока не будут найдены все одинаковые значения?

Мои потуги:
Код
Sub Summ()
Dim ДК, ДК0, Сумма As Long
Dim ЖК, ЖК0 As String

ReDim Arr(0 To 3) As String
Arr(0) = "500-1x2"
Arr(1) = "100-1x2"
Arr(2) = "200-7x2"
Arr(3) = "300-7x2"

For i = LBound(Arr) To UBound(Arr)
s = s + 1
If S = 1 Then
        ДК = Left(Arr(i), InStr(1, Arr(i), "-") - 1) 'получаем длину
        ЖК = Right(Arr(i), InStr(1, Arr(i), "-") - 1) 'получаем жильность
        Сумма = Сумма + ДК
Else
        ДК0 = Left(Arr(i), InStr(1, Arr(i), "-") - 1)
        ЖК0 = Right(Arr(i), InStr(1, Arr(i), "-") - 1)
            If ЖК0 = ЖК Then
            Сумма = Сумма + ДК0
            End If
End If
Next i
MsgBox "Сумма кабеля жильностью" & ЖК & " - " & Сумма
End Sub
Сохранить в PDF на vbs
 
ZVI, Владимир, спасибо, отлично работает. Есть ли инструменты, способные конвертировать файлы типа .png, .jpg, и ещё забыл про .dwg и .dxf(автокадовские)?
Сохранить в PDF на vbs
 
Описываю словами: задача пересохранять  в формат PDF файлы Excel, Word, .png, .jpg! Чтобы не заходить в каждое приложение отдельно, планировал скрипт загрузить в меню правой кнопки мыши(ранее уже так делал на другом скрипте), выделяешь N-ое количество файлов в папке, правой кнопкой мыши и активируешь скрипт.
БМВ, чем это делать не принципиально, если есть другие универсальные инструменты, киньте ссылку, я начал с того с чем хоть как-то знаком, с vba.
Цитата
БМВ написал:
Но открыть файлы придется, даже если это будет в фоновом режиме.
да, так конечно же и нужно, чтобы не маячило перед глазами.
Сохранить в PDF на vbs
 
Написал небольшой макрос сохранения файла в pdf формате
Код
Sub r()
Dim PathX, PDFname
On Error Resume Next
PathX = ActiveWorkbook.Path
SetXXX = CreateObject("Scripting.FileSystemObject")
PDFname = XXX.GetBaseName(ActiveWorkbook.Name)
ChDir PathX
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=PDFname, Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True
End Sub

Затем решил прибегнуть к приему, который на форуме мне показывали ранее, перевести код на vbs и добавить скрипт в меню правой кнопки мыши, получилось так
Код
Dim XL
Set XL = GetObject(, "Excel.Application" )
XL.ActiveSheet.ExportAsFixedFormat 0, , 0, True, False,,,True

Данный скрипт отрабатывает, но только при открытом файле, т.е. я запускаю файл, который нужно пересохранить и потом перетаскиваю его на иконку скрипта и он срабатывает.

Как модифицировать код, чтобы скрипт воспринимал группу файлов, без открытия последних? и можно ли средствами vbs пересохранять в pdf - картинки?

пробовал так, но у данного объекта нет таких свойств
Код
With CreateObject("Scripting.FileSystemObject")
    For Each X In wscript.arguments
      .ExportAsFixedFormat 0, , 0, True, False,,,True
    Next
  End With
При выгрузке в Excel содержимое ячейки обрезается на 255-м символе
 
Цитата
Jack Famous написал:
Далее: при обрезании строки вставляется троеточие (что напоминает вот  это  решение). Именно троеточие, а не 3 точки. Это 1 символ с кодом 133.
Символ "троеточие" в Alt-кодировке выглядит как - Alt+0133. Но после вставки в документ, поиском по листу, выясняю, что символ троеточия в смете и альт-кодовский символ - разные(потому что это именно три точки). Также наткнулся на то, что в ячейках сметы, где наименование обрезано по 255-му знаку и стоит троеточие, правой кнопкой - Выбрать из раскрывающего списка, есть заполненные поля. Ищу в инете всё что связано с этим списком и натыкаюсь на функцию Проверка Данных, а в ней....опа...Тип Данных - Длина текста, возможно это и накладывает ограничение  в 255 символов?!!!. Дальше непонятно что делать с этой информацией)



Изменено: Дмитрий_DimAs - 17.09.2019 12:51:19
При выгрузке в Excel содержимое ячейки обрезается на 255-м символе
 
Да и к тому же, как вы сказали, макрос выполняет начинку цифрами, а все текстовые наименования расценок следовательно вставляются самой программой(так как в книге этого текста нет, я проверил по всем скрытым листам), в этом месте и проблема. Значит всё упирается снова в разработчиков программы, с коими я уже общался(
При выгрузке в Excel содержимое ячейки обрезается на 255-м символе
 
Дмитрий(The_Prist) Щербаков, в самой программе, путем нажатия кнопки Выпуск в excel. Сама форма выпуска настраиваемая, облазил на несколько раз все настройки, есть одна галочка теоретически влияющая на выпуск, но её выбор ничего не меняет, в итоге.
Изменено: Дмитрий_DimAs - 16.09.2019 09:56:29
При выгрузке в Excel содержимое ячейки обрезается на 255-м символе
 
Jack Famous, спасибо большое за участие. По ссылке почитал, да, что-то похожее есть по символу "...", но не более. Но вот насчёт несвязанности макроса с данной проблемой - не уверен. У меня мысль, что макрос при вставке всего текста, таким образом задает формат вставляемых данных, что Excel вынужденно приходится их обрезать, прижигая культю "троеточием")
При выгрузке в Excel содержимое ячейки обрезается на 255-м символе
 
Всем доброго, есть ли у кого догадки, с чем связан такой баг: использую сметную программу ПК РИК, при выгрузке сметы в Excel, в него вшит огромный макрос, который формирует и создаёт всю начинку сметы, так вот текстовое наименование расценки помещается в одну ячейку и, на 255-м символе обрезается(см.файл). Примечательно, что в 2010 Excel подобный баг отсутствует, но использовать 2010 офис не имеем возможности. Обращение в техподдержку РИК ни к чему не привело, сначала врали, что первый раз об этом слышат, а потом выяснилось, что проблема старая, но как её лечить они не знают и вообще переходите на более новый офис. Я уверен, что решение есть, просто им лень, и,вероятно большее количество пользователей всё же на новых версиях офиса(живут без проблем).
Изменено: Дмитрий_DimAs - 13.09.2019 11:00:45
Удаление последнего символа (перевод строкаи) в многостроковом TextBox
 
Юрий М, Спасибо, работает!
Удаление последнего символа (перевод строкаи) в многостроковом TextBox
 
Юрий М,Да, теперь понял, попытался реализовать, пробно, на событии - клик по кнопке, пока не получилось(с помощью предложенных участниками вариантов).
Удаление последнего символа (перевод строкаи) в многостроковом TextBox
 
vikttur, Ігор Гончаренко, Спасибо за помощь,но почему то символ перекочевывает дальше! Создал 2 текстбокса, пытаюсь вставить во второй - очищенный текст, но символ переноса остаётся. Файл примера приложил.
Изменено: Дмитрий_DimAs - 10.06.2019 21:10:52 (приложил файл)
Удаление последнего символа (перевод строкаи) в многостроковом TextBox
 
Ігор Гончаренко,совершенно не облом, как только добрался до компа - отвечаю.
Юрий М, не понял про события, можно я процесс объясню, Возможно так, будет более понятна моя задача? создал TextBox(multiline-true), по задумке пользователь вводит в него данные построчно, не всегда строка заполняется на 100% ширины TextBox-а(автоматический переход на след.строку), поэтому перемещение по строкам происходит через(Ctrl+Enter, иного сочетания не нашёл). По ходу стало понятно, что частенько будет возникать ситуация, что переход осуществлен, но информацию вводить не стали, и следовательно данный символ, теперь я сомневаюсь, что это Chr(13), попадает из TextBox в форму заполнения(Word).
Удаление последнего символа (перевод строкаи) в многостроковом TextBox
 
Всем доброго! Как удалить символ перевода строки - Chr(13), в multiline Textbox, при условии, что данный символ один в строке(ситуация когда нечаянно сделали перевод строки и кроме этого символа в строке нет больше информации).
Изменено: Дмитрий_DimAs - 10.06.2019 00:00:39
Как получить значение поля Описание
 
Я забыл указать, что на скрине мой домашний комп, а речь велась про рабочий. Теперь всё ясно, спасибо Вам.
Как получить значение поля Описание
 
Большое спасибо, вы как всегда меня выручаете в первых рядах, это то что я и просил. Только что наткнулся ещё на один вариант, выдаёт полное ФИО, но я не пойму откуда он его берет!
Код
Sub asdas()
Set SI_ = CreateObject("ADSystemInfo")
Set Un_ = GetObject("LDAP://" & SI_.UserName)
UZ_ = Un_.DisplayName
Debug.Print UZ_
End Sub
Изменено: Дмитрий_DimAs - 27.04.2019 21:46:37
Как получить значение поля Описание
 
Всем доброго! Пытаюсь получить значение поля Описание(см.скриншот). Объясню зачем, может кто знает другой путь. Имеется рабочая сеть на несколько сотен машин, все учетные записи имеют вид -  фамилия.имя, но на латинице! В поле Описание - также присутствует фамилия, уже на кириллице, вот она то мне и нужна - кириллическая форма фамилии юзера. Забавно, что все остальные поля легко добываются таким кодом:
Код
CreateObject("WScript.Network").UserName
CreateObject("WScript.Network").ComputerName
CreateObject("WScript.Network").UserDomain
Изменено: Дмитрий_DimAs - 27.04.2019 21:21:44
Подсчет количества строк в TextBox
 
БМВ, Спасибо большое, то что нужно!
Подсчет количества строк в TextBox
 
Всем доброго! На форме есть TextBox, в него планируется вносить данные построчно, и по условию если количество строк больше 8, уменьшать размер шрифта на шаг в меньшую сторону. Нашёл код для VB, крутил его, но так и не осилил, выдаёт ошибку на переменной hwnd. Для начала попытался по нажатию кнопки вывести в Label1 кол-во строк и символов - получилось! А вот количество линий - не выходит посчитать. Причем количество строк считает корректно, только при переводе на новую строку посредством Ctrl+Enter(поэтому посчитать надо количество линий, а не строк)
Код
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Integer, ByVal lParam As Any) As Long
Const EM_GETLINECOUNT = 186
 
' Подсчет строк
Public Function Strok() As Long
Strok = UBound(Split(TextBox1.Text, vbNewLine)) + 1
End Function
 
' Подсчет символов
Public Function Simvols() As Long
Simvols = Len(TextBox1.Text)
End Function
 
Private Sub CommandButton1_Click()
Lin = SendMessage(TextBox1.hwnd, EM_GETLINECOUNT, 0&, 0&)
'Вывод происходит в Label:
Label1.Caption = "Кол-во строк:" & " " & Strok & " " & "Кол-во символов: " & Simvols & " " & "Кол-во линий: " & Lin
End Sub
Как объединить 27000 файлов для поиска по содержимому
 
Цитата
sokol92 написал: Посмотрите внимательно на "Параметры индексирования" Windows... Так можно и уточнить поиск.
Смотрел/делал, согласен - встроенный поиск, по содержимому, в проиндексированных директориях невероятно быстрый, но он выдаёт, как верно подметил БМВ, список результатов, которых может быть десятки и сотни. Также, у данного поиска есть слабое место - разделительные знаки(дефис, запятая, точка), даже заключение в двойные кавычки(которые якобы должны помочь) - не помогает, он ищет всё что до разд-го знака и после.

Цитата
Alec Perle написал:  сметная программа использует базы данных в работе, может копать в этом направлении?
Там довольно мудрёно организованно, находил некие файлы формата .dbx, но извлеченные из них данные сложно назвать сметой)

Цитата
БМВ написал: ничего нормального на ум не приходит,  кроме как импорта данных смет в нормальную базу...
Я конечно смотрел в эту сторону, но ничего путнего не нашёл, киньте ссылку как это делается, если есть.

Цитата
vikttur написал:  в среднем не более 38 строк в одном файле... А в показанной смете более 1000 строк
И это ещё не самая большая смета! Идеальный поиск, имхо, аналог родному, поэтому я и пытаюсь найти пути объединения в один файл, на листе да миллион строк, но ведь ещё есть рядом место) и соседние листы. Макрос который объединяет информацию с указанных листов в один(тупо копирует инфу со всех листов и вставляет её под последней заполненной строкой на первом листе):
Код
Sub UnionPages()For L = 2 To Sheets.Count
Sheets(L).Range("A1:Z" & Sheets(L).UsedRange.Rows.Count + 1).Copy Sheets(1).Range("A" & Sheets(1).UsedRange.Rows.Count)
Next
End Sub
В принципе, если долго мучится, этим макросом можно сделать что-то примерно похожее на моё видение) Но перед этим необходимо очистить от скрытых строк все файлы, количество скрытых строк в файле примера - 3000 из почти 4000.
Изменено: Дмитрий_DimAs - 03.02.2019 12:00:43
Как объединить 27000 файлов для поиска по содержимому
 

Всем привет

Возникла несколько месяцев назад задача, периодически пытался решить её различными подходами, на данный момент ни одна из попыток не дала желаемого результат, решил-таки обратится к сообществу.
Итак по-порядку.

По работе(сметное дело) постоянно обращаюсь к старым сметам в поисках нужной расценки, хорошая новость - все сметы имеют формат .xls либо .xslx, плохая - файлов смет очень много ≈ 27000 шт(все в одной директории). Что я перепробовал: встроенный поиск в папке(Windows 8, Ctrl+F), встроенный поиск через Win+F, Total Commander, макросы поиска (макрос).
Все вышеописанные варианты итогом выдают список файлов(кроме макроса, но у него и скорость ниже всех), или работают некорректно, и это минус, так как таких запросов приходится делать очень много, а списки результатов исчисляются десятками.
В общем идеальный поиск по базе, я видел как встроенный поиск в книге Excel. поэтому попробовал объединить хотя бы 300 файлов в книгу, макросом конечно, всё шло хорошо, заняло не так много времени, сохранил-закрыл, а открыть уже не получилось, хотя компьютер не слабый. Смотрел в сторону формата .csv, но там теряется форматирование, а мне важно его сохранить так как есть свой нюанс, во многих файлах выпускаемых сметной программой тысячи скрытых строк(пытался удалять макросом, очень долгий процесс даже для одной сметы).

В общем у меня больше нет вариантов, как организовать быстрый поиск по 27000 файлов. Если у кого-нибудь есть идеи - подскажите.

Файл сметы для примера
Изменено: Дмитрий_DimAs - 02.02.2019 20:08:28 (Добавил ссылку на файл)
Пересохранить файл в ту же папку с тем же именем
 
Дмитрий(The_Prist) Щербаков и RAN  - каюсь, свою ошибку осознал, имя файла с любым количеством точек действительно определяется верно, про ресурсоёмкость сторонней библиотеки понял, но всё же первый код из поста #9 сохраняет файл хоть и с правильным именем, но без расширения. Дополнил код.
Код
Sub qq()
    With ActiveWorkbook
        .SaveAs Left$(.FullName, InStrRev(.FullName, ".") - 1) & ".xls", 56
    End With
End Sub
Изменено: abricos29 - 24.01.2019 06:47:16
Пересохранить файл в ту же папку с тем же именем
 
Цитата
kuklp написал:
Sub csvTOxls()With ActiveWorkbook    BaseName = CreateObject("Scripting.FileSystemObject").GetBaseName(.Path & Application.PathSeparator & .Name)    .SaveAs Filename:=.Path & Application.PathSeparator & BaseName & ".xls", FileFormat:=xlExcel8End WithEnd Sub
Уважаемые kuklp и RAN, позволю себе небольшую ремарку, всё же ваши варианты не так универсальны, как вариант Sanja из поста #6, если в имени файла будут присутствовать точки, помимо той, что отделяет имя от расширения, то итог будет неверным. Единственное, что я бы сократил в коде из поста #6 так это вместо GetBaseName(.Path & Application.PathSeparator & .Name) использовать GetBaseName(.FullName)
Код
Sub AnyExtTOxls()
With ActiveWorkbook
BaseName = CreateObject("Scripting.FileSystemObject").GetBaseName(.FullName)
.SaveAs Filename:=.Path & Application.PathSeparator & BaseName & ".xls", FileFormat:=xlExcel8
End With
End Sub
Закрыть с сохранением все копии приложения Excel
 
JayBhagavan, Спасибо за участие! код отлично отрабатывает, если создать копии приложения руками, но опять же, выпущенные из сметной программы копии приложения  Excel закрывает только первую(причём программа-родитель выгружена заранее), затем(судя по Диспетчеру задач) - скрипт вместе с экземпляром Excel попадают в фоновые задачи и там висят до момента пока руками не снимешь задачу. После этого запускаю скрипт снова и он опять закрывает и сохраняет только один из оставшихся экземпляров Excel и дальше всё повторяется по кругу( Ещё раз  спасибо, по сути задача решена, а это уже индивидуальные особенности моей программы, но если есть мысли как её решить, пожалуйста - пишите)
Закрыть с сохранением все копии приложения Excel
 
ZVI, Большое спасибо за отклик, но к сожалению скрипт по-прежнему закрывает по одной копии приложения(если я их создал руками). А при выпуске из сметной программы и закрытии её же, ДО применения вашего скрипта(возможно она держит файлы), скрипт закрывает только первую копию, в этот же момент создаёт в фоновых процессах копии процесса, и повторное применение скрипта на оставшиеся копии вызывает только кратное увеличение фоновых одноименных процессов, без закрытия оставшихся копий Excel/
Страницы: 1 2 3 След.
Наверх