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

» Excel VBA (часть 2)

Автор: nick7inc
Дата сообщения: 17.07.2007 15:40
Может тебе тогда не нужно out_r? Если да, то массив заводи.


Добавлено:
vasiliy74
Пошаговую отладку делал? F8
Автор: vasiliy74
Дата сообщения: 17.07.2007 15:55
Всё дошло не туда поставил раотает теперь, хотя без проверки на существующие листы ну да ладно
Код:
If Not found Then
out_r.Cells(index, 1).Value = c1.Value
Sheets.Add.Name = out_r.Cells(index, 1).Value
Sheets("OTCHET").Select
index = index + 1

End If
Автор: nick7inc
Дата сообщения: 17.07.2007 16:05

Цитата:
Sheets("OTCHET").Select

А без этого не работает?
Автор: vasiliy74
Дата сообщения: 17.07.2007 16:06
Хелп пожауста, осилить не могу как теперь по признаку копировать из таблицы стоку?

Добавлено:
nick7inc

Цитата:
Sheets("OTCHET").Select

да работет не там тестил решил добавить

Добавлено:
А вот в поиске если не листе отчёт стоишь то

Код: Set some_sheet = Worksheets("OTCHET")
Set search_result = Cells.Find(What:="Наименование цен", After:=Start_search, LookIn _
:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _
xlNext, MatchCase:=False, SearchFormat:=False)
Автор: nick7inc
Дата сообщения: 17.07.2007 16:12
Не понял. Можно по-русски?
Автор: vasiliy74
Дата сообщения: 17.07.2007 16:15
да и создаётся один лист без названия видемо пустое поле есть в цикле последнее
Автор: nick7inc
Дата сообщения: 17.07.2007 16:15
Книга одна или несколько?
Автор: chalvs
Дата сообщения: 17.07.2007 16:16
Есть UserForm и TexBoxt

Надо вписать слово в TextBox чтобы потом нажымая кнопку "записать", слово перешло в Ячейку B3. Какой нада вписать код.

Вот файл http://slil.ru/24642104
Автор: vasiliy74
Дата сообщения: 17.07.2007 16:18
nick7inc

Цитата:
Не понял. Можно по-русски?


Код:
Set some_sheet = Worksheets("OTCHET")
Sheets("OTCHET").Select
Set Start_search = some_sheet.Cells(1, "A")

Set search_result = Cells.Find(What:="Наименование цен", After:=Start_search, LookIn _
:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _
xlNext, MatchCase:=False, SearchFormat:=False)

Set search_result = Cells.FindNext(After:=search_result)
Set search = search_result.Offset(3, 0)
Автор: nick7inc
Дата сообщения: 17.07.2007 16:21

Цитата:
да и создаётся один лист без названия видемо пустое поле есть в цикле последнее

Может так:

dim ws as worksheet

[...]

set ws=Sheets.Add
ws.name=out_r.Cells(index, 1).Value ' неверно

Добавлено:
chalvs

Цитата:
Надо вписать слово в TextBox чтобы потом нажымая кнопку "записать", слово перешло в Ячейку B3. Какой нада вписать код.

Private Sub CommandButton1_Click()
Лист1.Cells(3, "B").Value = UserForm1.TextBox2.Value
UserForm1.Hide
End Sub
Автор: vasiliy74
Дата сообщения: 17.07.2007 16:25

Цитата:
Может так:

dim ws as worksheet

[...]

set ws=Sheets.Add
ws.name=out_r.Cells(index, 1).Value

непомогло пустой лист всё равно создаёт наверно нужен if 0<> out_r.Cells(index, 1).Value
неравно я правильгно пишу? <>
Автор: nick7inc
Дата сообщения: 17.07.2007 16:28
У тебя она пустая же.

Добавлено:
Запутался, имя бери из с1.value
Автор: vasiliy74
Дата сообщения: 17.07.2007 16:37
ну увидел что out_r.Cells(index, 1).Value='" и потом всё это присваевается дальше, в самом конце, нужен IF как написать не равно?
Автор: nick7inc
Дата сообщения: 17.07.2007 16:39
Нет, смотри выше. Всё, надо отдыхать.

Добавлено:
out_r.Cells(index, 1).Value='" всегда
Автор: vasiliy74
Дата сообщения: 17.07.2007 16:40

Цитата:
set ws=Sheets.Add
ws.name=out_r.Cells(index, 1).Value ' неверно

непонятно как не ранdо если присвоение стоитвот он и присваивает ""
Автор: nick7inc
Дата сообщения: 17.07.2007 16:46
Так надо.

Код:
set ws=Sheets.Add
ws.name=c1.value
Автор: chalvs
Дата сообщения: 17.07.2007 16:47
nick7inc
Спасибо тебе!!!!!
Работает
Автор: vasiliy74
Дата сообщения: 17.07.2007 16:53
а для переноса строк из первичной таблицы в листы какие мы создали как копировать строку её можно поставить будет в первый перебор после того как создаётся лист в него начинают валится строки у которых значение c1.Value равно имени листа
Автор: nick7inc
Дата сообщения: 17.07.2007 16:55
chalvs
Не за что.
Только учти, что у тебя оба имени листа и внешнее и внутреннее одинаковые. В моем примере используется внутреннее, а если хочешь его передать в качестве параметра, то используй внешнее с помощью Sheets()
Автор: vasiliy74
Дата сообщения: 17.07.2007 17:11
nick7inc
да босс в программировании молодец мне очень помог!!! Спасибо!

вот хочу дальше разобраться
Наверно пока отдельным макросом написать, а потом при необходимости оптимезировать.
Задача: Перенести строки из таблицы влисты при условии что в колонке строки значение совпадает с именем листа.

наверно стоит определить переменные:
Dim ws As Worksheet, str As String
Dim in_r As Range, out_r As Range
а далее просто цикл по таблице просто и если один из её столбцов совпадает с именем листа то строку в тот лист, а можно предварительно и отсортировать, на всякий случай
Автор: nick7inc
Дата сообщения: 17.07.2007 17:21
vasiliy74
Самое простое - макрос записать и посмотреть.

[more]
Option Explicit

Sub Макрос1()
'
' Макрос1 Макрос
' Макрос записан 17.07.2007 (NNN)
'

'
Range("H14:I18").Select
Selection.Copy
Range("L14").Select
ActiveSheet.Paste
End Sub
[/more]

Но это будет побыстрее работать:

Код:
Dim source As Range, dest As Range, mysheet as worksheet

Set source = Range("A10:B12")
Set dest = Range("L14")
set mysheet = ActiveSheet
' или
' set mysheet = worksheets("Имя")

source.Copy
mysheet.Paste dest
Автор: vasiliy74
Дата сообщения: 17.07.2007 17:37

Цитата:
Самое простое - макрос записать и посмотреть

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

да по работе видно хватка железная , я и незнал раньше что в Excel программировать можно мне уже нравиться круто! потомучто необжиданно !!!



Автор: nick7inc
Дата сообщения: 17.07.2007 17:49
Можно управляющую программу держать не в файле с данными, а в отдельном XLS-файле (который можно со временем в AddIn - XLA переделать, запускать его из соотв. пункта меню Excel). Кнопки и собственное меню добавлять в Excel (что я и сделал на работе). Этот подход даёт преимущества, когда требуется исправлять ошибки и вносить новые функции, поскольку надо править только один файл, а не все файлы с данными.

Но учиться лучше в одном файле с данными.
Автор: vasiliy74
Дата сообщения: 17.07.2007 18:01
да я понял чо в глобально AddIn - это то к чему я приду я начинаю с нижних задач сейчас


Код:
Sub Макрос11()
Dim search_result As Range
Dim Start_search As Range
Dim some_sheet As Worksheet
Dim search As Range

Set some_sheet = Worksheets("OTCHET")
Set Start_search = some_sheet.Cells(1, "A")

Set search_result = Cells.Find(What:="Наименование цен", After:=Start_search, LookIn _
:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _
xlNext, MatchCase:=False, SearchFormat:=False)

Set search_result = Cells.FindNext(After:=search_result)
Set search = search_result.Offset(3, 0)

'Dim ws As Worksheet, str As String
'Dim in_r As Range, out_r As Range

Dim source As Range, dest As Range, mysheet As Worksheet

Set source = Range(search, search.End(xlDown))' но это только колонка, а как мне выделить все её строки? я же с ними буду работать, или нет?????
дальше не догал
Set dest = Range("L14")
set mysheet = worksheets("search.Offset(x,у )")'


source.Copy
mysheet.Paste dest
'конц руборд
Автор: chalvs
Дата сообщения: 17.07.2007 18:17


[q][/q]

Так
ActiveSheet.Cells(29, "B").Value = UserForm1.TextBox2.Value
Автор: vasiliy74
Дата сообщения: 17.07.2007 18:19
Вот нужно 2 пункт реализовать у меня понимание такое но что то с синтаксисом не то или идей...

Код:
Dim GeniralTable As Variant
Set GeniralTable = Range(Rows(search.Row:search.End(xlRight)),search.End(xlEnd))
Автор: chalvs
Дата сообщения: 17.07.2007 18:40

Цитата:
chalvs
Не за что.
Только учти, что у тебя оба имени листа и внешнее и внутреннее одинаковые. В моем примере используется внутреннее, а если хочешь его передать в качестве параметра, то используй внешнее с помощью Sheets()


Понял
Sheets("Лист1").Select


Добавлено:
nick7inc

Когда начинаю писать следуещее слово то TextBox записаное старое
надо после выполнеия кода TextBox исчезало старое !!!
Автор: vasiliy74
Дата сообщения: 17.07.2007 19:32

Код:
Sub CopyPaste()
Dim search_result As Range
Dim Start_search As Range
Dim some_sheet As Worksheet
Dim search As Range

Set some_sheet = Worksheets("OTCHET")
Set Start_search = some_sheet.Cells(1, "A")

Set search_result = Cells.Find(What:="Наименование цен", After:=Start_search, LookIn _
:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _
xlNext, MatchCase:=False, SearchFormat:=False)

Set search_result = Cells.FindNext(After:=search_result)
Set search = search_result.Offset(3, -1)


Dim table As Variant
Dim source As Range

Set end_search = Range(search.End(xlToRight), search.End(xlDown)).Offset(-2, 0)

Set source = Range(search, end_search)
'Range(search, end_search).Select'Тест выделения области таблицы прошёл успешно

End Sub
Автор: chalvs
Дата сообщения: 17.07.2007 22:09
Всем приве!
Ребята подскажите формулу
Есть диапазон A2:A10 и второй D2:D10
В этих диапазонах стоят числа,если очистить A5 и D5 то чтобы в этом
диапазоне стал серым цветом.
зарание блогодорю!
Автор: vasiliy74
Дата сообщения: 17.07.2007 23:54

Цитата:

expression.Sort(Key1, Order1, Key2, Type, Order2, Key3, Order3, Header, OrderCustom, MatchCase, Orientation, SortMethod, DataOption1, DataOption2, DataOption3)

мне нужно только определить кеу1 для source, это второй столбец... как правильно задать незнаю, пробовал по разному, непоолучается, пишет ошибку, например:

Код:
source.Sort (Columns(1, 2))

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133

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


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