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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.04.2016, 09:49   #1
KevLev
Пользователь
 
Регистрация: 19.04.2016
Сообщений: 48
По умолчанию Макрос загрузки в различные эксель файлы

Всем привет!Есть макрос загрузки в эксель:

Код:
'Variable to hold default root folder name
Dim strRootFolder
strRootFolder = "X:\МАКРОСЫ\"

Dim reportName 
reportName="Product"

Dim WidgetID 
WidgetID = "ProductB"

Dim widgetProductA
widgetProductA = "A"

Dim widgetProductB 
widgetProductB = "B"

Dim widgetProductC 
widgetProductC = "C"

Function ExportProduct()

	CALL CheckFolderExists(strRootFolder)	

	ActiveDocument.ClearAll true
	
	Set xlApp = CreateObject("Excel.Application")
	xlApp.Visible = true		
	Set xlDoc = xlApp.Workbooks.Add 'open new workbook
	nSheetsCount = 0
	CALL RemoveDefaultSheet(xlDoc)	
	
	nSheetsCount = xlDoc.Sheets.Count 
	xlDoc.Sheets(nSheetsCount).Select
	Set xlSheet = xlDoc.Sheets(nSheetsCount)	
	
	CALL ExportRevenueWidgets(xlDoc,xlSheet)	
		
	'Save generated report
	xlApp.ActiveWorkBook.SaveAs strRootFolder &" "&reportName & ".xlsx" 
	xlApp.Quit	
	
End Function

'Call Export Widgets By Sheet
Function ExportRevenueWidgets(xlDoc,xlSheet)
	ActiveDocument.GetField("ProductName").select widgetProductA
	CALL ExportWidget(xlDoc,xlSheet,WidgetID, widgetProductA)
	ActiveDocument.GetField("ProductName").Clear	
	ActiveDocument.GetField("ProductName").select widgetProductB
	CALL ExportWidget(xlDoc,xlSheet,WidgetID, widgetProductB)
	ActiveDocument.GetField("ProductName").Clear
	ActiveDocument.GetField("ProductName").select widgetProductC
	CALL ExportWidget(xlDoc,xlSheet,WidgetID, widgetProductC)
	ActiveDocument.GetField("ProductName").Clear
End Function

'Export Widgets by Type
Function ExportWidget(xlDoc,xlSheet,widget, Value)		
	Select Case Value
		Case widgetProductA:		
			Call Export(0,xlSheet,widget,xlDoc,widgetProductA)	
		Case widgetProductB:		
			Call Export(1,xlSheet,widget,xlDoc,widgetProductB)
		Case widgetProductC:		
			Call Export(1,xlSheet,widget,xlDoc,widgetProductC)
	End Select
End Function

'Export Widgets
Function Export(IsNeedNewSheet,xlSheet,widgetID,xlDoc,sheetName)	
	
	If IsNeedNewSheet = 1 then
		CALL AddExcelSheet(xlDoc,sheetName)
		nSheetsCount = xlDoc.Sheets.Count
		xlDoc.Sheets(nSheetsCount).Select
		Set xlSheet = xlDoc.Sheets(nSheetsCount)
	Else
		xlSheet.Name = sheetName
    End If	
    
    nRow = xlSheet.UsedRange.Rows.Count
    
    If nRow > 1 Then
    	 nRow = nRow + 4
    Else
    	 nRow = nRow + 2
    End If
 
	Set SheetObj = ActiveDocument.GetSheetObject(widgetID)	
	
	ObjCaption   = SheetObj.GetCaption.Name.v
	xlSheet.Range("A"&nRow-1) = ObjCaption
	xlSheet.Range("A"&nRow-1).Font.Bold = true
	
	'Copy the chart object to clipboard
	SheetObj.CopyTableToClipboard true
	
	'Paste the chart object in Excel file
	xlSheet.Paste xlSheet.Range("A"&nRow) 		
	
	'Format the excel file	
	xlSheet.cells.Font.Size = "8"
	xlSheet.cells.Font.Name = "Tahoma"	

End Function

'Add New Sheet in Excel File
Sub AddExcelSheet(xlDoc, strSheetName)

	xlDoc.Sheets.Add, xlDoc.Sheets(xlDoc.Sheets.Count)
	Set xlSheet  = xlDoc.Sheets(xlDoc.Sheets.Count)
	xlSheet.Name = Left(strSheetName, 31)
End Sub

'Remove Default Sheets from Excel Files
Sub RemoveDefaultSheet(xlDoc)
	Do
		nSheetsCount = xlDoc.Sheets.Count
		If nSheetsCount = 1 then
			Exit Do
		Else
			xlDoc.Sheets(nSheetsCount).Select
			xlDoc.ActiveSheet.Delete
		End If
	Loop
End Sub


'Checks whether given folder exists if not creates the given folder
Function CheckFolderExists(path)	

	Set fileSystemObject = CreateObject("Scripting.FileSystemObject") 
	
	If Not fileSystemObject.FolderExists(path) Then
		fileSystemObject.CreateFolder(path) 	
	End If
	
End Function
Проблема в том,что,таблицу,которую макрос экспортирует в эксель,он ее разбивает по строкам.И каждой строке таблицы соответствует свой отдельный лист.
Задача: чтобы макрос разбивал ТАКЖЕ по строчно,но КАЖДАЯ строка экспортировалась в ОТДЕЛЬНЫЙ эксель файл.
Могу предположить,что проблема в функции Function ExportProduct(),но не уверен,т.к. в макросах очень слабоват.

Последний раз редактировалось KevLev; 20.04.2016 в 15:45.
KevLev вне форума Ответить с цитированием
Старый 20.04.2016, 15:19   #2
GreenWizard
мальчик-помогай =)
Форумчанин
 
Регистрация: 16.09.2010
Сообщений: 522
По умолчанию

Кода много и он плохочитаем... если исходный код содержит форматирование, то выложи его, обрамив тегом CODE, и это может сильно повысить шансы получения ответа.
GreenWizard вне форума Ответить с цитированием
Старый 20.04.2016, 15:24   #3
KevLev
Пользователь
 
Регистрация: 19.04.2016
Сообщений: 48
По умолчанию

Да,Вы правы,код большой.К сожалению проще нигде не нашел.Если Вас не затруднит,подскажите каким образом его обрамить тегом "CODE"?С макросами знаком только 2-й день,поэтому знаний нет.Спасибо за понимание!
KevLev вне форума Ответить с цитированием
Старый 20.04.2016, 15:33   #4
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Цитата:
Сообщение от KevLev Посмотреть сообщение
.Если Вас не затруднит,подскажите каким образом его обрамить тегом "CODE"?С макросами знаком только 2-й день,поэтому знаний нет.
ета пять! жжош! тут написано как обрамлять тегом "CODE"
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 20.04.2016, 15:42   #5
KevLev
Пользователь
 
Регистрация: 19.04.2016
Сообщений: 48
По умолчанию

Александр,я не программист,к сожалению,поэтому у многих из мои вопросы и мое недопонимание могут вызывать улыбку на лице.Но,по работе пришлось столкнуться и выворачиваюсь,как могу)
Спасибо за ссылку!
KevLev вне форума Ответить с цитированием
Старый 20.04.2016, 16:10   #6
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

KevLev, вы б детальнее описали что да как.
"Есть макрос" Где он есть, откуда запускаете (ворд, акссес, вообще не Офис). Приложите "таблицу,которую макрос экспортирует в эксель", приложите файл-примера, что вы в результате хотите получить.
И интерес к теме проснется...наверно
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 20.04.2016, 16:36   #7
KevLev
Пользователь
 
Регистрация: 19.04.2016
Сообщений: 48
По умолчанию

Запускаю макрос из программы QlikView.
Пример таблицы,которая находится в КликВью прикреплен - эксель файл.Макрос ее должен нарезать на 3 продукта: А,В,С.
Необходимо,при запуске макроса,чтобы продукты А,В и С экспортировались в каждый свой отдельный эксель файл. В конечном итоге,чтобы это выглядело как на Screshot_8.И так по продукту В и С
Изображения
Тип файла: png Screenshot_8.png (3.3 Кб, 24 просмотров)
Вложения
Тип файла: xlsx Таблица.xlsx (10.6 Кб, 5 просмотров)

Последний раз редактировалось KevLev; 20.04.2016 в 16:39.
KevLev вне форума Ответить с цитированием
Старый 20.04.2016, 20:15   #8
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Принимаем что продукты будут идти по очереди: АБС. Не допустимо АБАС.
Вложения
Тип файла: rar testsave.rar (20.0 Кб, 4 просмотров)
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 21.04.2016, 12:07   #9
KevLev
Пользователь
 
Регистрация: 19.04.2016
Сообщений: 48
По умолчанию

Александр,спасибо за предоставленный макрос!Тестирую его в КликВью.
Возникла ошибка (рисунок ниже)
Каким образом можно исправить?
Изображения
Тип файла: jpg Screenshot_11.jpg (24.9 Кб, 122 просмотров)
KevLev вне форума Ответить с цитированием
Старый 21.04.2016, 13:41   #10
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

пардон, но я не пользовался ни разу КликВью и даже не знаю что это, макросы написаны на VBA екселя и как их адаптировать под КликВью я без малейшего понятия, гуглить надо.
удалите "as integer", хз

з.і.
А с excelя не хотите запускать?
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.

Последний раз редактировалось Aleksandr H.; 21.04.2016 в 13:44.
Aleksandr H. вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Макрос рассылка на различные адресаты KevLev Помощь студентам 10 19.04.2016 16:29
Макрос для вставки картинки из эксель КТатьяна Microsoft Office Excel 0 02.05.2011 12:46
Макрос для экспорта данных в таблицу эксель scythe Microsoft Office Excel 2 21.02.2010 22:18
Файлы загрузки Яр|/||< (^_^) Операционные системы общие вопросы 6 03.07.2009 09:55