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

» Excel VBA (часть 3)

Автор: asbo
Дата сообщения: 27.05.2011 15:09
re:
http://forum.ru-board.com/topic.cgi?forum=5&topic=33123&start=1200#20
http://forum.ru-board.com/topic.cgi?forum=5&topic=33123&start=1200#21
http://forum.ru-board.com/topic.cgi?forum=5&topic=33123&start=1220#2

Виноват, думал будет более, чем достаточно :)

Макрос не может "выполняться из папки". Из папки может быть запущена книга, содержащая макрос. УжЕ содержащая. Вот в этом макросе первой строкой и можно определить путь, откуда книга запущена
sDir = ActiveWorkbook.Path & "\"

А далее, используй эту переменную в своей конструкции:
Workbooks.Open Filename sDir & "xx.xls"
Которая, как я понял, открывает следующий файл в этой же "гуляющей" папке.
Автор: r18101989
Дата сообщения: 27.05.2011 15:16

Цитата:
Которая, как я понял, открывает следующий файл в этой же "гуляющей" папке.
да именно так спасибо, буду пробовать


Добавлено:
asbo
Все заработало. Спасибо. сам бы точно не разобрался.
но вопросы еще будут появлятся по мере написания)))
Автор: asbo
Дата сообщения: 27.05.2011 15:24
Alderbvcx
Цитата:
Книгу мы не формируем, она у нас как данность

Это ключевое слово :( Если бы вы ее сами рожали, то тогда мой совет пришелся бы в пору. А так... Чтобы порекомендовать некую конкретику, надо смотреть на оригинал.

Поверьте, подводных камней при разборе чужих данных (тем более так хаотично упорядоченных) более чем достаточно. Выкладывайте, если не военная тайна.
Автор: Alderbvcx
Дата сообщения: 27.05.2011 16:12
asbo
http://rghost.ru/8181981
К сожалению, не могу выложить весь, только кусочек. Но думаю, этого достаточно.
Автор: asbo
Дата сообщения: 27.05.2011 18:10
Alderbvcx
С понятными условностями - циклом по столбцу B на соответствие "R.P.". При соответствии - циклом по этой строке до первой пустой ячейки применить мультипликатор. Цикл по столбцу предварительно ограничить снизу номером строки последней значащей ячейки.
Автор: Alderbvcx
Дата сообщения: 28.05.2011 08:38
asbo
Оказалось все в разы проще, чем я думал. Спасибо!
Автор: r18101989
Дата сообщения: 30.05.2011 09:18
при помощи чего в макросах сделать что то типа функции =СЦЕПИТЬ(C2;G2;D2;G2;B14) ????
Автор: KF121
Дата сообщения: 30.05.2011 09:41

Цитата:
при помощи чего в макросах сделать что то типа функции =СЦЕПИТЬ(C2;G2;D2;G2;B14) ????


dim str
str = Range("C2") & Range("G2") & Range("D2") & Range("G2") & Range("B14")
Автор: r18101989
Дата сообщения: 30.05.2011 09:45
Спасибо, а я вместо & ставил + , и не получалось, Еще новичек, но учусь благодаря помощи от форумчан
Автор: asbo
Дата сообщения: 30.05.2011 09:57
KF121
r18101989

Цитата:
dim str
str = Range("C2") & Range("G2") & Range("D2") & Range("G2") & Range("B14")


Dim sStr as string
' 1. Рекомендуется без нужды не использовать тип Variant, а явно указывать тип переменной
' 2. Не рекомендуется использовать в именовании переменных зарезервированные слова (Str - функция)

sStr = Range("C2").Value & ...
' 3. Вместо использования свойства по умолчанию рекомендуется, особенно начинающим, явно обращаться к свойству объекта.
Автор: r18101989
Дата сообщения: 30.05.2011 11:42
как указать подсчет количества знаков в ячейке????

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

если в ячейке одна цифра, то в следующей поставить 00,
если в ячейке две цифры, то в следующей поставить 0,
иначе ничего не делать.

вот что то типа этого.

так вот, как задать подсчет, сколько цифр в ячейке?????
Автор: ZlydenGL
Дата сообщения: 30.05.2011 11:56

Код: =If(Len(A1)=1; "00";If(Len(A1)=2);"0";"") & A1
Автор: KF121
Дата сообщения: 30.05.2011 11:59
либо заюзать Format(B1; "000"), но уже с VBA
Автор: asbo
Дата сообщения: 30.05.2011 12:19
Загнать значение ячейки в строковую переменную, проверять каждый символ, накапливать сумму - number, если это цифра, и вывести в нужную ячейку соответствующее количество нулей - character
Chr(39) & String(number, character)
Автор: ZlydenGL
Дата сообщения: 30.05.2011 12:26

Цитата:
но уже с VBA

Можно и без VBA - функция называется TEXT()

asbo, есть микроскоп и пачка гвоздей - могу переслать в виде гуманитарной помощи
Автор: asbo
Дата сообщения: 30.05.2011 12:27
Прдн:
Chr(39) & String(3 - number, character)
И проверку добавить number <= 3
Автор: KF121
Дата сообщения: 30.05.2011 12:27

Цитата:
Загнать значение ячейки в строковую переменную, проверять каждый символ, накапливать сумму - number, если это цифра, и вывести в нужную ячейку соответствующее количество нулей - character
Chr(39) & String(number, character)

а зачем такой геморой, если есть стандартные решеня проблемы
Автор: asbo
Дата сообщения: 30.05.2011 12:38
ZlydenGL
KF121
Название темы читаем? Excel VBA(часть 3)


Цитата:
есть микроскоп и пачка гвоздей - могу переслать в виде гуманитарной помощи

Только каждому гвоздю - по своему мелкоскопу :)


Цитата:
а зачем такой геморой

Я вот подчас задумываюсь - действительно, зачем, если вопрошающему похер - что спрашивать, где спрашивать, о чем спрашивать и как внятно сформулировать свои хотелки... :(


Цитата:
есть стандартные решеня проблемы

1. Не вижу ни одной проблемы. Только подобие задачи.
2. Стандартные? Что имелось ввиду?

И для особо догадливых:
Где в постановке было указано число символов в ячейке? Где было указано, что в ячейке только числа?

Если по русски сформулировать задачу, получится:
Подсчитать количество цифр и при условии, если их две или одна вывести в соседнюю количество нулей, недостающее до 3.
Автор: ZlydenGL
Дата сообщения: 30.05.2011 13:00

Цитата:
Название темы читаем?

Встречный вопрос - если часть проблем можно решить напильником, зачем советовать использовать фрезерный станок с ЧПУ?


Цитата:
Где в постановке было указано число символов в ячейке?

В постановке вообще стоял вопрос о МЕТОДОЛОГИИ решения таких задач:

Цитата:
как указать подсчет количества знаков в ячейке????

Это уже потом в виде "выхлопа" была предложена реальная задача. Это может быть частный случай, или просто иллюстрация того, что автор хочет увидеть - ИМХО так. И если автор спускается до такой детализации - скорее всего предмет он знает нечетко, и советовать сразу углубляться ему до ASCII кодов символов даже без пояснения причин использования этого ASCII - как минимум неэтично ИМХО.


Цитата:
Только каждому гвоздю - по своему мелкоскопу

На правах оффтопа - готов подрядиться на оптимизацию тех.процесса в целях экономии ОС Сумму согласен ограничить тремя значащими цифрами зеленого оформления и с упоминанием Божьей силы
Автор: asbo
Дата сообщения: 30.05.2011 13:23
Этично - не этично! Это у нас с ними цацкаются, на поруки берут, перевоспитывают, а надо, как в Турции... Вопросом на вопрос, не требующий уточнений, отвечать не этично.

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


Цитата:
=AL11-(ЕСЛИ(F11>0,1,0)*F$8+ЕСЛИ(G11>0,1,0)*G$8+ЕСЛИ(H11>0,1,0)*H$8+ЕСЛИ(I11>0,1,0)*I$8+ЕСЛИ(J11>0,1,0)*J$8+ЕСЛИ(K11>0,1,0)*K$8+ЕСЛИ(L11>0,1,0)*L$8+ЕСЛИ(M11>0,1,0)*M$8+ЕСЛИ(N11>0,1,0)*N$8+ЕСЛИ(O11>0,1,0)*O$8+ЕСЛИ(P11>0,1,0)*P$8+ЕСЛИ(Q11>0,1,0)*Q$8+ЕСЛИ(R11>0,1,0)*R$8+ЕСЛИ(S11>0,1,0)*S$8+ЕСЛИ(T11>0,1,0)*T$8+ЕСЛИ(U11>0,1,0)*U$8+ЕСЛИ(V11>0,1,0)*V$8+ЕСЛИ(W11>0,1,0)*W$8+ЕСЛИ(X11>0,1,0)*X$8+ЕСЛИ(Y11>0,1,0)*Y$8+ЕСЛИ(Z11>0,1,0)*Z$8+ЕСЛИ(AA11>0,1,0)*AA$8+ЕСЛИ(AB11>0,1,0)*AB$8+ЕСЛИ(AC11>0,1,0)*AC$8+ЕСЛИ(AD11>0,1,0)*AD$8+ЕСЛИ(AE11>0,1,0)*AE$8+ЕСЛИ(AF11>0,1,0)*AF$8+ЕСЛИ(AG11>0,1,0)*AG$8+ЕСЛИ(AH11>0,1,0)*AH$8+ЕСЛИ(AI11>0,1,0)*AI$8+ЕСЛИ(AJ11>0,1,0)*AJ$8)


И полная таблица такого дерьма... Дерьма - в смысле реализации, подхода.

Нет, действительно - помогите, у кого время и силы есть. Он ко мне в личку обратился. Там тебе и цифры, и буквы, и буквы с цифрами и каждая ячейка несет в себе пять смысловых нагрузок...
Автор: ZlydenGL
Дата сообщения: 30.05.2011 13:49
asbo, жесть... Т.е. суммируются только положительные числа? Что мешало написать

Код: =sumif(A11:AJ11;">0";A11:AJ11)
Автор: asbo
Дата сообщения: 30.05.2011 13:57
ZlydenGL, это не спасет :)
В личку ответил.
Автор: ZlydenGL
Дата сообщения: 30.05.2011 14:06
asbo, ну дык может формальное ТЗ кинь? А мы тут общественно-бессознательным потумкаем, глядишь чего и родим А если еще и "боевые" примерчики будутЪ...
Автор: asbo
Дата сообщения: 30.05.2011 14:13
ZlydenGL, я тебе в личку отправил материалы.
Там вроде бы можно решить рукописной функцией на VBA, которая будет интерпретировать содержимое исходной ячейки и решать, что с ним делать - играть, или рыбу заворачивать :) Но язык там турецкий! Вобщем взгляни, а я дерну хозяина на предмет актуальности. Вдруг ему уже не нужно, или там турецкая военная тайна :)
Автор: ZlydenGL
Дата сообщения: 30.05.2011 14:32
Глянул, готов подмогнуть по возможности, но нужен перевод (гуглотрянслятор кое-где спотыкается), плюс нужно ТЗ для понимания - что такое [8-12]g. Владелец/ТЗпостановщик, ау!
Автор: r18101989
Дата сообщения: 30.05.2011 16:37

Цитата:
зачем, если вопрошающему похер - что спрашивать

мне, как ты сказал, не похер что спрашивать, я задал такой вопрос, т.к. у меня не стандартная задача и мне нужно именно то что я спрашиваю, и искать решение поставленной задачи никого не заставляю
Автор: ZlydenGL
Дата сообщения: 30.05.2011 16:48
r18101989, а приведенные варианты-то подходят?
Автор: r18101989
Дата сообщения: 31.05.2011 07:22
ZlydenGL
нужно было в макросах записать, а с Format(A1;0) не разобрался(((

Сделал по простому:

If ActiveCell.Offset(0, -1) < 10 Then
ActiveCell.Formula = Range("B2") & "-" & "00" & ActiveCell.Offset(0, -1)
End If
If (ActiveCell.Offset(0, -1) > 9) And (ActiveCell.Offset(0, -1) < 100) Then
ActiveCell.Formula = Range("B2") & "-" & "0" & ActiveCell.Offset(0, -1)
End If
If ActiveCell.Offset(0, -1) > 99 Then
ActiveCell.Formula = Range("B2") & "-" & ActiveCell.Offset(0, -1)
End If

Добавлено:
вопрос еще в следующем:

Есть таблица, в нее каждый месяц заносят приходные и расходные ордеры, для каждого ордера создается отдельный файл, а в таблицу заносятся краткие данные по ордеру ( дата, сумма, кому, куда).
Каждый месяц делается архив папки в таблицей и файлами ордеров.
В таблице есть кнопка обнулить, при помощи которой таблица очищается до начального чистого вида, но файлы нужно удалять в ручную из папки.
Как можно сделать чтобы при нажатии на обнулить, чистилась и таблица, и файлы с ордерами внесенными в таблице????
Автор: KF121
Дата сообщения: 31.05.2011 09:14

Цитата:
If ActiveCell.Offset(0, -1) < 10 Then
ActiveCell.Formula = Range("B2") & "-" & "00" & ActiveCell.Offset(0, -1)
End If
If (ActiveCell.Offset(0, -1) > 9) And (ActiveCell.Offset(0, -1) < 100) Then
ActiveCell.Formula = Range("B2") & "-" & "0" & ActiveCell.Offset(0, -1)
End If
If ActiveCell.Offset(0, -1) > 99 Then
ActiveCell.Formula = Range("B2") & "-" & ActiveCell.Offset(0, -1)
End If


Трансфрмируется в ActiveCell.Formula = Range("B2") & "-" & Format(ActiveCell.Value, "000")

файлы можно далить используя объект файловой системы


Код:
Dim fsObject as Object
Dim FileName as String

FileName = "c:\order.xxx"

Set fsObject = CreateObject("Scripting.FileSystemObject")

If fsObject.FileExists(FileName) Then fsObject.DeleteFile FileName

Set fsObject = Nothing
Автор: r18101989
Дата сообщения: 31.05.2011 10:16
KF121
Спасибо, все заработало

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127

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


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