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

» Excel VBA (часть 3)

Автор: komputeryuzer
Дата сообщения: 28.11.2012 17:25
вот так получается IsObject([[Книга2.xlsx]Лист1!A1])
но если вместо Лист1 вписать имя с пробелами то не работает
IsObject([[Книга2.xlsx]Отчёт за октябрь (2012 года)!A1])
IsObject([[Книга2.xlsx][Отчёт за октябрь (2012 года)]!A1])
IsObject([[Книга2.xlsx]"Отчёт за октябрь (2012 года)"!A1])
Автор: psiho
Дата сообщения: 29.11.2012 05:46

Цитата:
но если вместо Лист1 вписать имя с пробелами  то не работает

Если в именах есть пробелы, то всё имя заключается в одинарные кавычки
Автор: kate821
Дата сообщения: 29.11.2012 10:32
Привет, подскажите плиз, возможно ли вообще такое:
ставить пароль на нужный нам срок, т.е поставили пароль, отправили, через три дня (например) он должен попросить пароль. Уверена что базовые возможно Эксель такой штуки сделать не позволяют. Сама о такой штуке ни разу не слышала, но начальник зверствует, что это возможно. Есть какие то мысли по этому поводу? Спасибо)
Автор: komputeryuzer
Дата сообщения: 29.11.2012 13:43
psiho
Цитата:
Если в именах есть пробелы, то всё имя заключается в одинарные кавычки
где то я такое видел но когда пробовал вба понялал как коментарий поэтому пробовал все виды кавычек кроме них...
это остается в силе и когда иня используется через переменную?
дим а ас стринг = "'a a'"
так?

Автор: psiho
Дата сообщения: 29.11.2012 13:50

Цитата:
Привет, подскажите плиз, возможно ли вообще такое

Если Вы имеете ввиду пароль на книгу Excel, то он спокойно вскрывается. Другое дело, если отправлять файл Excel,упакованный архиватором(например WinRAR). Тогда можно поставить пароль. В Вашем случае нужна конкретика задачи.

Добавлено:

Цитата:
это остается в силе и когда иня используется через переменную?

Да. Например:

Код:
dim strwbName as string
strwbName="'[Книга2.xlsx]Отчёт за октябрь (2012 года)'!"
IsObject([strwbName & "A1"])
Автор: Black_Lung
Дата сообщения: 29.11.2012 13:58
kate821
в Workbook_Open записать дату отправки и её проверку с текущей датой, если больше на 3 дня то поставить пароль.
Автор: komputeryuzer
Дата сообщения: 29.11.2012 15:19
psiho спасибо.. мне вообщето надо составное имя а не такое подстановочное
иня файля одна перемнная имя листа другая а ячейка в третьей переммной.. ладно вечером буду пробовать..
ой!!! я сейчас у тебя заметил... одинарные кавычка подхватывают и имя книги что ли?!
вот что мне мешает видать...
я всё сую [книга1]'лист1'!а1 - во блин намудрили...
Автор: kate821
Дата сообщения: 29.11.2012 19:55
Black_Lung
Спасибо за совет, будем решать задачку дальше))
Автор: Leojse
Дата сообщения: 01.12.2012 14:10
Здравствуйте. Подскажите, возможно ли сделать так, чтобы при внесении данных в ячейку С12 и U12 данные автоматически переносились в I12 и J12 соответственно? А затем, когда скопировались последние ячейки (С17 и D17), начали копироваться следующие ячейки E18 и F18 в I18 и J18. "Копировать-Вставить", применять формулу C12=I12, а потом растягивать проблематично- так как очень много ячеек в документе.
Скриншот прилагаю.
Заранее большое спасибо.
http://imageshack.us/photo/my-images/689/83669655.png/
Автор: andrewkard1980
Дата сообщения: 01.12.2012 18:55
Leojse
Вставьте в модуль требуемого листа следующий код:

Код: Private Sub Worksheet_Change(ByVal Target As Range)
Dim rRg As Range, rCell As Range
Dim lLr: lLr = 5000 'Измените на требуемое кол-во строк

Set rRg = Intersect(Target, Range("c12:d17", "e18:f" & lLr))
If Not rRg Is Nothing Then
For Each rCell In rRg
Select Case rCell.Column
Case 3, 5
Cells(rCell.Row, 9) = rCell.Value
Case 4, 6
Cells(rCell.Row, 10) = rCell.Value
End Select
Next rCell
End If
End Sub
Автор: Leojse
Дата сообщения: 02.12.2012 11:33
andrewkard1980
Спасибо, что откликнулись.
Хотел сам допилить, но совсем уж не получается....
Более подробно объясню, что мне нужно.
Вообщем, имеется отчет (скрин приложу). В колонки Январь (5,6), Февраль(7,8), Март (5,6) данные вводятся вручную. Хотелось бы, чтобы "1 квартал" формировался сам, то есть чтобы автоматически данные соответственно переносились с января, февраля, марта в соответствующие колонки в "1 квартал". Затем вручную я заполняю Апрель, Май, Июнь. Потом идет "1 полугодие", которое, заполнялось бы тоже автоматически, то есть брались бы данные с первого квартала и заполнялись бы далее с Апреля, Мая, Июня. Затем, опять вручную Июль, Август, Сентябрь. Снова бы хотелось автоматического заполнения "9 месяцев" - данные бы брались из 1 полугодия и добирались с Июля, Августа, Сентября. Октябрь, ноября, Декабрь - вручную, а "Год" - автоматически, т.е. копировались бы "9 месяцев" и добирались бы данные с Октября, Ноября, Декабря.
В отчете более 1500 строчек. Количество столбцов не меняются. Строчки добавляются в конец раздела. Разделов очень много.
Заранее спасибо за помощь.
http://imageshack.us/photo/my-images/12/2222df.jpg/
Автор: andrewkard1980
Дата сообщения: 02.12.2012 17:32
Leojse
Пробуйте так:

Код: Private Sub Worksheet_Change(ByVal Target As Range)
Dim rRg As Range, rCell As Range
Dim lLr: lLr = 200 ' глубина строк

Set rRg = Intersect(Target, Range("E1:AH" & lLr))
If Not rRg Is Nothing Then
For Each rCell In rRg
Select Case rCell.Column ' номер столбика
Case 5, 7, 9
Cells(rCell.Row, 11) = rCell.Value
Cells(rCell.Row, 19) = rCell.Value
Cells(rCell.Row, 27) = rCell.Value
Cells(rCell.Row, 35) = rCell.Value

Case 6, 8, 10
Cells(rCell.Row, 12) = rCell.Value
Cells(rCell.Row, 20) = rCell.Value
Cells(rCell.Row, 28) = rCell.Value
Cells(rCell.Row, 36) = rCell.Value

'далее аналогично

End Select
Next rCell
End If
End Sub
Автор: Leojse
Дата сообщения: 02.12.2012 18:51
andrewkard1980
Спасибо, но что-то не получается... Вставляю ваш код в модуль листа, но ничего не происходит. Пожалуйста, помогите. Не могли бы вы пошагово расписать, как добавить макрос в книгу? Просто я очень не силен в VBA.

Добавлено:
andrewkard1980
Может, вам скинуть файл?

Добавлено:
Всё, разобрался. Но снова прошу помощи...
В ваш код вставляю следующие колонки:
Case 13, 15, 17
Cells(rCell.Row, 19) = rCell.Value
Cells(rCell.Row, 27) = rCell.Value
Cells(rCell.Row, 35) = rCell.Value

Case 14, 16, 18
Cells(rCell.Row, 20) = rCell.Value
Cells(rCell.Row, 28) = rCell.Value
Cells(rCell.Row, 36) = rCell.Value
И апрель, май, июнь уже не копируются в полугодие, 9 месяцев и в год. Это можно поправить?
Автор: shkval100shtorm
Дата сообщения: 03.12.2012 10:30
Подскажите пожалуйста по проблемке.
В поиске решение проблемы не нашел.
Установлен Excell 2010. В книге personal.xlsb сохранены все рабочие макросы на все случаи жизни .
Personal.xlsb открывается в невидимом режиме. Если же я открываю следующий файл с расширением .xls то открытие файла сопровождает открытие еще одного экземпляра personal.xlsb с формулировкой "Редактирование 'personal.xlsb' запрещено пользователем".
Честное слово задолбало уже!
Помогите пожалуйста.
Автор: komputeryuzer
Дата сообщения: 03.12.2012 14:14
нарот помогите добить исобйект().. беследний рывок

вот так вроде работает:
IsObject(['[Отчёты за 2012 год.xlsx]Отчёт за октябрь (2012 года)'!A1])

а так через перемнные нет (у меня как раз перемнные):

dim otchety as string = "Отчёты за 2012 год.xlsx"
dim otchetoktyabr as string ="Отчёт за октябрь (2012 года)"
dim aaa as string = "'[" & otchety & "]" & otchetoktyabr & "!A1"
IsObject([aaa])
Автор: Black_Lung
Дата сообщения: 03.12.2012 14:53
komputeryuzer

одинарная ковычка пропущена перед !A1
Автор: andrewkard1980
Дата сообщения: 03.12.2012 17:03
Leojse
Проверьте глубину строк, возможно, Вы вышли за 200, тогда измените на большее число.

Dim lLr: lLr = 200 ' глубина строк
Я проверил, код работает.
Автор: komputeryuzer
Дата сообщения: 04.12.2012 08:50
Black_Lungk сожалению не помогает.. через перемнные ничего не работает(ехсел2010)..


IsObject(['[Отчёты за 2012 год.xlsx]Отчёт за октябрь (2012 года)'!A1]) РАБОТАЕТ



Дим ааа As String

ааа = "'[Отчёты за 2012 год.xlsx]Отчёт за октябрь (2012 года)'!"
IsObject([aaa & "A1"]) НЕ РАБОТАЕТ

ааа = "'[Отчёты за 2012 год.xlsx]Отчёт за октябрь (2012 года)'!A1"
IsObject([aaa]) НЕ РАБОТАЕТ

ааа = "['[Отчёты за 2012 год.xlsx]Отчёт за октябрь (2012 года)'!A1]"
IsObject(aaa) НЕ РАБОТАЕТ
IsObject([aaa]) НЕ РАБОТАЕТ
Автор: Black_Lung
Дата сообщения: 04.12.2012 11:12
komputeryuzer

тода для IsObject переменную нужно задавать через set, и снова возвращаемся к onerror где уже достаточно только seta


Код:
On Error GoTo ErrorHandler
set wb=Workbooks("zzz.xls")
On Error GoTo 0
Exit Sub
ErrorHandler:
MsgBox "bla-bla-bla"
Resume Next
Автор: komputeryuzer
Дата сообщения: 04.12.2012 12:43
блин!!!!!!! ))))))))))) это же вернулись к тому откуда ушли!!!
цель же была проверить "не лету"
на одном шаге от цели!!! так обрадовался было... еххххх...
Автор: psiho
Дата сообщения: 04.12.2012 15:32

Цитата:
Дим ааа As String

попробуй

Код: Dim ааа As Variant
Автор: oshizelly
Дата сообщения: 04.12.2012 15:42
Прошу прощения за совсем детский вопрос. Как запрограммировать в макросе команду "вставить в текущую ячейку значение соседней слева ячейки + 10".
Спасибо!
Автор: komputeryuzer
Дата сообщения: 04.12.2012 15:42
Dim ааа As Variant

ааа = "'[Отчёты за 2012 год.xlsx]Отчёт за октябрь (2012 года)'!"
IsObject([aaa & "A1"]) НЕ РАБОТАЕТ

ааа = "'[Отчёты за 2012 год.xlsx]Отчёт за октябрь (2012 года)'!A1"
IsObject([aaa]) НЕ РАБОТАЕТ

ааа = "['[Отчёты за 2012 год.xlsx]Отчёт за октябрь (2012 года)'!A1]"
IsObject(aaa) НЕ РАБОТАЕТ
IsObject([aaa]) НЕ РАБОТАЕТ

вот так что ли?
когда писал НЕ РАБОТАЕТ
это не означает что выдает ошибку а осначает что функция возвращает FALSE если даже книга открыта..
вечером попробую

Добавлено:
oshizelly начинай писать макрос потом набери эту формулу ручками а потом останови запись макроса потом зайди в макрос и посмотри там увидишь как надо писать

Добавлено:
ааа в соседнюю тогда есть метод оффсет называется.. копай там..
Автор: psiho
Дата сообщения: 04.12.2012 15:57

Цитата:
IsObject([aaa & "A1"])   НЕ РАБОТАЕТ

Попробуй так:

Код: IsObject(Workbooks("Отчёты за 2012 год.xlsx").Worksheets("Отчёт за октябрь (2012 года)").Range("A1"))
Автор: oshizelly
Дата сообщения: 04.12.2012 15:58
komputeryuzer 15:42 04-12-2012
Цитата:
в соседнюю тогда есть метод оффсет называется.. копай там..

Я, конечно, попробую копать оффсет, но вообще-то надеялся, что вопрос совсем простой, ответ в одну строку уложится. Какое-нибудь элементарное сочетание и пр. Ошибался?
Автор: komputeryuzer
Дата сообщения: 04.12.2012 16:37
ActiveCell.Offset(0, 1).Select
0 - строка, 1 - колонки , можно минус писать
что то типа ActiveCell.Offset(0, 1).FormulaR1C1 = ....
Автор: oshizelly
Дата сообщения: 04.12.2012 17:00
komputeryuzer 16:37 04-12-2012
Цитата:
что то типа ActiveCell.Offset(0, 1).FormulaR1C1 = ....

Прошу прощения, а что такое R1C1
Автор: komputeryuzer
Дата сообщения: 04.12.2012 17:06
oshizelly
Цитата:
Прошу прощения, а что такое R1C1
не знаю.. я пробую через запись макроса а потом вижу такое и там подправляю что надо... умешьь запись макроса запускать? вот когда вставляешь формулы в ячейки там макрос записывает в таком виде...


Добавлено:
psiho
Цитата:
Попробуй так:
Workbooks() и Worksheets() ошибку выкидывают! а IsObject(W нормально отрабатывает.. буду пробовать Dim ааа As Variant ...
Автор: oshizelly
Дата сообщения: 04.12.2012 17:49
komputeryuzer 17:06 04-12-2012
Цитата:
я пробую через запись макроса а потом вижу такое и там подправляю что надо.

Отлично... осталось только выучить, что именно подправлять и чем именно заменять
У меня в результате простой записи макроса получилось вот такое:

Код: Sub leftcell_plus_10()
'
' leftcell_plus_10 Macro
' Macro recorded 04.12.2012

Range("B1").Select
ActiveCell.FormulaR1C1 = "=RC[-1]+10"
Range("C1").Select
End Sub
Автор: Black_Lung
Дата сообщения: 04.12.2012 17:59
oshizelly
вместо ActiveCell попробуй Сells(номер строки, номер столбца)

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127

Предыдущая тема: VS 2010


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