Привет всем подскажите направление решения задачи (если это возможно) с помощью макросов открытие Exell -ем любой папки и вывод списка файлов в столбец заранеее спасибо?
» Excel VBA (часть 2)
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
Код:
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
Нужен совет.
Задача: есть таблица Excel (наполовину пустая). Необходимо при выборе ячейки в определенном столбце запускать макрос.
Я использовал событие Worksheet_SelectionChange для всех ячеек этого столбца, но при этом у пользователя программы возникает проблема при вводе новых данных в этот столбец (т.к. при выборе следующей пустой ячейки запускается уже назначенный макрос и ввод данных невозможно осуществить). Подскажите кто-нибудь, как обойти этот момент.
Задача: есть таблица Excel (наполовину пустая). Необходимо при выборе ячейки в определенном столбце запускать макрос.
Я использовал событие Worksheet_SelectionChange для всех ячеек этого столбца, но при этом у пользователя программы возникает проблема при вводе новых данных в этот столбец (т.к. при выборе следующей пустой ячейки запускается уже назначенный макрос и ввод данных невозможно осуществить). Подскажите кто-нибудь, как обойти этот момент.
SAS888
Код:
If (Not IsEmpty(Target.Value)) And Target.Column = xxx Then
'выполняемый код сюда
End If
Код:
If (Not IsEmpty(Target.Value)) And Target.Column = xxx Then
'выполняемый код сюда
End If
AndVGri
Спасибо. Все ОК.
Спасибо. Все ОК.
ребят, помоните с задачками, очень прошу, желательно с малейшими подробностями (Dim, и конец тоже)!!!! заранее спасибо!!!!
1. Поменять местами k-ую и l-ую строки матрицы..
2. Вывести слово с номером K заданного предложения (знаю, что там нужно как-то пробелы считать, потом вроде шаг назад-слово, только вот у самой не получается).
1. Поменять местами k-ую и l-ую строки матрицы..
2. Вывести слово с номером K заданного предложения (знаю, что там нужно как-то пробелы считать, потом вроде шаг назад-слово, только вот у самой не получается).
Tanya3000
Цитата:
в цикле используй подобный код
Цитата:
в топике с задачами на Visual Basic тебе уже подсказали работающее решение с использованием ф-и Split(), без всякого счета пробелов.
Цитата:
1. Поменять местами k-ую и l-ую строки матрицы..
в цикле используй подобный код
Цитата:
2. Вывести слово с номером K заданного предложения (знаю, что там нужно как-то пробелы считать, потом вроде шаг назад-слово, только вот у самой не получается).
в топике с задачами на Visual Basic тебе уже подсказали работающее решение с использованием ф-и Split(), без всякого счета пробелов.
AndVGri
Ваше решение моей проблемы
Цитата:
как оказалось не достаточным. Нужно еще позволить редактировать непустую ячейку. Я поступил так: всем ячейкам столбца назначил гиперссылку на эту же ячейку и для запуска процедуры использовал событие Worksheet_FollowHyperlink. Теперь при нажатии и удерживании кнопки "мыши" можно войти в редактирование ячейки без запуска макроса. Вроде все работает, но как-то некрасиво....?...
Добавлено:
Tanya3000
Смотри мой ответ в топике по задачам на VB от 15.11.2007
Ваше решение моей проблемы
Цитата:
при выборе следующей пустой ячейки запускается уже назначенный макрос и ввод данных невозможно осуществить
как оказалось не достаточным. Нужно еще позволить редактировать непустую ячейку. Я поступил так: всем ячейкам столбца назначил гиперссылку на эту же ячейку и для запуска процедуры использовал событие Worksheet_FollowHyperlink. Теперь при нажатии и удерживании кнопки "мыши" можно войти в редактирование ячейки без запуска макроса. Вроде все работает, но как-то некрасиво....?...
Добавлено:
Tanya3000
Смотри мой ответ в топике по задачам на VB от 15.11.2007
SAS888
Не понял Вашу проблему. У меня тестовый код был
Код:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If (Not IsEmpty(Target.Value)) And Target.Column = 2 Then
MsgBox "Ячейка не пуста"
End If
End Sub
Не понял Вашу проблему. У меня тестовый код был
Код:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If (Not IsEmpty(Target.Value)) And Target.Column = 2 Then
MsgBox "Ячейка не пуста"
End If
End Sub
To SERGE_BLIZNUK
Спасибо конечно, но не подойдет . Проверено. Я для того вопрос и задала, что у самой вариантов решения не осталось.
Спасибо конечно, но не подойдет . Проверено. Я для того вопрос и задала, что у самой вариантов решения не осталось.
AndVGri
А если необходимо изменить данные в не пустой ячейке?
А если необходимо изменить данные в не пустой ячейке?
SAS888
Тогда введи флаговую переменную (или ячейку) и кнопочку с макросом, которая позволяет перейти в режим редактирования, сбрасывая флаг. Хотя, правильнее, по моему мнению, пересмотреть логику программы.
Тогда введи флаговую переменную (или ячейку) и кнопочку с макросом, которая позволяет перейти в режим редактирования, сбрасывая флаг. Хотя, правильнее, по моему мнению, пересмотреть логику программы.
AndVGri
Спасибо. Я подумаю.
Спасибо. Я подумаю.
Каким образом можно транслировать данные из внешнего источника данных например SQL таким образом чтобы значение транслируемой ячейки (к примеру =2*3) Excel Воспринимал как формулу? Вопросов с трансляций нет это в другую ветку и там всё просто, но вот как сделать чтобы Excel понимал что это функция не понятно, есть предположение что транслировать можно в массив в коде VBA.
Добавлено:
Решил проблему путём создания возле таблицы формул и она автоматом протягиваются при изменении размера таблицы но это только подойдёт для одного случая для второго тривиальная протяжка не подходит
Добавлено:
Решил проблему путём создания возле таблицы формул и она автоматом протягиваются при изменении размера таблицы но это только подойдёт для одного случая для второго тривиальная протяжка не подходит
и ещё вопрос по производительности системы. Как отменить автоматический пересчёт на конкретных листах? Application.Calculation = xlCalculationManual чтобы был только тех листах что мне нужно а на других автоматом?
Troitsky
1. Поменять местами k-ую и l-ую строки матрицы..
в цикле используй подобный код
мне не на vb нужно, а на vba... мне это не подходит!!!!!!!! но все равно спасибо!!!)))
может кто-нибудь знает? Поменять местами k-ую и l-ую строки матрицы.. !!! отзовитесь!
1. Поменять местами k-ую и l-ую строки матрицы..
в цикле используй подобный код
мне не на vb нужно, а на vba... мне это не подходит!!!!!!!! но все равно спасибо!!!)))
может кто-нибудь знает? Поменять местами k-ую и l-ую строки матрицы.. !!! отзовитесь!
Уважаемые программисты помогите пожалуйста с решением следующей задачи: имеется в excell два столбца по 15 строк (строковые переменные), необходимо сложить данные каждой строки в один столбец, вставить после 10 строки пустую строку, и сохранить в другой файл itog.exl на диске с:\ в лист с именем itog_1 в первый столбец, при повторе операции результаты работы сохранялись бы во второй столбец. Заранее благодарен
vasiliy74
Цитата:
если подойдёт, то я обычно в начале макроса ставлю (естественно кодом) на ручной пересчёт, а потом по мере выполнения макроса можно опять поставить автоматоматический расчёт и потом опять перевести на ручной
ну и т.д. по кругу
Цитата:
и ещё вопрос по производительности системы. Как отменить автоматический пересчёт на конкретных листах? Application.Calculation = xlCalculationManual чтобы был только тех листах что мне нужно а на других автоматом?
если подойдёт, то я обычно в начале макроса ставлю (естественно кодом) на ручной пересчёт, а потом по мере выполнения макроса можно опять поставить автоматоматический расчёт и потом опять перевести на ручной
ну и т.д. по кругу
Beldesign
Цитата:
Цитата:
Цитата:
ой, имхо странного вы хотите!!!!
Цитата:
имеется в excellможет в Excel ?
Цитата:
и сохранить в другой файл itog.exl на диске с:\формат файл "exl" или это описка и нужен "xls" ?
Цитата:
с именем itog_1 в первый столбец, при повторе операции результаты работы сохранялись бы во второй столбец.при первом повторе операции - в файл itog_1 во второй столбец, при следущем - в третий столбец и т.д. ??
ой, имхо странного вы хотите!!!!
я может неправильно выразился, необходиморезультаты сложения столбцов переносит в другую книгу excel в один лист последовательно столбец за столбцом
ой.. всё равно путанно...
Цитата:
главный вопрос - в столбцах текст или числа?
т.е. если я правильно понял задачу:
1) есть лист Excel в нём два столбца (пусть будут A и B)
A B
test bool
rest char
guest int
...
нужен макрос, который откроет книгу на диске C (если нет, то создаст её)
и на первом листе добавит столбец после последнего там имеющегося
testbool
restchar
questint
...
10 строка пустая
<ещё пять строк...>
так?
если да, то можно написать такой макрос...
Цитата:
необходиморезультаты сложения столбцов
главный вопрос - в столбцах текст или числа?
т.е. если я правильно понял задачу:
1) есть лист Excel в нём два столбца (пусть будут A и B)
A B
test bool
rest char
guest int
...
нужен макрос, который откроет книгу на диске C (если нет, то создаст её)
и на первом листе добавит столбец после последнего там имеющегося
testbool
restchar
questint
...
10 строка пустая
<ещё пять строк...>
так?
если да, то можно написать такой макрос...
Tanya3000
Цитата:
Само собой, что не подходит. Потому что время нужно потратить, по ссылке сходить, додумывать что то, код писать, а хочется всего и сразу. И, вообще, было бы здорово крикнуть как Якубович "Код в студию!" и вот его раскрасавица на подносе уже тащит...
Код: ' описываем матрицу 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
Цитата:
мне не на 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
Помогите пожалуйста!
Загружаю 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-ю строку полностью?
Загружаю 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-ю строку полностью?
Добрый день!
ЕСТЬ ТАБЛИЦА В ЭКСЕЛЬ
А 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
ЕСТЬ ТАБЛИЦА В ЭКСЕЛЬ
А 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
ВОПРОС:
Есть книга, в ней листы макрос, и формочка
Поменял только название одного листа, просмотрел весь код, в коде тож поменял название. При запуске макроса (отобразить форму) выплевывает ошибку №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
не проверял!
Возможно кто-то предложит более простое решение
Есть книга, в ней листы макрос, и формочка
Поменял только название одного листа, просмотрел весь код, в коде тож поменял название. При запуске макроса (отобразить форму) выплевывает ошибку №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
не проверял!
Возможно кто-то предложит более простое решение
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
Цитата:
Так пойдет?
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
Цитата:
программа разобрала и записала по одной в низ по строкам
Например, так:
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
Уточни, что значит
Цитата:
Уточни, что значит
Цитата:
выборку по всем параметрамт.е. фильтр по нескольким ключевым словам? Или как? Где их задавать?
SAS888
Да, фильтр по словам.
При создании сводной таблици, я получаю получаю нечто похожее.
В нем открывается окно с флажками, где я могу выбрать нужное слово.
Но мне бы такой фильтр на самой таблице.
Прошу вас излогать предложения более доступно и подробно.
Заранее спасибо!!!
Таблица примерно такая.
Название Услуга Подуслуга
AAA GGG 111
AAA GGG 222
AAA YYY 333
BBB GGG 444
BBB YYY 555
CCC GGG 666
CCC RRR 777
Да, фильтр по словам.
При создании сводной таблици, я получаю получаю нечто похожее.
В нем открывается окно с флажками, где я могу выбрать нужное слово.
Но мне бы такой фильтр на самой таблице.
Прошу вас излогать предложения более доступно и подробно.
Заранее спасибо!!!
Таблица примерно такая.
Название Услуга Подуслуга
AAA GGG 111
AAA GGG 222
AAA YYY 333
BBB GGG 444
BBB YYY 555
CCC GGG 666
CCC RRR 777
orkhanh
Цитата:
попробуйте воспользоваться меню "Данные" - "Фильтр" - Расширенный фильтр
(почитайте хелп по нему... имхо это то, что Вам надо... если я правильно вас понял ;-)
Цитата:
Но мне бы такой фильтр на самой таблице.
попробуйте воспользоваться меню "Данные" - "Фильтр" - Расширенный фильтр
(почитайте хелп по нему... имхо это то, что Вам надо... если я правильно вас понял ;-)
Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
Предыдущая тема: Написание своего HyperTerminal для считывания данных
Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.