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

» Excel VBA (часть 3)

Автор: Oyger
Дата сообщения: 21.09.2011 16:53
steemi
Опишите переменную как текстовую: Dim yach as String
А далее: yach = "A" & i
И опишите толком массив: Dim mass(1 To 6) As Integer
Автор: Legio
Дата сообщения: 21.09.2011 16:53
steemi

Цитата:
можна ли строки склеивать знаком +?

Строки -- можно, но не стоит, VBA от большого ума всё, что похоже на числа, попробует этим плюсом сложить. Лучше использовать &


Цитата:
так понимаю что число нада перевести в строку, а как?

CStr(<число>)


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

В вашем случае:

Код: "A" & i
Автор: steemi
Дата сообщения: 21.09.2011 16:54
дак я уже все заменил
указывает вот на эту строчку
Автор: rrromano
Дата сообщения: 21.09.2011 16:55
Я вам уже ответил в другой теме

Быстро отладил, но код особо не менял - сами уж красивости наведите )))

Sub &#202;&#237;&#238;&#239;&#234;&#224;1_&#217;&#229;&#235;&#247;&#238;&#234;()
Dim mass(6) As Integer
Dim yach As String
Dim znah As Integer
Dim k As Integer
Dim min As Integer
Dim max As Integer
Dim summa As Integer

For i = 1 To 6
yach = "A" & CStr(i)
znah = Range(yach)
mass(i - 1) = znah
Next



max = mass(0)
min = mass(0)
For y = 1 To 6
k = mass(y - 1)
If max < k Then
max = k
End If
If min > k Then
min = k
End If
Next
summa = 0
For j = min To max
summa = summa + j
Next
MsgBox "&#241;&#243;&#236;&#236;&#224; = " & CStr(summa)
End Sub
Автор: Oyger
Дата сообщения: 21.09.2011 16:56
steemi
И еще желательно выкладывать не просто код со словами "здесь ошибка". А объяснить народу задачу данного кода.
А так... я глазами продужал, что увидел - то и сказал. Откуда я зная что Вам надобно от этого кода...
Автор: asbo
Дата сообщения: 21.09.2011 16:56
* а как мне скрепить строковую и числовую в одну строчку,
В данном случае yach = "A" & i
Но yach -то объявлена как Integer... А надо, как String

И все равно не будет работать Range(yach).
Надо Range(Chr(34) & yach & Chr(34))
Сорри. К концу дня крыша поплыла :(

* так понимаю что число нада перевести в строку, а как?
В общем случае CStr(i). Нюансы - по задаче

* и можна ли строки склеивать знаком +?
Мона, но не нуна. Нуна использовать &
Автор: Legio
Дата сообщения: 21.09.2011 17:00

Цитата:
Надо Range(Chr(34) & yach & Chr(34))

Range("""" & yach & """") несколько нагляднее.
Автор: steemi
Дата сообщения: 21.09.2011 17:00
всем пасиб все понял!
Автор: Oyger
Дата сообщения: 21.09.2011 17:03
asbo


Цитата:
И все равно не будет работать Range(yach).
Надо Range(Chr(34) & yach & Chr(34))


Если Yach описана как String - будет работать. И хорошо...
Не сбивайте столку человека.
Автор: asbo
Дата сообщения: 21.09.2011 17:05
Oyger, да поправил уже.
Автор: rrromano
Дата сообщения: 21.09.2011 17:10
Да открыть Ёксель и отладить - 5 минут. А потом можно и про красивости поговорить )))
Автор: asbo
Дата сообщения: 21.09.2011 17:11
Legio

Цитата:
Range("""" & yach & """") несколько нагляднее.

Это ошибка была (я поправил), но ...

... если абстрактно о таких конструкциях, то я предпочитаю именно через Chr - восприятие сильно зависит от шрифта, который используется в редакторе, разрешения экрана, да и просто его качества. А если в середине апострроф ' будет или его брат ` или подряд они пойдут... С использованием Chr читается однозначно.
Автор: rrromano
Дата сообщения: 21.09.2011 17:23
asbo

yach = "A" & CStr(i)
znah = Range(yach)

yach как String

И всё.
Автор: asbo
Дата сообщения: 21.09.2011 17:51
rrromano

Цитата:
yach = "A" & CStr(i)
znah = Range(yach)

yach как String

И всё.

Зачем это мне?
Автор: vit_1999
Дата сообщения: 21.09.2011 19:36
Привет всем!
ПРОШУ ПОМОЩИ. Есть два макроса, один ищет последнюю строку с текущей датой, другой-первую строку. КАК ВЫДЕЛИТЬ ДИАПАЗОН ЭТИХ СТРОК?

Sub FindCurrentDate()
' производится поиск последней ячейки, содержащей текущую дату
dn = DateValue(Now): Row = 0
Dim cell As Range
For Each cell In ActiveSheet.UsedRange.Columns(1).Cells
cv = cell.Value: If IsDate(cv) Then If cv = dn Then cell.EntireRow.Activate: Row = cell.Row
Next
End Sub

Sub CurrDate()
On Error Resume Next
rData = Columns(1).Find(Date, LookIn:=xlValues).Row
Rows(rData).Activate
End Sub
Автор: rrromano
Дата сообщения: 21.09.2011 21:41

Цитата:
Зачем это мне?

Да так, поправил просто. )
Автор: aidomars
Дата сообщения: 21.09.2011 22:04
vit_1999 типа того
Range(cells(row,column),cells(row,column)).select
Автор: asbo
Дата сообщения: 21.09.2011 22:40
rrromano, спасибо. Только в следующий раз, когда будешь поправлять, не сочти за труд - перечти посты выше, ОК? Да и на время постов не грех иногда посмотреть...
Автор: rrromano
Дата сообщения: 22.09.2011 09:01
asbo
На работе я. Иногда не хватает времени. Постараюсь быть повнимательнее. )
Автор: vit_1999
Дата сообщения: 22.09.2011 09:06
aidomars Спасибо, но не получилось.
Я наверное свой вопрос не правильно задал, мне необходимо выделить все строки где находится текущая дата.
Автор: Oyger
Дата сообщения: 22.09.2011 09:29
vit_1999
Rows(XXX & ":" & YYY).Select
Автор: asbo
Дата сообщения: 22.09.2011 09:30
vit_1999
Постарайся как-нибудь по-человечески задать вопрос, а? Вначале ты спрашиваешь "как выделить диапазон этих строк?", потом "мне необходимо выделить все строки где... " Так строки (по-отдельности) или диапазон?

И что эти две процедуры? В каждой из них есть Activate. В какой последовательности они выполняются?... Это что значит Row = 0, а потом Row = cell.Row? Row - зарезервированнное в данном случае слово.

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

Бзв - почини капс на клаве. Что же, мне орать вместе с тобой? Как секритутка переписываю твой текст.
Автор: vit_1999
Дата сообщения: 22.09.2011 10:03
Oyger Спасибо помогло.
asbo Не ругайся сильно, ну молод я ещё в этом.
Мне необходимо выделить все строки которым они принадлежат, по-отдельности.

Вот это работает, но если в столбце попала не текущая дата, то макрос тоже её выделяет
Sub FindCurrentDate()
On Error Resume Next
rData = Columns(1).Find(Date, LookIn:=xlValues).Row
Rows(rData).Activate
dn = DateValue(Now): Row = 0
Dim cell As Range
For Each cell In ActiveSheet.UsedRange.Columns(1).Cells
cv = cell.Value: If IsDate(cv) Then If cv = dn Then cell.EntireRow.Activate: Row = cell.Row
Rows(rData & ":" & Row).Select
Next
End Sub

Автор: Oyger
Дата сообщения: 22.09.2011 10:35
vit_1999
Перед обработкой сначала отсортируйте данные по дате. Это проще, чем извращаться макросом...
Автор: asbo
Дата сообщения: 22.09.2011 10:37
vit_1999
Просматривает столбец 1 на предмет совпадения ячеек с текущей датой. Если таковые есть - выделяет строки, их содержащие.

Код:
Sub sb_NowSelect()
Dim rDates As Range
Dim dDate As Date
Dim i&, lCnt&
lCnt = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
dDate = Now
For i = 1 To lCnt
If Cells(i, 1).Value = dDate Then
Select Case rDates Is Nothing
Case False: Set rDates = Union(rDates, Cells(i, 1))
Case True: Set rDates = Cells(i, 1)
End Select
End If
Next
If Not rDates Is Nothing Then rDates.EntireRow.Select
End Sub
Автор: vit_1999
Дата сообщения: 22.09.2011 12:22
asbo Спасибо, огромное всем
только я чуть изменил
dDate = DateValue(Now)
Автор: asbo
Дата сообщения: 22.09.2011 12:34
vit_1999
Ну это дело хозяйское, это же рыба.
Только надо обязательно понимать, что с чем сравниваешь - как хранится дата - как дата или как дата-время. С учетом этого, при сравнении, левую часть тоже надо привести:
dDate = DateValue(Now)
' ....
If DateValue(Cells(i, 1).Value) = dDate Then
Автор: vit_1999
Дата сообщения: 22.09.2011 19:05
Ещё раз большущее спасибо всем!
ещё поможите с задачкой?
Нужно из двух закрытых книг вытащить данные и суммировать их.
1. В столбце найти все текущие даты и с суммировать значения столбца, например, "D" - одна книга.
2. Из другой книги - вытащить сумму из диапазона "B2:B5" и общую сумму из этих книг показать.
Автор: asbo
Дата сообщения: 22.09.2011 23:07
Для одной кгиги - внутри цикла, если нашел дату:
lSum& = lSum& + Cells(i, 1).Offset(lRow&, lCol&)

После цикла:
Range("B8").Value = lSum&
Range("B9").Formula = "=СУММ(B8, B2:B5)"

Перед циклом:
lSum& = 0
Автор: Teleri
Дата сообщения: 25.09.2011 11:42
возможно ли сделать макрос на создание гиперсылок?
смысл такой.. есть один лист в котором вынесены данные из ячеек с целой кучи листов... как бы сводка по всему документу.. на этом заглавном листе в ячейках проставлены гиперссылки чтобы можно было переходить на тот конкретный лист из которого взята цифра.. таблицы в куче листов все одного формата.. (однотипные)..

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

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127

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


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