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

» Excel VBA

Автор: Yuk
Дата сообщения: 03.07.2006 16:23
Maks07

Код: Sub test()
For Each r In Selection.Rows
Sheets("Приемная квитанция").Range("B17:H17").Value = Cells(r.Row, 3).Value
Sheets("Приемная квитанция").Range("C27:D27").Value = Cells(r.Row, 4).Value
Sheets("Приемная квитанция").PrintOut Copies:=1, Collate:=True
'Раскомментировать чтобы подождать 5 секунд
'Application.Wait (Now + TimeValue("0:00:05"))
Next
End Sub
Автор: Maks07
Дата сообщения: 03.07.2006 16:41
Да ты всё верно понял, так это и всё или шщё что то надо.
Автор: Yuk
Дата сообщения: 03.07.2006 16:43
Maks07
Усе. Тестируй.

Добавлено:
Название у макроса смени. Вместо test.
Автор: sonix555
Дата сообщения: 03.07.2006 17:15
Всем привет,
как сказать комбобоксу на листе1, использовать диапазон на листе2? Я имею ввиду ListFillRange.
Автор: Yuk
Дата сообщения: 03.07.2006 17:20
sonix555
Лист2!A1:A5
Автор: sonix555
Дата сообщения: 03.07.2006 17:42
А я тут велосипеды изобретаю..
Спасибо
Автор: Yuk
Дата сообщения: 04.07.2006 02:49
Благодаря нашему достопочтенному модератору этот топик теперь с шапкой.
Помогайте, кто чем может. Со временем постараюсь собрать ссылки на конкретные вопросы и другие полезные сайты.
Автор: zporuchik
Дата сообщения: 05.07.2006 10:39
Никто нигде не встречал макрос транслита рус-англ и обратно (англ-рус)?
Или такого в принцыпе быть не может?
Макрос для рус-англ имеется.
Автор: Yuk
Дата сообщения: 06.07.2006 02:54
zporuchik

Цитата:
Никто нигде не встречал макрос транслита рус-англ и обратно (англ-рус)?
Или такого в принцыпе быть не может?
Может, но не встречал.

Цитата:
Макрос для рус-англ имеется.
В студию. Не забываем про [no][more][/no].
Автор: Csen
Дата сообщения: 06.07.2006 07:43
Помогай кто может, в VB команда:
m = Worksheets("1").Cells(d, 1)

в этой ячейке иногда бывает запись "#ЗНАЧ!" и макрос вешается, error 13, Type missmatch... что сделать что бы он "0" присваивал и не вылетал на этой строчке программы???
Автор: Anjin_Kazawa
Дата сообщения: 06.07.2006 07:58
Csen

Цитата:
в этой ячейке иногда бывает запись "#ЗНАЧ!" и макрос вешается, error 13, Type missmatch... что сделать что бы он "0" присваивал и не вылетал на этой строчке программы???

Возможный вариант:

Код:
m = 0
On Error Resume Next
m = CDbl(Worksheets("1").Cells(d, 1))
On Error GoTo 0
Автор: Yuk
Дата сообщения: 06.07.2006 08:05
Csen
Как m описана?
Можно попробовать Dim m As Variant
Или проверять значение ячейки перед присваиванием:
Код: If IsNumeric(ActiveSheet.Cells(1, 1)) Then
m = ActiveSheet.Cells(1, 1)
Else
m = 0
End If
Автор: Dr Eam
Дата сообщения: 06.07.2006 08:38
Я могу средствами vba посчитать экселевскую формулу, не прибегая к записи в ячейки?
Т.е. есть строка, например, "=(1+2)*3", и нужно получить ответ 9, запихнув эту строку в какую-нибудь функцию. Свой парсер писать не хочется.
Автор: Yuk
Дата сообщения: 06.07.2006 08:44
Dr Eam
Используй объект WorksheetFunction.
Автор: Dr Eam
Дата сообщения: 06.07.2006 09:57
Yuk
Спасибо. Но что-тоя никак не могу найти, как с помощью неё вычислять именно произвольные формулы, записанные в текстовом виде. Там ведь можно только вызывать любые стандартные функции...

Т.е. нужен, по сути, не WorksheetFunction, а WorksheetFormula.


Добавлено:
Yuk
Всё, нашёл. WorksheetFunction не смог использовать, а получилось всё с Evaluate.
Автор: Virtualexx
Дата сообщения: 06.07.2006 11:34
Подскажите, пожалуйста, как сделать, чтобы макрос при нажатии на кнопку добавлял +1 к значению ячейки?
Допустим, начальное значение ячейки 0. Нажал: 1, нажал: 2, нажал: 3 и т.д.
Автор: Dr Eam
Дата сообщения: 06.07.2006 11:48
Гм. Cells(<адрес>).Value = Cells(<адрес>).Value + 1 подойдет?
Автор: Virtualexx
Дата сообщения: 06.07.2006 12:02
Я наверное не так написал, но ничего не происходит:


Код:
Sub add()
'
' add Макрос
' Макрос записан 06.07.2006 (Alex)
'

'
Sheets("Лист2").Select
Cells("D2").Value = Cells("D2").Value + 1


End Sub
Автор: DONRU1
Дата сообщения: 06.07.2006 12:37
Virtualexx
надо было так написать
Cells(2, 4).Value = Cells(2, 4).Value + 1
или
Range("D2").Value = Range("D2").Value + 1

Автор: Virtualexx
Дата сообщения: 06.07.2006 13:29
DONRU1, Dr Eam, огромное спасибо!!!
Автор: zporuchik
Дата сообщения: 06.07.2006 14:40
Yuk
[more='CYR 2 LAT Translator]
'''CYR 2 LAT Translator
Public Function CYR2LAT(ByVal sCYR As String) As String
Dim stmp As String
Dim j As Long
Dim k As Long
Dim lcCYR As String
Dim ucCYR As String
Dim lcLAT As String
Dim ucLAT As String
Dim lcArrCYR() As String '''SZ_OF=0..31
Dim ucArrCYR() As String
Dim lcArrLAT() As String
Dim ucArrLAT() As String
Dim ci As Long
Dim ch As String
Dim F As Byte

lcCYR = "а,б,в,г,д,е,ж,з,и,й,к,л,м,н,о,п,р,с,т,у,ф,х,ц,ч,ш,щ,ь,ъ,ы,э,ю,я"
ucCYR = "А,Б,В,Г,Д,Е,Ж,З,И,Й,К,Л,М,Н,О,П,Р,С,Т,У,Ф,Х,Ц,Ч,Ш,Щ,Ь,Ъ,Ы,Э,Ю,Я"
lcLAT = "a,b,v,g,d,ye,zh,z,i,y,k,l,m,n,o,p,r,s,t,u,f,kh,ts,ch,sh,shch,~,'',y,e,yu,ya"
ucLAT = "A,B,V,G,D,Ye,Zh,Z,I,Y,K,L,M,N,O,P,R,S,T,U,F,Kh,Ts,Ch,Sh,Shch,~,'',Y,E,Yu,Ya"
lcArrCYR = Split(lcCYR, ",")
ucArrCYR = Split(ucCYR, ",")
lcArrLAT = Split(lcLAT, ",")
ucArrLAT = Split(ucLAT, ",")
k = Len(sCYR)
CYR2LAT = ""
For j = 1 To k
ch = Mid(sCYR, j, 1)
F = 0
For ci = 0 To 31
If ch = lcArrCYR(ci) Then
F = 1
ch = lcArrLAT(ci)
Exit For
End If
Next ci
If F = 0 Then
For ci = 0 To 31
If ch = ucArrCYR(ci) Then
F = 1
ch = ucArrLAT(ci)
Exit For
End If
Next ci
End If
CYR2LAT = CYR2LAT & ch
Next j

End Function[/more].
Автор: Virtualexx
Дата сообщения: 06.07.2006 17:05
Еще такая вещь: можно ли защитить ячейку от случайного попадания курсора и изменения значения. Все, что я не пробовал, выливается в то, что ячейка блокируется не только для изменения таким образом, но и для записи результата макроса...
Автор: Yuk
Дата сообщения: 06.07.2006 18:21
Virtualexx
Можно, но через задницу:
При изменении любой ячейки проверяем ее адрес:
Код: Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then
Application.Undo
End If
End Sub
Автор: SERGE_BLIZNUK
Дата сообщения: 07.07.2006 01:06

Цитата:
ячейка блокируется не только для изменения таким образом, но и для записи результата макроса...

ещё вариант (правда мне он не нравится, но, по эффективности он может быть не хуже, чем предложенный уважаемым Yuk:


Код:
ActiveSheet.Unprotect
ActiveCell.FormulaR1C1 = "www"
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
Автор: Yuk
Дата сообщения: 07.07.2006 01:59
SERGE_BLIZNUK

Цитата:
не хуже, чем предложенный уважаемым Yuk



Мне вот интересно, многие спрашивают, а потом пропадают. Это понимать как все получилось или не фига не получилось и забили?
Автор: RobinStone
Дата сообщения: 07.07.2006 04:31
Здравствуйте, уважаемый, All!

Подсткажите подалуйста, как можно проверить принадлежность ячейки к диапозону ячеек.
Т.е. событие OnCange передает мне объект Target - ячейку в которой оно произошло
Надо чтобы программа работала так:
if Target принадлежит Range("A5:D5") then
какой-то код
else
другой код
end if

большое спасибо))
Автор: SERGE_BLIZNUK
Дата сообщения: 07.07.2006 04:32
всем сорри за флуд...

Yuk


Цитата:
Мне вот интересно, многие спрашивают, а потом пропадают. Это понимать как все получилось

Ну, прежде всего, не все, как мы круглосуточно сидим на форуме ;-))
И тут надо подходить согласно старого принципа:
Если ваши родственники вам не звонят и не пишут, значит у них всё хорошо. ;-))

По поводу защиты ячейки. Задачка с виду очень простая, но сложно решаемая ;-))
Честно говоря, я не знаю, зачем Virtualexx это нужно ? (ну какое практическое назначение)

и ещё, если не секрет, у вас, господин Yuk, программирование на VBA - это хобби или профессиональное? Вы самоучка? И что за литературу/софт вы использовали для обучения?

Автор: Yuk
Дата сообщения: 07.07.2006 07:07
RobinStone
В шапке пример 3.

SERGE_BLIZNUK
скорее хобби (профессионально VBA заниматься - на фиг-на фиг), самоучка, изучал методом тыка, примерно как описал в шапке.
Цитата:
не все, как мы круглосуточно сидим на форуме
И то правда...

Автор: Virtualexx
Дата сообщения: 07.07.2006 09:09
Привет! Вы зря кипятитесь. Я бы обязательно написал. В общем отвечаю на вопросы. Нужно все это, т.к. коммерческий директор попросил придумать что-нибудь в excel что помогало бы определить эффективность рекламы компании. Т.о. я повспоминал чему учили когда-то и придумал программу для опроса клиентов, которая показывает статистику обращений по каждому виду рекламы. С вашей помощью я сварганил ее первый модуль, дальше планирую немного усложнить, но это как время будет. Если надо кому, с удовольствием отправлю по мылу. Пишите: djhmr@tut.by.

Цитата:
Честно говоря, я не знаю, зачем Virtualexx это нужно ?

Если вы про защиту ячейки, то для того, чтобы накрашенные менеджеры(-рицы) по продажам, нечаянно поставив чашку кофе на клавиатуру или мышь, не испортили задуманное =))

А по защите ячейки я использовал решение от SERGE_BLIZNUK, итого получилось:


Код: Sheets("Лист2").Select
ActiveSheet.Unprotect
Range("D4").Value = Range("D4").Value + 1
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True


End Sub
Автор: eowyn
Дата сообщения: 07.07.2006 11:52
Принесли файл с макросами, которые работали и перестали вдруг работать. Хочется глянуть, почему, а открыть или изменить макрос нельзя. В редакторе VBA при попытке открыть проект выскакивает сообщение project is unviewable. В окне выбора макросов макрос видно, но его можно только выполнить. Кнопка изменить не активна. При отключении макросов картина аналогичная.

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768

Предыдущая тема: Стоит ли переходить с Билдера на Делфи?


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