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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.03.2013, 08:46   #1
PrincNochi
 
Аватар для PrincNochi
 
Регистрация: 03.07.2008
Сообщений: 5
По умолчанию VBS + Excel

Здравствуйте. Пишу скрипт на vbs, который должен:
1)взять данные (ФИО) из существующей книги;
2)отредактировать данные, фамилию оставив полностью, а имя и отчество записать инициалами(в исходном файле фамилия\имя\отчество записаны в разных столбцах);
3)создать новую книгу и записать результат выполнения скрипта.
Книга создается, правда пустая...
Код:
rem переменные
rem новая книга
	dim xls	'excel
	dim book	'книга
	dim sheet	'страница
rem существующая книга
	dim obook	'книга
	dim osheet	'страница
rem
	dim f,i,o	'фамилия\имя\отчество
	dim caption	'имя файла
	dim pos,save_pos	'позиция
	dim LastRow	'последняя строка
	dim str	'строка
rem имя книги
	caption=Date
	caption=replace(caption,"\",".",1,-1)+".xls"
rem создаем новую книгу
	set xls=CreateObject("Excel.Application")
	set book=xls.WorkBooks.Add
	set sheet=xls.WorkBooks(1)
rem открываем старую книгу
	set obook=xls.WorkBooks.Open("C:\donor.xls")
	set osheet=xls.WorkBooks(1)
rem приводим к виду "Фамилия И.О."
	function first(f,i,o)
        dim crash
		if len(i)>1 then
			str=left(i,1)
			crash=str+"."
		end if
		if len(o)>1 then
			str=left(o,1)
			crash=crash+str+"."
		end if
		first=f+" "+crash
	end function
rem получение последней ячейки
	LastRow=osheet.ActiveSheet.Cells(1,1).SpecialCells(11).row
rem цикл для функции
	save_pos=1
	for pos=1 to LastRow
		set f=osheet.ActiveSheet.Cells(1,pos)
		set i=osheet.ActiveSheet.Cells(2,pos)
		set o=osheet.ActiveSheet.Cells(3,pos)
rem сохраняем результат работы функции
		sheet.ActiveSheet.Cells(1,save_pos)=first(f,i,o)
		save_pos=save_pos+1
	next
rem сохраняем книгу
	book.SaveAs(caption)
	xls.Visible=true
Может кто-нибудь сможет помочь.

Последний раз редактировалось PrincNochi; 29.03.2013 в 10:13. Причина: Изменение кода
PrincNochi вне форума Ответить с цитированием
Старый 29.03.2013, 09:58   #2
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Код:
rem создаем новую книгу
	set xls=CreateObject("Excel.Application")
	set book=xls.WorkBooks.Add
	set sheet=book.WorkSheets(1)
rem открываем старую книгу
'	set oxls=CreateObject("Excel.Application") 'зачем второе приложение?!
	set obook=xls.WorkBooks.Open("C:\donor.xls")
	set osheet=obook.WorkSheets(1)
Дальше не смотрел.
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 29.03.2013, 10:02   #3
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

У Вас есть программа, в которой можно отлаживать VBS - пошаговое прохождение, наблюдение за переменными, точки останова и т.д.?
Если нет, можно отлаживать код в VBA другой программы, например Word.
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 29.03.2013, 10:06   #4
PrincNochi
 
Аватар для PrincNochi
 
Регистрация: 03.07.2008
Сообщений: 5
По умолчанию

Просто впервые пишу на vbs и ещё толком не разобрался. Замечание учел, но эффекта все равно нет.
PrincNochi вне форума Ответить с цитированием
Старый 29.03.2013, 10:07   #5
PrincNochi
 
Аватар для PrincNochi
 
Регистрация: 03.07.2008
Сообщений: 5
По умолчанию

Спасибо за совет про точки останова, а то я уже замучился сам все перепроверять.
PrincNochi вне форума Ответить с цитированием
Старый 29.03.2013, 14:36   #6
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Мне тут не нравится:
Код:
rem создаем новую книгу
	set xls=CreateObject("Excel.Application")
	set book=xls.WorkBooks.Add
	set sheet=xls.WorkBooks(1)
rem открываем старую книгу
	set obook=xls.WorkBooks.Open("C:\donor.xls")
	set osheet=xls.WorkBooks(1)
я бы это переписал иначе... что-то вроде
Код:
Rem создаем новую книгу
    Set xls = CreateObject("Excel.Application")
    Set Sheet = xls.Workbooks.Add(1).Sheets(1)
Rem открываем старую книгу
    Set oSheet = xls.Workbooks.Open("C:\donor.xls").Sheets(1)

    ' проверка:
    xls.Visible = True
    Sheet.Cells(1) = "test1"
    oSheet.Cells(1) = "test2"
Хотя Алексей выше уже тоже подправил, я сразу не обратил внимание...

Ну и тут зачем set?
Код:
set f=osheet.ActiveSheet.Cells(1,pos)
set i=osheet.ActiveSheet.Cells(2,pos)
set o=osheet.ActiveSheet.Cells(3,pos)
Вы ведь далее используете значения - так их и передавайте функции.
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 29.03.2013 в 14:52.
Hugo121 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа на vbs testdoc Помощь студентам 5 01.06.2012 20:39
VBS & JS Artem_Kokos Помощь студентам 0 13.11.2011 12:38
vbs Shout Помощь студентам 0 23.07.2011 12:31
VBS-скрипты ardor JavaScript, Ajax 0 10.03.2011 00:03
Иморт данных из SQL в Excel при помощи QueryTable VBS, Иморт данных из SQL в Excel при помощи QueryTable Valdocco Microsoft Office Excel 1 16.07.2009 21:50