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

» Excel VBA (часть 2)

Автор: SERGE_BLIZNUK
Дата сообщения: 09.03.2008 00:40
ol7ca

Цитата:
мне нужно чтобы функция брала имя текущего листа

послушайте, не могу понять, если Вы в формулу хотите вставить ссылку на ТЕКУЩИЙ лист, то ЗАЧЕМ?! Попробуйте вообще убрать имя книги и листа, тогда для Excel это и будет означать, что формула ссылается на текущий лист:

ws.Cells(i, 27) = "=VLOOKUP(RC[-3],C6:C8,3,FALSE)"

если я правильно понял Вас...
Автор: ol7ca
Дата сообщения: 09.03.2008 18:23
SERGE_BLIZNUK

это ссылка на лист с таким же именем в другом файле
мне нужно сравнить информацию в 2 файлах, которые имеют листы с одинаковыми названиями
и если названия строк совпадают, то вставить значения
быть может это можно как-то иначе решить?
Автор: DocBeen
Дата сообщения: 09.03.2008 20:09
Погорячился я с DoEvents...
все равно, замечаю что при обработке начинает скорость обработки падать и весьма существенно.
Так вот данные я решил обработать с помощью Массивов - и у меня такая же проблема что и ol7ca описывает на 85 странице.
Subscript out of range

Вставка Option Base 1 - ни к чему не приводит...
Автор: nick7inc
Дата сообщения: 09.03.2008 20:41
DocBeen
Цитата:
у меня такая же проблема что и ol7ca описывает на 85 странице.

ol7ca
Цитата:
Подскажите, пожалуйста,
[...]
For i = 0 To UBound(a)

Полный текст здесь.
Вообще-то это неправильно, также как и не совсем корректно использовать Option Base. Правильно так:

Код: a = Array("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12")
For i = LBound(a) To UBound(a)
Автор: DocBeen
Дата сообщения: 09.03.2008 21:53

Автор: Mint86
Дата сообщения: 10.03.2008 05:19
Подскажите пожалуйста кусочек кода который выводит определенную форму если выделена (активирована) определенная ячейка?
Автор: ol7ca
Дата сообщения: 10.03.2008 05:23
nick7inc

спасибо.


Цитата:
мне нужно чтобы функция брала имя текущего листа
Код:ws.Cells(i, 27) = "=VLOOKUP(RC[-3],'[1.xls]" & ws.Name & "'!C6:C8,3,FALSE)"

я вставил эту функцию как текст "'=VLOOKUP(RC[-3],'[1.xls]" & ws.Name & "'!C6:C8,3,FALSE)"
и имя текущего листа появилось на каждой странице
но потом я попытался сделать замену убрав " ' "
но тогда выскакивает ошибка тут "RC[-3]"
в общем никак.
пришлось вставлять руками(
но на будущее, я бы хотел знать решение такой задачи.

еще вопрос,
можно ли как-то проверить использование имен в книге?
я на одном листе присвоил ячейкам имена
далее на остальных листах я использую ссылки на эти имена
мне нужно чтобы все 100% имен были бы использованы и ни одно не пропущено.
как сделать такую проверку?
спасибо.
Автор: Mint86
Дата сообщения: 10.03.2008 06:08

Цитата:
Подскажите пожалуйста кусочек кода который выводит определенную форму если выделена (активирована) определенная ячейка?


Вот примерчик, подскажите что делается не так? И как правильно?

http://slil.ru/255628901
Автор: SAS888
Дата сообщения: 10.03.2008 08:52
ol7ca
Данный макрос покажет все имена в активной рабочей книге.

Код: Sub ShowNames()

Dim n As Name
For Each n In ActiveWorkbook.Names
MsgBox n.Name
Next n

End Sub
Автор: nick7inc
Дата сообщения: 10.03.2008 12:06
Mint86

Цитата:
http://slil.ru/255628901

Файл не найден.
Автор: Mint86
Дата сообщения: 10.03.2008 12:28

Цитата:
Файл не найден.


Проблема решена http://slil.ru/25563195

Еще один вопрос. Попробовал запустить на других машинах пишет что объект не установлен и всвязи с этим нет возможности запустить форму. Элемент (дополнение) Month View если я не ошибаюсь находится в c:\WINDOWS\system32\MSCOMCT2.OCX. Если скопировать данный файл на другую машуну и установить её в меню редактора Tools\References, форма начинает работать. Но планируется что данный документ будет использоваться на многих машинах и каждому объяснить зайди туда, скопируй это проблематично. Можно ли как нить автоматизировать данный процесс? Попытался найти с помощью монитора Regmon какие значения меняются в реестре при установке данного элемента, но не нашел. Может кто нить знает способ решения данной проблемы.

Добавлено:
Версия Excel 2003 SP3
Автор: ol7ca
Дата сообщения: 10.03.2008 17:26
SAS888

Цитата:
Данный макрос покажет все имена в активной рабочей книге.

спасибо


Добавлено:
SAS888

Цитата:
Sub ShowNames()

Dim n As Name
For Each n In ActiveWorkbook.Names
MsgBox n.Name
Next n

End Sub


этот код мне показывает все имена а их больше 2000.
а можно ли как-то проверить использование имен в книге?
я на одном листе присвоил ячейкам имена (лист1)
далее на остальных листах я использую ссылки на эти имена
мне нужно чтобы все 100% имен были бы использованы и ни одно не пропущено.
как сделать такую проверку: имена (лист1) сравнить с именами на остальных листах?
возможно ли это?
спасибо.
Автор: KIVforum
Дата сообщения: 11.03.2008 01:27
если не затруднит ..........

очень нужен пример работы с mscomm32.ocx с VBA ...
в частности приём данных из 232-порта ...
намучился уже ... иль описание работы с mscomm32.ocx ... а то у меня храмает под vba просто все ...
как не кручусь ... не прёт ...

зы. а с rsapi.dll кто-нибудь работал ... отправляю без вопросов ... а вот принять ... эх ... vba совсем забыл ...
Автор: Mint86
Дата сообщения: 11.03.2008 07:15
У кого нить есть (или где можно взять) календари на VBA но сделанные не с помощью элементов управления "Календарь" "Month View" и т.д.
Автор: visual73
Дата сообщения: 11.03.2008 08:59
Mint86
В надстройке PUP есть календари.
Автор: MEDBEDb GRIzzLY
Дата сообщения: 11.03.2008 09:45
Доброго времени суток.
Вопрос, довольно таки глупый, но он существует
Есть Книга, в ней написанные мною процедуры, создал собственную панель, в ней соотвественно кнопки, (создано не кодом, а лениво мышкой просто в Excel'e), так вот при нажатии кнопок, все работает, все замечательно. Но! Как только файл куда нибудь перемещен, все кнопки перестают работать на этой панели, ибо идет привязка к местоположению файла : 'C:\Documents and Settings\user\Desktop\Filename.xls'!Browser1.bt1_Click

Этот путь появляется только при копировании, как от него избавится? Каждый раз стирать - не предлагать

Легкий поиск не дал ответов, либо я не правильно ищу.
Автор: SAS888
Дата сообщения: 11.03.2008 10:31
MEDBEDb GRIzzLY
Если нужно, чтобы панели, кнопки и "привязанные" к ним макросы работали независимо от файла-источника - создайте надстройку и разместите код выполнения (и, соответственно, привязку) в ней. А если нет, то лучше всего, при открытии файла создавать (макросом) все, что нужно, а при закрытии все восстанавливать "взад".
Автор: Mint86
Дата сообщения: 11.03.2008 11:03
Прошу помочь решить проблему.
Суть описана в примере

http://slil.ru/25566189
Автор: ol7ca
Дата сообщения: 11.03.2008 16:50

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


с зависимыми ячейками я разобрлся так:
cell.Precedents.Interior.ColorIndex = 35
cell.Dependents.Interior.ColorIndex = 36

а есть ли какой-нибудь способ узнать используется ли ячейка в книге и сколько раз?
Автор: nick7inc
Дата сообщения: 11.03.2008 23:26
Mint86

Цитата:
Суть описана в примере

Посмотрел. Точно не понял в чём дело: после загрузки и сохранения ошибка перестала проявляться. Возможно включено что-то в References, чего есть на вашей машине, но нет у меня и других компах. Надо сравнить, какие галки стоят у вас и на проблемных компьютерах (ищите в редакторе VBA в меню->Tools->References).
Автор: Wukuze
Дата сообщения: 12.03.2008 13:50
Народ, помогите с синтаксисом , вот кусок кода
Range(" t ").Activate
Selection.Delete Shift:=xlUp
надо правильно задать выбранную строку, Range(" t ").Activate, t - переменная, и как ее выделить чтоб функция поняла что это переменная? Заранее благодарю за любую подсказку
Автор: visual73
Дата сообщения: 12.03.2008 14:51
Wukuze
а что, вот так не устраивает?

Код: Cells(i,j).Delete Shift:=xlUp
Автор: LomL
Дата сообщения: 12.03.2008 15:56
добрый день
кто нибудь может подсказать можно ли в Excel VBA сделать так что бы кнопка нажималась автоматически (событие), когда она создана в user form? если да то подскажите пожалуйста как.

Добавлено:
помогите пожалуйста

With Worksheets(1).Range("3:65000")
Set D = .Find(PartNumber, LookIn:=xlValues)
firstAddress = D.Address

вот часть кода где я ищу адресс после его определения я получаю его в виде "$A$111"
как мне скопировать строку с этим адресом?
Автор: taria
Дата сообщения: 12.03.2008 18:44
Ребята помогите пожалуйста. Задача такая есть книга в ней несколько листов, на которых отображается информация о студентах. Каждый лист имеет название по фамилии студента (например Иванов И.И.). И есть лист Список_студентов. Необходимо создать формочку, в которой есть ListBox с полосой прокрутки в котором отображается список студентов и при двойном щелке по которому открывается страница с данными о студенте.

И еще на этой формочке должно быть место для ввода (TextBox кожатся...) когда в нем пишеш фамилию студента , то она должна автоматически дополняться по первым буквам, и в это же время в ListBoxе курсор олжен перемещаться на эту фамилию. -- ЭТО САМОЕ ГЛАВНОЕ.

Автор: SnowMan80
Дата сообщения: 12.03.2008 18:48
Помогите сделать нумерацию после автофильтра.
Судь проблемы такова. Есть таблица из нескольких столбцов и кучей строк. Автофильтр применяется для того чтобы отсеять "пустые" строки у которых цифра в ячейке равна нулю т.е. не выводятся. Это все нормально работает. Но необходимо чтобы этот список был пронумерован попорядку, по возрастанию. Для того чтобы можно было его распечатать не привлевая дополнительные усилия.
Это можно сделать не прибегая к VBA?
Автор: ol7ca
Дата сообщения: 12.03.2008 18:59
помогите найти ошибку-
почему- то когда стоит On Error Resume Next, то ингда(не всгда) присваивается следующе по ходу значение. хотя ошибки в текущей ячейке нет.
а когда стоит On Error GoTo 0, то значение верное, но где-то дальше проблема и в итоге Err '13' Type mismatch в строке Set X =...

Dim ws As Worksheet

Application.DisplayAlerts = False
Application.ScreenUpdating = False

a = Array("1", "2", "3")
For k = 0 To UBound(a)
Set ws = Sheets(a(k))
If ws.Type = xlWorksheet Then
With ws

For i = 2 To ws.Range("AA65536").End(xlUp).Row
Set X = Workbooks("map3.xls").Sheets("TB").Columns(11) _
.Find(What:=ws.Cells(i, "AA"), LookAt:=xlWhole)
On Error Resume Next
If X Is Nothing Then
R = Range("K65536").End(xlUp).Row + 1
Cells(i).Copy Workbooks("map3.xls").Sheets("TB").Cells(R, "K")
Workbooks("map3.xls").Sheets("TB").Rows(R).Font.ColorIndex = 3
Else: Workbooks("map3.xls").Sheets("TB").Cells(X.Row, "L") = ws.Cells(i, "AB")
End If
Next
End With
End If
Next
End Sub
Автор: LightMike
Дата сообщения: 12.03.2008 21:30
Здравствуйте. В VBA я не сведущ, все больше Си, но понадобилось мне использовать такой вот макрос(чужой).

Код:
Sub Макрос1()
'
' Макрос1 Макрос
' Макрос записан 11.04.2006 (Андрей)
'
solver.xla

Sheets("Задача 1").Select
Range("E5").Select
Worksheets("solver.xla").Select
SolverOk SetCell:="$E$5", MaxMinVal:=1, ValueOf:="0", ByChange:="$B$4:$C$4"
SolverSolve
Sheets("Лист1").Select
Range("E4").Select
SolverOk SetCell:="$E$4", MaxMinVal:=1, ValueOf:="0", ByChange:="$B$4:$C$4"
SolverSolve
Sheets("Лист2").Select
Range("E4").Select
SolverOk SetCell:="$E$4", MaxMinVal:=1, ValueOf:="0", ByChange:="$B$4:$C$4"
SolverSolve
Sheets("Лист3").Select
Range("E4").Select
SolverOk SetCell:="$E$4", MaxMinVal:=1, ValueOf:="0", ByChange:="$B$4:$C$4"
SolverSolve
Sheets("Лист4").Select
Range("E4").Select
SolverOk SetCell:="$E$4", MaxMinVal:=1, ValueOf:="0", ByChange:="$B$4:$C$4"
SolverSolve
Sheets("Лист5").Select
Range("E4").Select
SolverOk SetCell:="$E$4", MaxMinVal:=1, ValueOf:="0", ByChange:="$B$4:$C$4"
SolverSolve
End Sub
Автор: nick7inc
Дата сообщения: 12.03.2008 22:41
LomL

Цитата:
можно ли в Excel VBA сделать так что бы кнопка нажималась автоматически

А зачем нажимать? Можно процедуру, которая вызывается при её нажатии, сделать Public (а не Private) и вызвать напрямую из кода:

Код: Sub ttt()

UserForm1.CommandButton1_Click

End Sub
Автор: ol7ca
Дата сообщения: 12.03.2008 23:41
nick7inc

Цитата:
почему- то когда стоит On Error Resume Next, то иногда(не всгда) присваивается следующе по ходу значение. хотя ошибки в текущей ячейке нет.

А если в отладчике по шагам проследить? Пробовали?

ошибка тут:
Set X = Workbooks("map3.xls").Sheets("TB").Columns(11) _
.Find(What:=ws.Cells(i, "AA"), LookAt:=xlWhole)
и дальше ничего не двигается
причина в наличии #N/A в искомых ячейках. но меня смутило то, как странно ведет себя
On Error Resume Next - присваевает следующее значение (и то не всгда).
когда я избавился от #N/A в искомых ячейках, все заработало. но поведение On Error я так и не понял.



Добавлено:
и еще я так и не разобрался с этим:

почему-то возникает ошибка (subscript out of range) в строке Set ws = Sheets(a(i))
хотя скрипт свою задачу выполняет.
и каковы правила записи
а то ошибка повторяется и в других примерах
Полный текст здесь.

For i = LBound(a) To UBound(a)
не помогает


Подскажите, пожалуйста.
спасибо.
Автор: AndVGri
Дата сообщения: 13.03.2008 03:54
LightMike
Подключи solver.xla в Tools/References VBE

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133

Предыдущая тема: Написание своего HyperTerminal для считывания данных


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