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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.04.2016, 14:19   #11
KevLev
Пользователь
 
Регистрация: 19.04.2016
Сообщений: 48
По умолчанию

А здесь макрос под КликВью настраивать не надо)В прошлый раз вы мне помогли с макросом "Макрос рассылка на различные адресаты"и он сразу запустился в Клике.

"А с excelя не хотите запускать?" - те 2 кнопки,что в вашем файле,я их сделаю в Клике.Здесь в любом случае в Клике придется запускать

"as integer" - удалил.Но сейчас новая ошибка
Изображения
Тип файла: jpg Screenshot_12.jpg (21.3 Кб, 122 просмотров)

Последний раз редактировалось KevLev; 21.04.2016 в 14:23.
KevLev вне форума Ответить с цитированием
Старый 21.04.2016, 14:24   #12
KevLev
Пользователь
 
Регистрация: 19.04.2016
Сообщений: 48
По умолчанию

Если удалить и это,то появится следующая ошибка (Screenshot_13)
Изображения
Тип файла: jpg Screenshot_13.jpg (22.5 Кб, 111 просмотров)
KevLev вне форума Ответить с цитированием
Старый 21.04.2016, 14:33   #13
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

вы удалили создание нового листа

это вставка данных как числа, без формул

Вы в состоянии прокомментировать Ваш код с 1 сообщения темы?

предлагаю изменить вашу функцию
Код:
'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
она сейчас сразу обрабатывает 3 widgetProduct
а что как сделать

Код:
Function ExportRevenueWidgets(xlDoc,xlSheet, widgetProductX)
	ActiveDocument.GetField("ProductName").select widgetProductX
	CALL ExportWidget(xlDoc,xlSheet,WidgetID, widgetProductX)
	ActiveDocument.GetField("ProductName").Clear	
End Function
и в exportProduct Фрагмен
Код:
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)
повторить 3 разы/запихнуть в цикл
и менять только
Код:
	CALL ExportRevenueWidgets(xlDoc,xlSheet,widgetProductX)
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.

Последний раз редактировалось Aleksandr H.; 21.04.2016 в 14:45.
Aleksandr H. вне форума Ответить с цитированием
Старый 21.04.2016, 15:27   #14
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,widgetProductA)	
	CALL ExportRevenueWidgets(xlDoc,xlSheet,widgetProductB)	
	CALL ExportRevenueWidgets(xlDoc,xlSheet,widgetProductC)
	'Save generated report
	xlApp.ActiveWorkBook.SaveAs strRootFolder &" "&ProductName& ".xlsx" 
	xlApp.Quit	
	
End Function

'Call Export Widgets By Sheet
Function ExportRevenueWidgets(xlDoc,xlSheet, widgetProductX)
	ActiveDocument.GetField("ProductName").select widgetProductX
	CALL ExportWidget(xlDoc,xlSheet,WidgetID, widgetProductX)
	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
Но строчки таблицы нарезаются опять по листам ОДНОГО эксель файла (screensgkt_14),а нужно,чтобы каждая табличка с продуктом в свой отдельный эксель файл попадала.Кажется я ваш код не правильно вставил.
Изображения
Тип файла: jpg Screenshot_14.jpg (33.1 Кб, 113 просмотров)
KevLev вне форума Ответить с цитированием
Старый 21.04.2016, 15:43   #15
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

че ж так туго все? А так?
Код:
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, widgetProductA)
    'Save generated report
    xlApp.ActiveWorkBook.SaveAs strRootFolder &" "&ProductName&widgetProductA ".xlsx"
    xlApp.Quit
    Set xlApp = Nothing
    
    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, widgetProductB)
    'Save generated report
    xlApp.ActiveWorkBook.SaveAs strRootFolder &" "&ProductName&widgetProductB ".xlsx"
    xlApp.Quit
    Set xlApp = Nothing
    
    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, widgetProductC)
    'Save generated report
    xlApp.ActiveWorkBook.SaveAs strRootFolder &" "&ProductName&widgetProductC ".xlsx"
    xlApp.Quit
    Set xlApp = Nothing
End Function
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 21.04.2016, 16:13   #16
KevLev
Пользователь
 
Регистрация: 19.04.2016
Сообщений: 48
По умолчанию

Блин,опять загвоздка(
Изображения
Тип файла: jpg Screenshot_1.jpg (24.5 Кб, 109 просмотров)
KevLev вне форума Ответить с цитированием
Старый 21.04.2016, 16:21   #17
KevLev
Пользователь
 
Регистрация: 19.04.2016
Сообщений: 48
По умолчанию

Блин,знак & пропустил
KevLev вне форума Ответить с цитированием
Старый 21.04.2016, 16:44   #18
KevLev
Пользователь
 
Регистрация: 19.04.2016
Сообщений: 48
По умолчанию

Снова ошибка.
Может является причиной,что в этой функции чего нет:
Код:
'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
Изображения
Тип файла: jpg Screenshot_3.jpg (29.2 Кб, 109 просмотров)

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

Третьего параметра нету. вам ж написало сверху. Я так понимаю вы отбросили мое предложение по изменению этой функции и продолжаете использовать свою. Ок,gl&hf
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 22.04.2016, 08:39   #20
KevLev
Пользователь
 
Регистрация: 19.04.2016
Сообщений: 48
По умолчанию

Я не отбрасываю ваше предложение.Я его применил и вот,что получилось:
Код:
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, widgetProductA)
    'Save generated report
    xlApp.ActiveWorkBook.SaveAs strRootFolder &" "&ProductName&widgetProductA&".xlsx"
    xlApp.Quit
    Set xlApp = Nothing
    
    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, widgetProductB)
    'Save generated report
    xlApp.ActiveWorkBook.SaveAs strRootFolder &" "&ProductName&widgetProductB&".xlsx"
    xlApp.Quit
    Set xlApp = Nothing
    
    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, widgetProductA)
    'Save generated report
    xlApp.ActiveWorkBook.SaveAs strRootFolder &" "&ProductName&widgetProductC&".xlsx"
    xlApp.Quit
    Set xlApp = Nothing
    
    
End Function
И второе изменение:
Код:
'Call Export Widgets By Sheet
Function ExportRevenueWidgets(xlDoc,xlSheet, widgetProductX)
	ActiveDocument.GetField("ProductName").select widgetProductX
	CALL ExportWidget(xlDoc,xlSheet,WidgetID, widgetProductX)
	ActiveDocument.GetField("ProductName").Clear	
End Function
После запуска макроса мы получим только 1 Эксель файл и 1 лист с продуктом А:

Последний раз редактировалось KevLev; 22.04.2016 в 08:51.
KevLev вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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