Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Excel VBA (часть 2)

Автор: VanoZZZ
Дата сообщения: 15.07.2008 11:58
SAS888

Премного благодарен, то что нужно (в одном месте только немного подправил)
Автор: SAS888
Дата сообщения: 15.07.2008 12:16
CatF
Можно. Но это чуть медленнее и код чуть длиннее. Надо?
Автор: VanoZZZ
Дата сообщения: 15.07.2008 12:43
SAS888

Если не сложно, можешь еще подсказать, как сделать, чтобы у меня в твоем варианте искало файлы в подкаталогах?
Автор: SAS888
Дата сообщения: 15.07.2008 12:57
VanoZZZ
Если просто подсказать, то используй FileSystemObject. А если конкретнее, то опишите подробнее: в подкаталогах каких папок.
Автор: CatF
Дата сообщения: 15.07.2008 13:12
SAS888
Если честно то очень надо, если не трудно напиши пожалуста.
Автор: VanoZZZ
Дата сообщения: 15.07.2008 13:15
SAS888
спасибо за наводку, покопаюсь с FileSystemObject. у меня книга в каталоге, в нем нужно перебрать файлы, как в твоем классном примере, но в этом же каталоге есть и папки, в них тоже нужно искать, и в подкаталогах этих каталогов и... до самого нижнего уровня
Автор: ZhanR
Дата сообщения: 15.07.2008 15:53
всем привет!
подскажите плз, можно ли в ексель запустить макрос автоматически (без запуска его выбирая из списка макросов, без нажатия на буттон, который вызывает данный макрос). Т.е. мне нужно чтобы при открытии книги автоматически синициализировались некоторые значения...
Автор: SERGE_BLIZNUK
Дата сообщения: 15.07.2008 21:01
ZhanR, в ЭтаКнига выбирайте WorkBook, событие - Open
например:
Код: Private Sub Workbook_Open()
MsgBox "Оп-па - А книгу то открыли!!!"
End Sub
Автор: SAS888
Дата сообщения: 16.07.2008 05:18
CatF
Посмотрите Здесь. Лист "Пример" обязан исходно присутствовать. Его проверка (удаление, вставка) не осуществляется. При запуске макроса, строки со 2 до последней листа "Пример" очищаются и формируются заново. Отформатируйте лист "Пример" так, как Вам нужно. ВАЖНО: первая строка - заголовок (макрос ее не трогает), со строки 2 - будут вставлены результаты.
Автор: ZhanR
Дата сообщения: 16.07.2008 06:28

Цитата:
Private Sub Workbook_Open()
MsgBox "Оп-па - А книгу то открыли!!!"
End Sub

спасибо, работает!
Автор: CatF
Дата сообщения: 16.07.2008 09:29
SAS888
Огроменное тебе спосибо, я твоя должница)

Добавлено:
SAS888
Огромное тебе спасибо)))
Автор: Luciefer
Дата сообщения: 16.07.2008 12:16
Опять возник вопросик. Вроде раньше делал, а сейчас забыл как. В общем есть файл определенный с макросом и с ним в папке еще файлы 01,02,03,04,05,06,07,08,09. Из них берутся данные в файл с макросом.
Написал следующим образом выборку, но..она требует что бы файлы 01-09 были открыты при этом. Как сделать что бы они оставались закрытыми просто в этой же папке?
Желательно с Cells.

Сейчас это выглядит примерно так:
ActiveWorkbook.ActiveSheet.Cells(132 + i, 2) = Workbooks("01.xls").Worksheets("1").Cells(i, 2)
Автор: alin
Дата сообщения: 16.07.2008 12:39
Подскажите, пожалуйста, как мне сделать паузу в макросе?
Т.е. выполняется макрос, потом сохранение книги и далее через 30 сек закрытие программы?
Заранее благодарен!
Автор: nopoxz
Дата сообщения: 16.07.2008 13:14
Возвращаясь к макросу на распечатывание документа из ексела:

Код:
Sub Pr1()

Dim wdApp As Object, wdDoc As Object, i As Integer

i = Application.InputBox(Prompt:= _
"Сколько листов печатать?:", _
Title:="Печать", Type:=1)

Set wdApp = CreateObject("Word.Application")
Set wdDoc = wdApp.Documents.Open("C:\1.doc")


wdDoc.PrintOut Copies:=i, Pages:="2"

wdApp.Quit

Set wdApp = Nothing
Set wdDoc = Nothing

End Sub
Автор: SAS888
Дата сообщения: 16.07.2008 13:30
Luciefer
Вариант 1: Вставить в требуемую ячейку связь на путь-файл-лист-ячейку закрытой книги, затем удалить связь, оставив значение (Cell.Value=Cell.Value)
Вариант 2: С помощью макроса XML.

Добавлено:
alin
Как сделать при паузе? дать возможность дальнейшей работы пользователю или нет?
Автор: Luciefer
Дата сообщения: 16.07.2008 14:10
SAS888, дело в том, что путь будет меняться
а как если без Cell?
Автор: alin
Дата сообщения: 16.07.2008 15:11
SAS888

Цитата:
Как сделать при паузе? дать возможность дальнейшей работы пользователю или нет?

На пользователя это не должно повлиять, только приостановить закрытие книги.
Проблема описана ЗДЕСЬ, другого решения, как перенести код в тело самой книги и подправить макрос, я не нашел. Может есть иное мнение?
Заранее благодарен!
Автор: Nika7
Дата сообщения: 16.07.2008 18:47
Всем добрый вечер...
задача такая:
1.Как сделать так,чтобы в столбце"проживание в гостинице"- при выборе "нет",автоматически появлялись прочерки в двух следующих столбцах("дата заезда"и "время прибытия")?

http://ifolder.ru/7366196-ссылка на файл

2.Проверте пожалуйста макрос...он не работает,выдает какую-то ерунду...
Макрос для быстрого ввода даты и времени в столбцах (E,Q,R),т.е. мы просто без всяких точек,запятых и др.заком вводим цифры в нужную ячейку,а там автоматически проставляются точки(для даты дд.мм.гггг и для времени чч:мм).Один раз сработало..а потом все...ошиби постоянные.
Макрос такой:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim vVal
Dim StrVal As String
Dim dDate As Date
If Target.Cells.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("Q4:Q33", "E4:E33")) Is Nothing Then
With Target
StrVal = Format(.Text, "000000")
If IsNumeric(StrVal) And Len(StrVal) = 6 Then
Application.EnableEvents = False
dDate = DateValue(Left(StrVal, 2) & "." & Mid(StrVal, 3, 2) & "." & Right(StrVal, 2))
.NumberFormat = "dd.mm.yyyy"
.Value = CDate(DateSerial(Year(dDate), Month(dDate), Day(dDate)))
End If
End With
End If


If Not Intersect(Target, Range("R4:R33")) Is Nothing Then
With Target
vVal = Format(.Value, "0000")
If IsNumeric(vVal) And Len(vVal) = 4 Then
Application.EnableEvents = False
.Value = Left(vVal, 2) & ":" & Right(vVal, 2)
.NumberFormat = "[h]:mm"
End If
End With
End If
Application.EnableEvents = True
End Sub

очень надеюсь на вашу помощь...Спасибо взаранее)
Автор: ApucToKpaT86
Дата сообщения: 16.07.2008 20:23
Нужна помощь,думаю вас это не затруднит. Из Экселя создается документ Word в который последовательно добавляется n листов. как сделать чтобы новый лист добавлялся в конец дока?
Автор: alin
Дата сообщения: 16.07.2008 21:13
Nika7

Код: =ЕСЛИ(А1="нет";"-";"Упс!")
Автор: Luciefer
Дата сообщения: 17.07.2008 06:02
SAS888
а можно поподробнее по 1 варианту?
Автор: SAS888
Дата сообщения: 17.07.2008 06:06
Luciefer
Вы же оговариваете, что

Цитата:
есть файл определенный с макросом и с ним в папке еще файлы

То есть путь мы всегда знаем (ThisWorkbook.Path).

Добавлено:
Luciefer
Пусть, например, требуется в ячейке "B2" получить значение из неоткрытого файла "02.xls", из листа "Лист1", ячейки "A1", который расположен в той же папке, что и рабочий файл. Можно так:

Код: Sub Main()

Dim f As String
f = "02.xls" ' Пусть это требуемое имя файла
[B2].Formula = "='" & ThisWorkbook.Path & Application.PathSeparator & "[" & f & "]Лист1'!$A$1"
[B2].Value = [B2].Value 'Убираем формулу, оставляя значение

End Sub
Автор: Luciefer
Дата сообщения: 17.07.2008 07:52
SAS888
пробовал файл кинуть в C:\ и запустить следующее:
ActiveWorkbook.ActiveSheet.Cells(132 + i, 2) = Workbooks("C:\01.xls").Worksheets("1").Cells(i, 2)

не получается, я так понял Workbooks это именно открытая книга? А как с закрытой?

Добавлено:
SAS888, спасибо, разобрался
Автор: SAS888
Дата сообщения: 17.07.2008 12:57
Nika7

Цитата:
Макрос для быстрого ввода даты и времени

Посмотрите Этот пример.
Автор: Luciefer
Дата сообщения: 17.07.2008 13:25
SAS888, а как в моем случае еще учесть если файла например 02 нету, что бы считалось без него
и как подобную строку в цикл делать? с началом подобным [B16]понятно, можно сделать просто Cells(i,j), а как поступить тут? "='" & ThisWorkbook.Path & Application.PathSeparator & "[" & f & "]Лист1'!$A$1"

вот в конце $A$1 как их заменить на i, j?
Автор: alin
Дата сообщения: 17.07.2008 16:09
SAS888

Цитата:
Попробуйте использовать WinAPI-функцию "GetTickCount", в теле цикла которой вставить "DoEvents", т.е. разрешить системе (а также Excel и пользователю) выполнять все действия во время задержки (паузы).

Пожалуйста, более детально подскажите, куда и что нужно подставить.
Заранее благодарен!

Автор: Nika7
Дата сообщения: 17.07.2008 21:43
Всем спасибо, кто помог))и с макросом,и с функцией разобралась...Уффф..:)
Автор: SAS888
Дата сообщения: 18.07.2008 06:59
Luciefer
1) Я в своем примере специально вынес имя файла в переменную. Присваивайте ей требуемое значение, и вперед! Например, с помощью Do...Loop перебирать все файлы в папке и те, какие нужно, обрабатывать (присваивать переменной f полученное имя файла).
2) Поменяйте
Код: [B2].Formula = "='" & ThisWorkbook.Path & Application.PathSeparator & "[" & f & "]Лист1'!$A$1"
Автор: ValentinaK
Дата сообщения: 18.07.2008 16:15
Ребята помогите!!!
вопрос такой: у меня есть userform с label и spreadsheet и нужно чтоб при нажатии кнопки commandbutton были бы распечатаны данные с userform. Воспользовалась кодом:
userform1.PrintForm
печатает мне spreadsheet в маленьком формате и только те строки которые видны на экране . как сделать больше формат и чтобы печатал весь список?
пасибки

Добавлено:
Если ввели отрецательное число, есть ли такая функция которая его "превращает" в положительное, или может еть другой способ?
Спасибо
Автор: alin
Дата сообщения: 19.07.2008 06:47
SAS888
Спасибо, буду пробовать!

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133

Предыдущая тема: Написание своего HyperTerminal для считывания данных


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.