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

» Excel VBA

Автор: The okk
Дата сообщения: 20.11.2006 13:32
Двоеточие после Else ставить не надо.
И неплохо бы, наверное, контролировать, какой конкретно диапазон изменился - может, интересующие тебя ячейки не менялись, а ты все равно будешь проверять на больше-меньше - у тебя ж ячейка не одна такая, насколько я понял.
Автор: SERGE_BLIZNUK
Дата сообщения: 20.11.2006 13:36
alin скорее всего зацикливается, потому как измение ячейки вызвает функцию Worksheet_Change.
Смотри ответ в шапке Зацикливание в функции Change или SelectionChange (нужно выключить обработку событий- Application.EnableEvents = False , а потом включить.)
Автор: The okk
Дата сообщения: 20.11.2006 13:38
SERGE_BLIZNUK
Не, так не зацикливает. И было бы глупо, если бы зацикливало, поскольку в зависимости от событий нужно в 99% случаев вносить изменения именно в сам лист.
....
А, точно. Зацикливает. Семен Семеныч! Надо ж проверять "изменилось-не изменилось", а тут проверка на больше-меньше. Ясное дело, что зациклит, если BA3 > 0.
Автор: SERGE_BLIZNUK
Дата сообщения: 20.11.2006 13:39

Цитата:
И неплохо бы, наверное, контролировать
The okk прав. Нужно бы ещё и проверять, что поменялось ( проверять параметер ByVal Target As Range )
Автор: Troitsky
Дата сообщения: 20.11.2006 20:00
OOD

Цитата:
Всё работает, всё добавляеться, но после выполнения
ActiveSheet.Pictures.Insert TextBox1.Value
картинка дублируется
дублирование происходит потому, что это:
Код: ActiveSheet.Pictures.Insert TextBox1.Value
ActiveSheet.Shapes.AddPicture TextBox1.Value, True, True, 97, 7, 85, 114
Автор: OOD
Дата сообщения: 20.11.2006 21:56
Troitsky
всё спасибо больщущее , вы очень помогли серьёзному делу , а именно помогли 10 000 человекам
Единственное неудобство ,что Value в TextBox1 нужно писать четким т.е. допустим D:\73.gif, , плохо , что нельзя сделать Маску ввожа 'D:\'+'TextBox1.Value'+'.gif' как в делфи , но ничего и так нормально , ускорили процесс раз в 200

Автор: SERGE_BLIZNUK
Дата сообщения: 21.11.2006 00:14
OOD
ну, мне до уровня господ Yuk и Troitsky ещё расти и расти...
Однако, отчего же
Цитата:
что нельзя сделать Маску ввода
?
можно. Причём почти точно так, как вы и написали ;-)))
ActiveSheet.Shapes.AddPicture "D:\" & Trim(ActiveSheet.TextBox1.Value) & ".gif" ....
[more]

Код:
Sub AddPicture()
PictName = "D:\" & Trim(ActiveSheet.TextBox1.Value) & ".gif"
PictName = Trim(ActiveSheet.TextBox1.Value)
If Len(PictName) = 0 Then
MsgBox (" Совсем нет имени картинки... ")
Exit Sub
End If
If InStr(1, PictName, ":\") = 0 Then
PictName = "D:\" + PictName
End If
If InStr(1, PictName, ".gif") = 0 Then
PictName = PictName + ".gif"
End If
Set fs = CreateObject("Scripting.FileSystemObject")
Set fs = CreateObject("Scripting.FileSystemObject")
If Not fs.FileExists(PictName) Then
MsgBox (" Не найден файл " & PictName)
Set fs = Nothing
Exit Sub
End If
ActiveSheet.Shapes.AddPicture PictName, True, True, 90, 4, 705, 430
Set fs = Nothing
End Sub
Автор: OOD
Дата сообщения: 21.11.2006 08:01
SERGE_BLIZNUK
Troitsky
Спасибо, о Великие джидаи -всё отлино работает , просто замечательно , ура товаристчи
Автор: The okk
Дата сообщения: 21.11.2006 12:37
Как получить номер (индекс) кодового модуля текущего листа? Хочу в лист обработку события скриптом прописать.
Отбой тревоги. Нашел. Надо по имени обращаться VBcomponents("Лист" & номер_листа)
Хорошо, что лист у меня последний (равный количеству листов), а то дейтсвительно надо было бы номер листа как-то получать.
Автор: Anton T
Дата сообщения: 21.11.2006 12:53
The okk
Sub ttt()
Dim book As Worksheet
For Each book In Worksheets
MsgBox book.Name
Next book
End Sub
Если в листе всего 3, то вызывается 3 раза.
Автор: The okk
Дата сообщения: 21.11.2006 13:46
Другой вопрос - что такое Me? Me - это объект, активный в данный момент времени?

Добавлено:
Anton T
Не, имя-то я знаю Нужен именно индекс. Например, лист с именем "2" может быть в книге хоть десятым, хоть тысячным .
Автор: PavelO
Дата сообщения: 21.11.2006 14:07
Здарово, Troitsky. Как дела?
Огромное спасибо за ссылку о перемещении и нажатии мышки.
А может ты знаешь как использовать wheel mouse (колесо прокрутки мышки) для скрола UserForm'ы или MultiPage'а. Если знаешь скажи пожалуйста, а то я тут код написал для этой цели, но думаю, что есть более простой вариант.
Автор: The okk
Дата сообщения: 21.11.2006 14:17
Вот еще вопрос: надо, чтобы по наведению на ячейку ее содержимое отображалось в виде подсказки (не путать с примечанием/comment). Это свойство приложения или ячейки? И как оно называется?
Автор: kramrus
Дата сообщения: 21.11.2006 14:17
СПАСИБО добрые жители данного сайта!
Все работает.
Век живи век учись.?
В продолжение темы:

Sub Макрос23()
For i = 1 To 100
Range("СA" + CStr(i * 4 + 21)).Formula =INDEX('D:\[Октябрь 2006.xls]ОШ №20'!$F$19:$BZ$418,MATCH(F19,'D:\[Октябрь 2006.xls]ОШ №20'!$F$19:$F$418,0)+3,57)
Next
End Sub

А как в формуле сделать так чтобы в "MATCH(F19" - 19 менялось на: + CStr(i * 4 + 21),
тоесть вместо 19 мне нужно получить с 19 по 419 с промежутком через 4 строки.
И ещё. Можно ли написать макрос:
при отсутствии значение в столбцах СА и СВ и СD "n"-строки, строку спрятать (скрыть визуально и для печати)
СПАСИБО еще раз.
Автор: The okk
Дата сообщения: 21.11.2006 14:29
kramrus

Цитата:
А как в формуле сделать так чтобы в "MATCH(F19" - 19 менялось на: + CStr(i * 4 + 21)

Если формат позволяет, вместо F19 пиши Cells(i * 4 + 21,6). Сия запись ссылается на ячейку со строкой i * 4 + 21 и шестым по счету столбцом. Cells работает с номерами (то бишь с числами), поэтому тут CStr не нужно
Автор: alin
Дата сообщения: 21.11.2006 14:42
SERGE_BLIZNUK
The okk
Сасибо, тормоза прекратились. Но как контролироватья не знаю.

Уважаемые, помогите пожалуйста довести до конца модуль, с VBA у меня познания минимальны.
Имеются ячейки, допустим:A1, A2, ... A4, в которых находятся данные.
Мне необходимо следующее: указывая (или выбирая из списка) в ячейке B1 материал (в текстовом виде), в ячейки: C1, D1, …F1 копировались данные из ячеек A1, A2, ..A4.
Далее, указывая материал в ячейке B2, в ячейках: C2, D2, …F2 производился расчет С2=A1-C1, D2=A2-D1,… F2=A4-F1.
Затем, указывая материал в ячейке B3, в ячейках: C3, D3, …F3 производился расчет С3=A1-C2, D3=A2-D2,… F3=A4-F2… и т.д.
Заранее благодарен!
Автор: The okk
Дата сообщения: 21.11.2006 14:45

Цитата:
при отсутствии значение в столбцах СА и СВ и СD "n"-строки, строку спрятать (скрыть визуально и для печати)

private sub Hide()
Dim Rowcounter as long
for rowcounter = 1 to usedrange.rows.count
if Cells(rowcounter, тут_номер_столбца_CA)=0 and _
Cells(rowcounter, тут_номер_столбца_CB)=0 and _
Cells(rowcounter, тут_номер_столбца_CD)=0 then
Range(Cells(rowcounter,1)).entirerow.hidden = true
next
end sub

Примерно так. Если все нули, то ячейки будут спрятаны.
номера столбцов мне считать лениво

Добавлено:
alin
Может, я просто не до конца понял, но... а формулами этого сделать нельзя?
Автор: kramrus
Дата сообщения: 21.11.2006 15:12
The okk
День добрый!!!
Пишу макрос
Sub Макрос23()
For i = 1 To 32
Range("CA" + CStr(i * 4 + 21)).Formula = "=INDEX('D:\[Октябрь 2006.xls]ОШ №20'!$F$19:$BY$418,MATCH(Cells(CStr(i * 4 + 21),6),'D:\[Октябрь.xls]ОШ №20'!$F$19:$F$418,0)+2,57)+INDEX('D:\[Сентябрь 2006.xls]ОЩ №20'!$F$19:$BZ$418,MATCH(Cells(CStr(i * 4 + 21),6,'D:\[Сентябрь 2006.xls]ОШ №20'!$F$19:$F$418,0)+3,57)"
Next
End Sub
Вместо F19 Cells(CStr(i * 4 + 21),6)

И не работает ?????
Выдыет ИМЯ?
Автор: alin
Дата сообщения: 21.11.2006 16:59
The okk
Можно (=ЕСЛИ(ЕТЕКСТ(B1);A1;""))
Хотел макрос довести до ума...
Автор: Troitsky
Дата сообщения: 21.11.2006 22:32
The okk

Цитата:
Нужен именно индекс. Например, лист с именем "2" может быть в книге хоть десятым, хоть тысячным
Не понял, что требуется. Это что ли:
Код: Worksheets("Лист1").Index
Автор: The okk
Дата сообщения: 22.11.2006 05:59
Troitsky
Угу. Index. Видимо, невнимательно в Обжект Броузере смотрел.

Добавлено:
Troitsky


Цитата:
Range("B2").Hyperlinks.Add _
Anchor:=Range("B2"), _
Address:="", _
ScreenTip:=Range("B2").Value, _
TextToDisplay:=Range("B2").Value

Так получается циклическая ссылка. Да и текст отображается в виде гиперссылки (синий и подчеркнутый).
Ну вроде было же в экселе такое. Чтобы если надпись не умещается, можно было навести на нее мышь и всплывала подсказка с полной надписью.

Добавлено:
И еще - когда задаю в "разметке страницы" границы страниц, они остаются видны при переходе в номальный режим. Как сделать, чтобы границы страниц не отображались на обычном виде.
Автор: Troitsky
Дата сообщения: 22.11.2006 07:33
The okk

Цитата:
Так получается циклическая ссылка. Да и текст отображается в виде гиперссылки (синий и подчеркнутый).
Я к тому и говорю, что можно _попробовать_ поиграться ибо это очень кривое решение
Кстати, никто не мешает сделать ссылку без подчеркивания и стандартным цветом.
Автор: The okk
Дата сообщения: 22.11.2006 08:22
Troitsky
Я как-нибудь проще хотел...
Автор: kramrus
Дата сообщения: 22.11.2006 10:58
Troitsky

Цитата:
А как в формуле сделать так чтобы в "MATCH(F19" - 19 менялось на: + CStr(i * 4 + 21)

эта формула в макросе. Вставил и не работает?
Автор: The okk
Дата сообщения: 22.11.2006 11:02
А что за метод ClearNotes у объекта Range? - ClearComments знаю, а ClearNotes - ...?
И где в экселе ставить галочку, чтоб на события реагировал?
Автор: Ilyansk
Дата сообщения: 22.11.2006 11:32
kramrus
если в ячейки вставлять формулы, генерируемые макросом, то делают так

Код:
range(<адрес ячейки, типа "F1">).formula="....MATCH(F" & CStr(i * 4 + 21) & ",'D:...."
Автор: PavelO
Дата сообщения: 22.11.2006 12:11
Troitsky, я имел ввиду менять положение ScrollTop колесом мышки, спасибо за ссылку, только вот что-то не работает этот код. Во-первых Load, Unload (нет таких событий на форму в vba). ОК. Ставим на другие события (initialize, terminate или activate, deactivate), и тут же получаем ошибку "Method or data member not found".
Автор: kramrus
Дата сообщения: 22.11.2006 12:21
УРА РАБОТАЕТ !!!
Спасибо всем, кто помогал!!!!!!!!!!
Главное не спишить!
Внимательность друг програмиста!
Когда копировал расчет по фрмуле i*4+21, допустил ошибку.
Автор: The okk
Дата сообщения: 22.11.2006 13:32
Что за Value2 у объекта Target?

Добавлено:
Так, с Notes вроде ясно. "Notes и Comments - найди 10 отличий". Я не нашел.
Похоже, Notes нужны только для совместимости.
Автор: Deni005
Дата сообщения: 22.11.2006 16:34
Как сделать так чтобы при вкл защите в меню сервис ячейки были защищены, а кнопки работали?
Возможно я че-то не догоняю.

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768

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


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