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

» Excel VBA (часть 3)

Автор: vikkiv
Дата сообщения: 22.12.2013 02:45
pas16
Код: Sub test(): Dim c As Range: For Each c In Selection: If Len(c) = 11 And c Like "S*" Then c = Mid(c, 2, 10)
Next c: End Sub
Автор: pas16
Дата сообщения: 22.12.2013 03:36
vikkiv, Спасибо огромное, все работает)
Автор: kukujaha
Дата сообщения: 23.12.2013 17:33
Всем привет)
Вопрос, наверно, поднимался и не раз, но я не нашел нужного мне решения, поэтому я надеюсь на Вашу помощь.
Имеются книги, в которых по несколько листов (от 5 до 20). Нужно, чтобы при помощи макроса происходило копирование всех листов со всех книг по порядку в новую книгу. Копирование листов должно происходить с ячейки А8 до строчки в столбце А, содержащей текст "Подитоги". Так же хочется, чтобы была возможность выбора книг, с которых нужно копировать. Ну и хочется комментарии к макросу)
Понимаю, что много хочу, но буду рад любому решению моей проблемы)
Заранее спасибо за помощь!)
Автор: Fsp050
Дата сообщения: 23.12.2013 21:11
согласно этой статьи http://www.excel-vba.ru/chto-umeet-excel/kak-sozdat-knopku-dlya-vyzova-makrosa-na-liste/
сделал себе кнопку в эксель листе.
Но как сделать так,чтобы при нажатии этой кнопки я попадал на вкладку лист3
http://rghost.ru/51165475
Автор: vikkiv
Дата сообщения: 23.12.2013 23:27
Fsp050
Код: Sub Button1_Click()
Sheets("Sheet3").Activate
End Sub
Автор: SAS888
Дата сообщения: 24.12.2013 05:48
kukujaha
Можно, например, так:
[more=Код]
Код: Sub CopyData()
Dim i As Long, j As Long, myPath As String, myName As String, x As Range
Dim wb As Workbook, ws As Worksheet, aws As Worksheet
Application.ScreenUpdating = False
With Application.FileDialog(msoFileDialogOpen)
.Title = "Выбор файлов для обработки"
.AllowMultiSelect = True
.ButtonName = "OK"
.Show
If .SelectedItems.Count = 0 Then Exit Sub
Set aws = ActiveSheet
For i = 1 To .SelectedItems.Count
Set wb = Workbooks.Open(Filename:=.SelectedItems(i), AddToMRU:=False)
For j = 1 To wb.Sheets.Count
Set x = wb.Sheets(j).[A:A].Find("Подитоги")
If Not x Is Nothing Then
wb.Sheets(j).Rows("8:" & x.Row).Copy aws.Cells(Rows.Count, 1).End(xlUp).Offset(1)
End If
Next
wb.Close False
Next
End With
End Sub
Автор: Fsp050
Дата сообщения: 24.12.2013 18:05
vikkiv

спс, но что-то опять ошибка. Макрос записал, нажимаю на кнопку


вот скрин с макроса


что опять не так-то?
Автор: vikkiv
Дата сообщения: 24.12.2013 18:55
Fsp050 RMB по кнопке, "Assign Macro" (незнаю что там в русской версии), выбрать макрос (или записать новый через "Record"), у тебя в окне VBA название написано Button1_Click() , а надо Кнопка1_Щелчок() , т.е. либо поменять в назначении макроса к кнопке - имя, либо изменить название макроса (но чтобы дубликатов небыло) в VBA редакторе.
Автор: Fsp050
Дата сообщения: 26.12.2013 17:01
vikkiv
ясно, спасибо)
Автор: gustavius
Дата сообщения: 28.12.2013 10:13
Подскажите пожалуйста формулу или штатную операцию:
если ячейка А1 содержит "слолвоА" или "словоБ" или "Слово...", то текущая ячейка B1=X

то есть пометить ячейки содержащие любое слово из списка.

Может это есть в Plex(не нашел там) или подобных приблудах.

MS Office 2013
Автор: aidomars
Дата сообщения: 28.12.2013 11:15
gustavius

Код: For each n in Array("СловоА", "СловоВ")
If Instr(1, Cells(1,1), n) > 0 then Range("B1") = X
Next
Автор: gustavius
Дата сообщения: 28.12.2013 11:18
Спасибо! Я так понял это не формула, а макрос. Формулой нельзя? С макросами ранее не работал, но попробую.
Автор: aidomars
Дата сообщения: 28.12.2013 11:39
По формулам тебе надо в другую тему, см. шапку.
Автор: Kukujashka
Дата сообщения: 29.12.2013 13:01
SAS888
Попробовал Ваш код, и выскочила ошибка: run-time error 438. Object doesnt support this property or method.
Ошибка на строчке Set x = wb.Sheets(j).Find("Подитоги")
Можно как-нибудь поправить это?
Автор: SAS888
Дата сообщения: 30.12.2013 03:54
Kukujashka

Цитата:
Ошибка на строчке Set x = wb.Sheets(j).Find("Подитоги")

В моем коде нет такой строки. Посмотрите внимательнее:

Код: Set x = wb.Sheets(j).[A:A].Find("Подитоги")
Автор: Kukujashka
Дата сообщения: 30.12.2013 17:23
SAS888
Спасибо, теперь работает)
Автор: DocBeen
Дата сообщения: 24.01.2014 09:40
Доброго всем времени суток уважаемые коллеги!!!
Столкнулся вот с какой задачей:
есть лист - в котором огромная таблица, в первом столбце которого находятся дата в формате день месяц год, час минута, так вот необходимо эти данные разместить на разных столбцах, при том таким образом чтоб листы именовались как месяц, и данные были там соответствующие

как все это реализовать на VBA
Автор: aidomars
Дата сообщения: 24.01.2014 16:19
DocBeen
Непонятно написано, разместить на разных столбцах - на каких разных? Данные были там соответствующие - чему соответствующие? Чтоб листы именовались как месяц - а как месяц именуется? Январь, 01, а может January?
Написал бы понятнее, а еще лучше б пример приложил, давно б ответ дали.
Автор: DocBeen
Дата сообщения: 27.01.2014 06:11
aidomars Добрый день в очередной раз,

а пример примерно такой:

на первом листе вот такие данные:

01-01-2013 данные
...
05-01-2013 данные
...
...
03-05-2013 данные
....
...
31-12-2013 данные

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

Как то так.
Автор: aidomars
Дата сообщения: 27.01.2014 18:29
DocBeen
Теперь более менее понятно

Код: ' 1-й столбец должен быть отсортирован
i = 1
With ThisWorkbook.Sheets(1)
Do While .Cells(i, 1) <> ""
If MonthName(Month(.Cells(i, 1))) <> месяц Then
месяц = MonthName(Month(.Cells(i, 1)))
ActiveWorkbook.Sheets.Add After:=Worksheets(Worksheets.Count)
ActiveSheet.Name = месяц
a = 1
End If
c = 1
Do While .Cells(i, c) <> ""
ActiveWorkbook.Sheets(месяц).Cells(a, c) = .Cells(i, c)
c = c + 1
Loop
a = a + 1
i = i + 1
Loop
End With
Автор: DocBeen
Дата сообщения: 27.01.2014 18:41
aidomars
А как можно при копировании сохранить еще и формат ячейки?

а так - ваш пример работает просто замечательно
Автор: aidomars
Дата сообщения: 28.01.2014 06:30
DocBeen
Если формат даты, то так: cdate(Дата)
Автор: mammuthus
Дата сообщения: 28.01.2014 16:10
Приветствую. Есть большая (больше 6000 строк) таблица XLS вида:
Дата/Время    Фамилия    Имя    Отчество    Должность     Направление

Мне нужно написать макрос, суть такова:
1. Пользователь вводит фамилию в текстовое поле
2. Нажимает кнопку "Поиск записей"
3. В текстбокс падают строки, где присутствует введенная фамилия
4. При желании, пользователь нажимает на кнопку Запись в файл, происходит экспорт данных по этой фамилии

Логику я себе представляю, но с VBA столкнулся в первый раз.
Интересует:
1. Как сравнивать значение переменной с ячейкой и выводить нужную строку в текстбокс в зависимости от результата
2. Есть ли какие-либо проблемы с кириллицей
3. Экспорт данных в файл (возможно ли в txt, возможно ли создать новый xls)
Автор: NJCorp
Дата сообщения: 29.01.2014 00:33
mammuthus
сравнить примерно так

Код: if Sheets("Лист1").Range("A1").Value = UserForm1.TextBox1.Value then
'Выполнить необходимые действия при совпадении
else
'Выполнить необходимые действия при несовпадении/или пропустить вообще
end if
Автор: aidomars
Дата сообщения: 29.01.2014 06:04
NJCorp
Chr(13)+Chr(10), VbNewLine
Автор: mammuthus
Дата сообщения: 29.01.2014 07:59
Понятно, спасибо.
Но мне нужно искать то, что ввел пользователь во всех строках и выводить в итоге те строки, где есть вхождение.
Как это реализовать?
Автор: aidomars
Дата сообщения: 29.01.2014 10:08
mammuthus

Код:
For i = 1 to 100
if Sheets("Лист1").Range("A" & i).Value = UserForm1.TextBox1.Value then
'Выполнить необходимые действия при совпадении
else
'Выполнить необходимые действия при несовпадении/или пропустить вообще
end if
Next
Автор: mammuthus
Дата сообщения: 29.01.2014 10:16
aidomars
Нет совпадений. Всегда срабатывает код в Else, хотя данные заведомо верны
Автор: aidomars
Дата сообщения: 29.01.2014 12:57
mammuthus, ну так проверь значения слева и справа от знака =, может у тебя вообще TextBox1 не существует. Или у листа имя другое. Тут телепатов нет.
Автор: mammuthus
Дата сообщения: 29.01.2014 14:55

Цитата:
хотя данные заведомо верны

Заменил название и имя текстбокса на свои, иначе бы не писал репорт.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127

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


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