Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.12.2011, 01:42   #1
Brine
 
Регистрация: 06.12.2011
Сообщений: 6
По умолчанию Перемещение колонок в таблице по условию

Задача: В таблице Microsoft Office Excel 2003 с помощью VB Script макроса разместить колонки в заданном порядке, по шаблону (Лист 1).

Условие: В исходном (обрабатываемом) документе колонки (столбцы) всегда расположенны в разных местах (Лист 2) , (Лист 3).

Желаемый способ решения задачи: Берем ячейку (A1), если значение равно "п/н" переходим к (B1), если значение не равно "п/н", на место колонки (А) вставляем пустую колонку. По порядку перебираем ячейки (B1), (C1), (D1), (F1) и т.д. пока не найдем колонку первая ячейка которой содержит "п/н". Вырезаем эту колонку и вставляем в пустую колонку (А).

Переходим к ячейке (B1), если значение равно "№ счета" переходим к (C1), если значение не равно "№ счета", на место колонки (B) вставляем пустую колонку. По порядку перебираем ячейки (C1), (D1), (F1), (E1) и т.д. пока не найдем колонку первая ячейка которой содержит "№ счета". Вырезаем эту колонку и вставляем в пустую колонку (B).

Повторяем до тех пор, пока все колонки не займут свои места согласно шаблону (Лист 1).

Обрабатываемый файл: VB Script макрос должен находиться в одном файле-таблице вместе с шаблоном. А обрабатываемая таблица в другом файле, имя и путь которого для обработки макрос при запуске будет запрашивать.

Буду очень благодарен за любую помощь!
Вложения
Тип файла: zip Tablica.zip (3.1 Кб, 18 просмотров)
Brine вне форума Ответить с цитированием
Старый 11.12.2011, 22:04   #2
Brine
 
Регистрация: 06.12.2011
Сообщений: 6
По умолчанию

Судя по изобилию ответов на вопрос, задача либо очень простая, либо очень сложная?

Попробую разбить ее на части, может кто и поможет.

ЧАСТЬ ПЕРВАЯ

Вопрос1. Как из макроса вызвать стандартное окно открытия нового файла?
Цитата:
'ОКНО ВЫБОРА ИСХОДНОГО ФАЙЛА
fileToOpen = Application _
.GetOpenFilename("Excel files (*.xls)")
If fileToOpen <> False Then
MsgBox "Open " & fileToOpen
End If
Вопрос2. Как присвоить имя выбранного файла переменной?
Цитата:
' ПРИСВАИВАЕМ ИМЯ ФАЙЛА ПЕРЕМЕННОЙ
FileName = "Tablica.xls"
Вопрос3. Как использовать переменную хранящую имя файла для обращения к файлу в макросе?
Цитата:
' ДЕЛАЕМ АКТИВНЫМ ФАЙЛ, ИМЯ КОТОРОГО ХРАНИТ ПЕРЕМЕННАЯ
Windows(FileName).Activate
Sheets("Лист1").Select
Cells.Select
Вопрос4. Как слепить первых трои ответа вместе в один рабочий код?:
- вызываем окно выбора файла
- присваиваем переменной имя выбранного файла
- делаем активным окно файла, имя которого хранит переменная
Brine вне форума Ответить с цитированием
Старый 11.12.2011, 22:32   #3
Brine
 
Регистрация: 06.12.2011
Сообщений: 6
По умолчанию

ЧАСТЬ ВОРАЯ

Вопрос1. Как с помощью макроса проверить ячейку (A1),содержит ячейка в своем тексте, текст "п/н"?

Вопрос2. Как написать условие: Если ячейка (A1),содержит текст "п/н" переходим к (B1), иначе на место колонки (А) вставляем пустую колонку?

Вопрос3. Как найти колонку содержащую текст "Адрес", перебирая все колонки таблицы по очереди до первой пустой колонки?

Вопрос4. Как передать переменной координаты ячейки содержащей текст "Адрес"?
Brine вне форума Ответить с цитированием
Старый 11.12.2011, 22:48   #4
Brine
 
Регистрация: 06.12.2011
Сообщений: 6
По умолчанию

ЧАСТЬ ТРЕТЯЯ

Вопрос1. Как остановить работу макроса сообщением, и продолжить работу с места остановки после прочтения сообщения?

Вопрос2. Как в сообщение выводимое на экран в виде текста, вставить результат вычислений в макросе?

Вопрос3. Как в сообщение выводимое на экран в виде текста, вставить содержимое ячейки?

Вопрос4. Как написать макрос, добавляющий в окно сообщения две кнопки "Да" и "Нет", так, чтоб при нажатии "Да" работа продолжилась, а при нажатии "Нет" файл таблицы закрылся, без сохранения изменений?

Последний раз редактировалось Brine; 11.12.2011 в 22:54.
Brine вне форума Ответить с цитированием
Старый 12.12.2011, 00:06   #5
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Примерно так, изучайте, пройдите по шагам (F8):
Код:
Sub Brine()
Dim r As Range, ws As Worksheet, aFldNms(), i
i = Application.GetOpenFilename("Книги Excel,*.xls*")
If i = "False" Then Exit Sub 'юзер выбрал "отмена"
        'массив заголовков полей, см. окно Locals
aFldNms = ThisWorkbook.Sheets(1).Rows(1).SpecialCells(xlCellTypeConstants).Value
With Workbooks.Open(i)
    For Each ws In .Worksheets
        ws.Activate 'только для отладки, можно удалить
        For i = 1 To UBound(aFldNms, 2)
            Set r = ws.Rows(1).Find(aFldNms(1, i), , xlValues, xlWhole)
            If r Is Nothing Then 'ячека не найдена
                ws.Activate
                MsgBox "Поле '" & aFldNms(1, i) & "' не найдено, останов.", vbCritical: Exit Sub
            ElseIf r.Column <> i Then 'перестановка столбца
                r.EntireColumn.Cut
                ws.Cells(1, i).Insert Shift:=xlToRight
            End If
        Next
    Next
    Select Case MsgBox("Столбцы успешно переставлены." & vbLf & _
        "Да - сохранить и закрыть файл," & vbLf & _
        "Нет - закрыть файл без сохранения," & vbLf & _
        "Отмена - закончить на этом", vbYesNoCancel + vbInformation)
    Case vbYes: .Close True
    Case vbNo: .Close False
    End Select
End With
End Sub
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 12.12.2011, 23:34   #6
Brine
 
Регистрация: 06.12.2011
Сообщений: 6
По умолчанию Казанский

Код работает как швейцарские часы! Благодарю за помощь! Попробую разобраться.
Brine вне форума Ответить с цитированием
Старый 12.12.2011, 23:47   #7
Brine
 
Регистрация: 06.12.2011
Сообщений: 6
По умолчанию Ответы на вопросы 1-4 ЧАСТЬ ПЕРВАЯ

ЧАСТЬ ПЕРВАЯ

Вопрос1. Как из макроса вызвать стандартное окно открытия нового файла?
Цитата:
Пример1
' С ПОМОЩЬЮ ОКНА ВЫБОРА ФАЙЛА НАЗНАЧАЕМ ПЕРЕМЕННОЙ ИМЯ ИСХОДНОГО ФАЙЛА
fileToOpen = Application _
.GetOpenFilename("Excel files (*.xls), *.xls")
If fileToOpen <> False Then
MsgBox "Open " & fileToOpen
End If
Вопрос2. Как присвоить имя выбранного файла переменной?
Цитата:
Пример2
' НАЗНАЧАЕМ ПЕРЕМЕННОЙ ИМЯ ИСХОДНОГО ФАЙЛА
fileToOpen = "Tablica.xls"
Вопрос3. Как использовать переменную хранящую имя файла для обращения к файлу в макросе?
Цитата:
Пример3
' ДЕЛАЕМ АКТИВНЫМ ФАЙЛ, ИМЯ КОТОРОГО ХРАНИТ ПЕРЕМЕННАЯ
Windows(fileToOpen).Activate
Sheets("Лист1").Select

ИЛИ

' ПРИСВАИВАЕМ ИМЯ ФАЙЛА ПЕРЕМЕННОЙ
fileToOpen = "Tablica.xls"
' ОТКРЫВАЕМ С ПОМОЩЬЮ ПЕРЕМЕННОЙ ИСХОДНЫЙ ФАЙЛ
Workbooks.Open Filename:= fileToOpen
Вопрос4. Как объединить первых три ответа вместе в один рабочий код?:
- вызываем окно выбора файла
- присваиваем переменной имя выбранного файла
- делаем активным окно файла, имя которого хранит переменная
Цитата:
Пример4
Sub Макрос1()

' УКАЗЫВАЕМ ПУТЬ К РАБОЧЕЙ ПАПКЕ
ChDir "C:\Проэкты VBA Script"

' ОКНО ВЫБОРА ИСХОДНОГО ФАЙЛА
fileToOpen = Application _
.GetOpenFilename("Excel files (*.xls), *.xls")
If fileToOpen <> False Then
MsgBox "Open " & fileToOpen
End If

' ДЕЛАЕМ АКТИВНЫМ ФАЙЛ, ИМЯ КОТОРОГО ХРАНИТ ПЕРЕМЕННАЯ
Windows(fileToOpen).Activate ' Вот тут и возникает ошибка!
' ПЕРЕМЕННАЯ хранит весь ПУТЬ, а не ИМЯ выбранного ФАЙЛА!
Sheets("Лист1").Select
Range("A10") = fileToOpen

End Sub
Вопрос5. Пусть переменная fileToOpen равна пути C:\Проэкты VBA Script\Tablica.xls Как от переменной fileToOpen содержащей путь C:\Проэкты VBA Script\Tablica.xls отделить имя файла Tablica.xls и назначить другой переменной fileNameToOpen?
Brine вне форума Ответить с цитированием
Старый 13.12.2011, 10:49   #8
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

А каков смысл этого действия? Вы хотите проверить, не открыт ли уже этот файл?
Тогда лучше замените
Код:
With Workbooks.Open(i)
на
Код:
With GetObject(i)
    .Windows(1).Activate 'только для отладки
Если файл уже открыт, код будет работать с ним. Если нет - откроет.
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
перемещение курсора по таблице dm_alex73 Microsoft Office Excel 24 15.02.2011 13:16
Перемещение строк в таблице (Access) chinara БД в Delphi 6 25.11.2010 13:46
Суммирование колонок по условию Taurus1 Microsoft Office Excel 4 02.08.2010 13:45
интересное перемещение в таблице Окоча Юра Microsoft Office Word 1 14.01.2010 15:47
Слияние шаблона с данными из таблице, и как подсичтать значение количества полей в таблице n4ela Microsoft Office Access 3 07.03.2009 12:04