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

» Excel VBA (часть 2)

Автор: Beldesign
Дата сообщения: 14.11.2007 02:04
Привет всем подскажите направление решения задачи (если это возможно) с помощью макросов открытие Exell -ем любой папки и вывод списка файлов в столбец заранеее спасибо?
Автор: AndVGri
Дата сообщения: 14.11.2007 04:09
Beldesign

Код:
Dim fso As Object
Dim pFolder As Object
Dim pFile As Object
Dim i As Long

Set fso=CreateObject("Scripting.FileSystemObject")
Set pFolder = fso.GetFolder("MyFolderPath")

For Each pFile In pFolder.Files
i = i + 1
Cells(i, 1).Value = pFile.Name
Next pFile
Автор: SAS888
Дата сообщения: 14.11.2007 09:42
Нужен совет.
Задача: есть таблица Excel (наполовину пустая). Необходимо при выборе ячейки в определенном столбце запускать макрос.
Я использовал событие Worksheet_SelectionChange для всех ячеек этого столбца, но при этом у пользователя программы возникает проблема при вводе новых данных в этот столбец (т.к. при выборе следующей пустой ячейки запускается уже назначенный макрос и ввод данных невозможно осуществить). Подскажите кто-нибудь, как обойти этот момент.
Автор: AndVGri
Дата сообщения: 14.11.2007 10:25
SAS888

Код:

If (Not IsEmpty(Target.Value)) And Target.Column = xxx Then
'выполняемый код сюда
End If
Автор: SAS888
Дата сообщения: 14.11.2007 10:52
AndVGri
Спасибо. Все ОК.
Автор: Tanya3000
Дата сообщения: 15.11.2007 21:34
ребят, помоните с задачками, очень прошу, желательно с малейшими подробностями (Dim, и конец тоже)!!!! заранее спасибо!!!!
1. Поменять местами k-ую и l-ую строки матрицы..
2. Вывести слово с номером K заданного предложения (знаю, что там нужно как-то пробелы считать, потом вроде шаг назад-слово, только вот у самой не получается).
Автор: Troitsky
Дата сообщения: 15.11.2007 22:14
Tanya3000

Цитата:
1. Поменять местами k-ую и l-ую строки матрицы..

в цикле используй подобный код

Цитата:
2. Вывести слово с номером K заданного предложения (знаю, что там нужно как-то пробелы считать, потом вроде шаг назад-слово, только вот у самой не получается).

в топике с задачами на Visual Basic тебе уже подсказали работающее решение с использованием ф-и Split(), без всякого счета пробелов.
Автор: SAS888
Дата сообщения: 16.11.2007 04:10
AndVGri
Ваше решение моей проблемы
Цитата:
при выборе следующей пустой ячейки запускается уже назначенный макрос и ввод данных невозможно осуществить

как оказалось не достаточным. Нужно еще позволить редактировать непустую ячейку. Я поступил так: всем ячейкам столбца назначил гиперссылку на эту же ячейку и для запуска процедуры использовал событие Worksheet_FollowHyperlink. Теперь при нажатии и удерживании кнопки "мыши" можно войти в редактирование ячейки без запуска макроса. Вроде все работает, но как-то некрасиво....?...

Добавлено:
Tanya3000
Смотри мой ответ в топике по задачам на VB от 15.11.2007
Автор: AndVGri
Дата сообщения: 16.11.2007 05:21
SAS888
Не понял Вашу проблему. У меня тестовый код был

Код:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If (Not IsEmpty(Target.Value)) And Target.Column = 2 Then
MsgBox "Ячейка не пуста"
End If
End Sub
Автор: FiraSaro
Дата сообщения: 16.11.2007 05:54
To SERGE_BLIZNUK

Спасибо конечно, но не подойдет . Проверено. Я для того вопрос и задала, что у самой вариантов решения не осталось.
Автор: SAS888
Дата сообщения: 16.11.2007 06:14
AndVGri
А если необходимо изменить данные в не пустой ячейке?
Автор: AndVGri
Дата сообщения: 16.11.2007 07:34
SAS888
Тогда введи флаговую переменную (или ячейку) и кнопочку с макросом, которая позволяет перейти в режим редактирования, сбрасывая флаг. Хотя, правильнее, по моему мнению, пересмотреть логику программы.
Автор: SAS888
Дата сообщения: 16.11.2007 07:45
AndVGri
Спасибо. Я подумаю.
Автор: vasiliy74
Дата сообщения: 16.11.2007 11:31
Каким образом можно транслировать данные из внешнего источника данных например SQL таким образом чтобы значение транслируемой ячейки (к примеру =2*3) Excel Воспринимал как формулу? Вопросов с трансляций нет это в другую ветку и там всё просто, но вот как сделать чтобы Excel понимал что это функция не понятно, есть предположение что транслировать можно в массив в коде VBA.

Добавлено:
Решил проблему путём создания возле таблицы формул и она автоматом протягиваются при изменении размера таблицы но это только подойдёт для одного случая для второго тривиальная протяжка не подходит
Автор: vasiliy74
Дата сообщения: 16.11.2007 18:31
и ещё вопрос по производительности системы. Как отменить автоматический пересчёт на конкретных листах? Application.Calculation = xlCalculationManual чтобы был только тех листах что мне нужно а на других автоматом?
Автор: Tanya3000
Дата сообщения: 16.11.2007 23:05
Troitsky
1. Поменять местами k-ую и l-ую строки матрицы..

в цикле используй подобный код

мне не на vb нужно, а на vba... мне это не подходит!!!!!!!! но все равно спасибо!!!)))

может кто-нибудь знает? Поменять местами k-ую и l-ую строки матрицы.. !!! отзовитесь!
Автор: Beldesign
Дата сообщения: 17.11.2007 01:54
Уважаемые программисты помогите пожалуйста с решением следующей задачи: имеется в excell два столбца по 15 строк (строковые переменные), необходимо сложить данные каждой строки в один столбец, вставить после 10 строки пустую строку, и сохранить в другой файл itog.exl на диске с:\ в лист с именем itog_1 в первый столбец, при повторе операции результаты работы сохранялись бы во второй столбец. Заранее благодарен
Автор: denisdenmm
Дата сообщения: 17.11.2007 03:36
vasiliy74

Цитата:
и ещё вопрос по производительности системы. Как отменить автоматический пересчёт на конкретных листах? Application.Calculation = xlCalculationManual чтобы был только тех листах что мне нужно а на других автоматом?

если подойдёт, то я обычно в начале макроса ставлю (естественно кодом) на ручной пересчёт, а потом по мере выполнения макроса можно опять поставить автоматоматический расчёт и потом опять перевести на ручной
ну и т.д. по кругу
Автор: SERGE_BLIZNUK
Дата сообщения: 17.11.2007 09:06
Beldesign
Цитата:
имеется в excell
может в Excel ?

Цитата:
и сохранить в другой файл itog.exl на диске с:\
формат файл "exl" или это описка и нужен "xls" ?

Цитата:
с именем itog_1 в первый столбец, при повторе операции результаты работы сохранялись бы во второй столбец.
при первом повторе операции - в файл itog_1 во второй столбец, при следущем - в третий столбец и т.д. ??
ой, имхо странного вы хотите!!!!



Автор: Beldesign
Дата сообщения: 17.11.2007 11:06
я может неправильно выразился, необходиморезультаты сложения столбцов переносит в другую книгу excel в один лист последовательно столбец за столбцом
Автор: SERGE_BLIZNUK
Дата сообщения: 17.11.2007 15:04
ой.. всё равно путанно...

Цитата:
необходиморезультаты сложения столбцов

главный вопрос - в столбцах текст или числа?
т.е. если я правильно понял задачу:
1) есть лист Excel в нём два столбца (пусть будут A и B)
A B
test bool
rest char
guest int
...

нужен макрос, который откроет книгу на диске C (если нет, то создаст её)
и на первом листе добавит столбец после последнего там имеющегося
testbool
restchar
questint
...
10 строка пустая
<ещё пять строк...>

так?
если да, то можно написать такой макрос...








Автор: Troitsky
Дата сообщения: 17.11.2007 21:48
Tanya3000

Цитата:
мне не на vb нужно, а на vba... мне это не подходит!!!!!!!!

Само собой, что не подходит. Потому что время нужно потратить, по ссылке сходить, додумывать что то, код писать, а хочется всего и сразу. И, вообще, было бы здорово крикнуть как Якубович "Код в студию!" и вот его раскрасавица на подносе уже тащит...

Код: ' описываем матрицу 10х10
Dim matrix(1 To 10, 1 To 10) As Integer

' заполняем матрицу значениями
For i = 1 To 10
For j = 1 To 10
matrix(i, j) = (i - 1) * 10 + j
Next
Next

' выводим на первый лист
With Worksheets(1)
.Range(.Cells(1, 1), .Cells(10, 10)).Value = matrix
End With

' меняем местами третью и седьмую строки
For j = 1 To 10
matrix(3, j) = matrix(3, j) Xor matrix(7, j)
matrix(7, j) = matrix(3, j) Xor matrix(7, j)
matrix(3, j) = matrix(3, j) Xor matrix(7, j)
Next

' выводим на второй лист
With Worksheets(2)
.Range(.Cells(1, 1), .Cells(10, 10)).Value = matrix
End With
Автор: vlad_uks
Дата сообщения: 17.11.2007 22:47
Помогите пожалуйста!
Загружаю Combobox из таблицы Excel (4 столбца):

Private Sub proba()
Dim r As Range
Set r = Sheets("Лист1").Range("A3:D10")
With UserForm1
.ComboBox1.RowSource = r.Address
' .ComboBox1.ListIndex = 0 ' ??
.Show
End With
End Sub

при ListIndex=0, в нем выводится только значение 1-го столбца,
хотя при открытии видна вся таблица. Как отобразить в Combo
1-ю строку полностью?
Автор: maratino
Дата сообщения: 18.11.2007 11:42
Добрый день!

ЕСТЬ ТАБЛИЦА В ЭКСЕЛЬ

А B C
артикул шт цена
5555/7 1 600
5674/4 1 700
3456/9 3 500

как можно посредством макроса или формул, сделать так, что бы, где в списке количество больше 1 (один), программа разобрала и записала по одной в низ по строкам(например 3456/9)

А B C
артикул шт цена
5555/7 1 600
5674/4 1 700
3456/9 1 500
3456/9 1 500
3456/9 1 500
Автор: CEMEH
Дата сообщения: 19.11.2007 00:08
ВОПРОС:
Есть книга, в ней листы макрос, и формочка
Поменял только название одного листа, просмотрел весь код, в коде тож поменял название. При запуске макроса (отобразить форму) выплевывает ошибку №9 Что за глюк?

maratino
можно, там где >1 макросом вставить новые строки по количеству и скопировать но со значением 1.
или так

S=2
for X=2 to 1000'на 1000 строк
for Y=1 to range("B" & X)
range("E" & S)=range("A" & X):range("F" & S)=1:range("G" & S)=Range("C" & X)
S=S+1
Next Y
Next X

не проверял!
Возможно кто-то предложит более простое решение
Автор: SAS888
Дата сообщения: 19.11.2007 05:33
maratino

Цитата:
программа разобрала и записала по одной в низ по строкам

Например, так:
Sub Razvertka()
Dim Shtuki As Integer
Dim i As Integer
Dim j As Integer
i = 2 'первая строка - заголовок
Do While i < ActiveSheet.Range("A65536").End(xlUp).Row + 1
Shtuki = Cells(i, 2)
If Shtuki > 1 Then
Cells(i, 2) = 1
For j = 1 To Shtuki - 1
Rows(i + 1).Select
Selection.Insert Shift:=xlDown
Range(Cells(i, 1), Cells(i, 3)).Copy Cells(i + 1, 1)
Next j
End If
i = i + 1
Loop
End Sub

Добавлено:
Beldesign

Цитата:
имеется в excell два столбца по 15 строк

Так пойдет?
Sub QQ()
Dim MyString As String
Dim i As Integer
Dim j As Integer
Dim NextCol As Integer
'Если файл не существует - создаем
'Если Файл существует - открываем
If Dir("C:\itog_1.xls") = "" Then
Workbooks.Add
ActiveWorkbook.SaveAs Filename:="C:\itog_1.xls"
NextCol = 1
Else
Workbooks.Open Filename:="C:\itog_1.xls"
NextCol = 1 + ActiveSheet.Range("IV1").End(xlToLeft).Column
End If
'Переносим требуемые значения
For i = 1 To 15
Windows("qq").Activate ' ''qq.xls" - имя текущего файла
MyString = Cells(i, 1) & Chr(32) & Cells(i, 2) 'это с пробелом
Windows("itog_1").Activate
If i > 9 Then 'пропуск 10 строки
j = i + 1
Else: j = i
End If
Cells(j, NextCol) = MyString
Next i
End Sub
Автор: orkhanh
Дата сообщения: 20.11.2007 11:21
Помогите пожалуйста!!!!!!!!!
Мне нужно создать что-то вроде фильтра (выборки), точно даже не знаю это назвать, точно такую же как в сводных таблицах. Постараюсь обьяснить все подробнее.
У меня дана таблица из нескольких столбцов(БД).
Столбец первый: Названия компаний.
Столбец второй: Название Услуг компаний.
Столбец третий: Название подуслуг.

Из-за этого данные в первом и во втором столбце будут повторятся. будут повторятся названия компаний и услуг.

Нужно осуществлять выборку по всем параметрам. Обычный филтр не подходит т.к. позволяет выбирать одну крмпанию или услугу, а мне нужно будет вибмрать несколько компаний и услуг для сравнения их между собой.

Пожалуйста помогите!!!


Добавлено:
Да, и еще забыл написать что данные буду пополняться.
Автор: SAS888
Дата сообщения: 20.11.2007 13:12
orkhanh
Уточни, что значит
Цитата:
выборку по всем параметрам
т.е. фильтр по нескольким ключевым словам? Или как? Где их задавать?
Автор: orkhanh
Дата сообщения: 20.11.2007 13:23
SAS888

Да, фильтр по словам.
При создании сводной таблици, я получаю получаю нечто похожее.
В нем открывается окно с флажками, где я могу выбрать нужное слово.
Но мне бы такой фильтр на самой таблице.

Прошу вас излогать предложения более доступно и подробно.

Заранее спасибо!!!

Таблица примерно такая.

Название Услуга Подуслуга

AAA GGG 111
AAA GGG 222
AAA YYY 333
BBB GGG 444
BBB YYY 555
CCC GGG 666
CCC RRR 777
Автор: SERGE_BLIZNUK
Дата сообщения: 20.11.2007 14:39
orkhanh

Цитата:
Но мне бы такой фильтр на самой таблице.

попробуйте воспользоваться меню "Данные" - "Фильтр" - Расширенный фильтр
(почитайте хелп по нему... имхо это то, что Вам надо... если я правильно вас понял ;-)

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133

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


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