За последние 24 часа нас посетил 17521 программист и 1716 роботов. Сейчас ищут 1745 программистов ...

Изменить код макроса так, чтобы каждая строка экспортировалась в отдел

Тема в разделе "Сделайте за меня", создана пользователем KevLev, 20 апр 2016.

  1. KevLev

    KevLev Новичок

    С нами с:
    20 апр 2016
    Сообщения:
    2
    Симпатии:
    0
    Всем привет!Прошу прощение,если ошибся разделом форума.Есть макрос загрузки в эксель:

    Код (Text):
    1. 'Variable to hold default root folder name
    2. Dim strRootFolder
    3. strRootFolder = "X:\МАКРОСЫ\"
    4.  
    5. Dim reportName
    6. reportName="Product"
    7.  
    8. Dim WidgetID
    9. WidgetID = "ProductB"
    10.  
    11. Dim widgetProductA
    12. widgetProductA = "A"
    13.  
    14. Dim widgetProductB
    15. widgetProductB = "B"
    16.  
    17. Dim widgetProductC
    18. widgetProductC = "C"
    19.  
    20. Function ExportProduct()
    21.  
    22. CALL CheckFolderExists(strRootFolder)
    23.  
    24. ActiveDocument.ClearAll true
    25.  
    26. Set xlApp = CreateObject("Excel.Application")
    27. xlApp.Visible = true
    28. Set xlDoc = xlApp.Workbooks.Add 'open new workbook
    29. nSheetsCount = 0
    30. CALL RemoveDefaultSheet(xlDoc)
    31.  
    32. nSheetsCount = xlDoc.Sheets.Count
    33. xlDoc.Sheets(nSheetsCount).Select
    34. Set xlSheet = xlDoc.Sheets(nSheetsCount)
    35.  
    36. CALL ExportRevenueWidgets(xlDoc,xlSheet)
    37.  
    38. 'Save generated report
    39. xlApp.ActiveWorkBook.SaveAs strRootFolder &" "&reportName & ".xlsx"
    40. xlApp.Quit
    41.  
    42. End Function
    43.  
    44. 'Call Export Widgets By Sheet
    45. Function ExportRevenueWidgets(xlDoc,xlSheet)
    46. ActiveDocument.GetField("ProductNam e").select widgetProductA
    47. CALL ExportWidget(xlDoc,xlSheet,WidgetID , widgetProductA)
    48. ActiveDocument.GetField("ProductNam e").Clear
    49. ActiveDocument.GetField("ProductNam e").select widgetProductB
    50. CALL ExportWidget(xlDoc,xlSheet,WidgetID , widgetProductB)
    51. ActiveDocument.GetField("ProductNam e").Clear
    52. ActiveDocument.GetField("ProductNam e").select widgetProductC
    53. CALL ExportWidget(xlDoc,xlSheet,WidgetID , widgetProductC)
    54. ActiveDocument.GetField("ProductNam e").Clear
    55. End Function
    56.  
    57. 'Export Widgets by Type
    58. Function ExportWidget(xlDoc,xlSheet,widget, Value)
    59. Select Case Value
    60. Case widgetProductA:
    61. Call Export(0,xlSheet,widget,xlDoc,widge tProductA)
    62. Case widgetProductB:
    63. Call Export(1,xlSheet,widget,xlDoc,widge tProductB)
    64. Case widgetProductC:
    65. Call Export(1,xlSheet,widget,xlDoc,widge tProductC)
    66. End Select
    67. End Function
    68.  
    69. 'Export Widgets
    70. Function Export(IsNeedNewSheet,xlSheet,widge tID,xlDoc,sheetName)
    71.  
    72. If IsNeedNewSheet = 1 then
    73. CALL AddExcelSheet(xlDoc,sheetName)
    74. nSheetsCount = xlDoc.Sheets.Count
    75. xlDoc.Sheets(nSheetsCount).Select
    76. Set xlSheet = xlDoc.Sheets(nSheetsCount)
    77. Else
    78. xlSheet.Name = sheetName
    79. End If
    80.  
    81. nRow = xlSheet.UsedRange.Rows.Count
    82.  
    83. If nRow > 1 Then
    84. nRow = nRow + 4
    85. Else
    86. nRow = nRow + 2
    87. End If
    88.  
    89. Set SheetObj = ActiveDocument.GetSheetObject(widge tID)
    90.  
    91. ObjCaption = SheetObj.GetCaption.Name.v
    92. xlSheet.Range("A"&nRow-1) = ObjCaption
    93. xlSheet.Range("A"&nRow-1).Font.Bold = true
    94.  
    95. 'Copy the chart object to clipboard
    96. SheetObj.CopyTableToClipboard true
    97.  
    98. 'Paste the chart object in Excel file
    99. xlSheet.Paste xlSheet.Range("A"&nRow)
    100.  
    101. 'Format the excel file
    102. xlSheet.cells.Font.Size = "8"
    103. xlSheet.cells.Font.Name = "Tahoma"
    104.  
    105. End Function
    106.  
    107. 'Add New Sheet in Excel File
    108. Sub AddExcelSheet(xlDoc, strSheetName)
    109.  
    110. xlDoc.Sheets.Add, xlDoc.Sheets(xlDoc.Sheets.Count)
    111. Set xlSheet = xlDoc.Sheets(xlDoc.Sheets.Count)
    112. xlSheet.Name = Left(strSheetName, 31)
    113. End Sub
    114.  
    115. 'Remove Default Sheets from Excel Files
    116. Sub RemoveDefaultSheet(xlDoc)
    117. Do
    118. nSheetsCount = xlDoc.Sheets.Count
    119. If nSheetsCount = 1 then
    120. Exit Do
    121. Else
    122. xlDoc.Sheets(nSheetsCount).Select
    123. xlDoc.ActiveSheet.Delete
    124. End If
    125. Loop
    126. End Sub
    127.  
    128.  
    129. 'Checks whether given folder exists if not creates the given folder
    130. Function CheckFolderExists(path)
    131.  
    132. Set fileSystemObject = CreateObject("Scripting.FileSystemO bject")
    133.  
    134. If Not fileSystemObject.FolderExists(path) Then
    135. fileSystemObject.CreateFolder(path)
    136. End If
    137.  
    138. End Function
    Проблема в том,что,таблицу,которую макрос экспортирует в эксель,он ее разбивает по строкам.И каждой строке таблицы соответствует свой отдельный лист.
    Задача: чтобы макрос разбивал ТАКЖЕ по строчно,но КАЖДАЯ строка экспортировалась в ОТДЕЛЬНЫЙ эксель файл.
    Могу предположить,что проблема в функции Function ExportProduct(),но не уверен,т.к. в макросах очень слабоват.
     

    Вложения:

    #1 KevLev, 20 апр 2016
    Последнее редактирование модератором: 20 апр 2016
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.583
    Симпатии:
    1.761
    А что, по бейсику форумы отсутствуют, надо на форум по PHP писать?
     
  3. KevLev

    KevLev Новичок

    С нами с:
    20 апр 2016
    Сообщения:
    2
    Симпатии:
    0
    Ответов на других форумах,пока,нет.Вдруг здесь есть те,кто в макросах разбирается и может помочь
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.108
    Симпатии:
    1.243
    Адрес:
    там-сям
    Раздел подходящий, я считаю :) А что, а вдруг.
     
  5. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    @KevLev а вам в вашей фирме не платят зарплату вообще?