2015-10-30 3 views
2

Я создал макрос, который пересекает список стран, и этот обновленный номер на «Dash_eng». Я могу получить цикл, чтобы работать, но часть цикла вызывает другой макрос, который копирует и сохраняет «Dash_Eng») в качестве файла ExcelСохранение файла excel в цикле VBA

Оба макроса работы, когда работают независимо друг от друга его просто положить их вместе

Macro который петлями, хотя в стране и вызывает сохранение в Excel макрос

Sub ReportUpdate()  
Dim i As Integer, numrows As Integer 
    Sheets("Text").Select   
    numrows = Range("O2", Range("O2").End(xlDown)).Rows.Count 

    Range("O1").Select 
    i = 1 
    Do While i <= numrows 
     ActiveCell.Offset(rowOffset:=1, columnoffset:=4) = "X" 
     ActiveCell.Offset(1, 0).Select 
     Range("M1") = ActiveCell 
     Call Send_to_PDF 
     i = i + 1 
    Loop 
    MsgBox "Dear Sir/Madam your base data has been refreshed and all other relivant formatting macros have been run" 
End Sub 

Сохранение макроса

Sub Send_to_PDF() 

Dim Ref As String 

Dim St As String 
Dim En As String 
Dim Ex_Ref As String 

FilePath = "P:\Hyundai\Hyundai GLOBAL\Country folders\EUROPE\A3 Ops reports" 

Sheets("Dashboard - ENG").Select 
Sheets("Dashboard - ENG").Copy 


Cells.Select 
Range("C1").Activate 
Selection.Copy 
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
    :=False, Transpose:=False 
Application.CutCopyMode = False 

Ex_Ref = Sheets("Dashboard - Eng").Range("L1") 
St = FilePath + "\Dashboard - ENG" 
Ref = Format(DateAdd("m", -1, Now()), "yyyymm") 
En = ".xlsx" 


    ChDir FilePath 
    ActiveWorkbook.SaveAs Filename:=St & " " & " " & Ex_Ref & " " & Ref & En 

    ActiveWorkbook.Theme.ThemeColorScheme.Load (_ 
     "C:\Program Files (x86)\Microsoft Office\Document Themes 15\Theme Colors\Office 2007 - 2010.xml" _ 
     ) 


    ActiveWindow.Close 

PS: Я знаю его не отправить его в PDF

Любые идеи?

+2

избегать '.Select',' .ActiveWorkbook' и '.Activate' любой ценой! Рефакторируйте весь свой код, чтобы квалифицировать все рабочие книги, листы и диапазоны (ячейки) для переменных и работать непосредственно с ними внутри блоков «With End», и вы, вероятно, исправите свою проблему или сможете лучше понять, почему ее не работают. И теперь, когда я прочитал это больше, измените 'ActiveWorkbook.SaveAs' на' ActiveSheet.ExportAsFixedFormat' (и поставьте необходимые аргументы) –

+0

Извините, если я вызвал какую-либо путаницу, которую этот лист ИСПОЛЬЗУЕТСЯ для экспорта в формате PDF, но СЕЙЧАС НЕОБХОДИМО, чтобы быть сохраненным как лист excel, который вызывает у меня вопрос –

+0

, вы реорганизовали код, как я предложил? Я уверен, что это поможет решить проблему. Использование ActiveSheet и ActiveWorkbook и переключение между ними так много может вызвать массу неожиданных проблем? –

ответ

0

Вы можете просто PDF-лист, вам не нужно его копировать.

, например

Sub PDFme() 
    Dim dr As String 
    Dim PDFnm As String 
    Dim myFnm As String 
    Dim PdfSH As Worksheet 

    dr = "C:\Users\dmorrison\Downloads\" 
    PDFnm = "MyPDF.pdf" 
    myFnm = dr & PDFnm 
    Set PdfSH = Sheets("Dashboard - ENG") 

    PdfSH.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ 
           myFnm, Quality:=xlQualityStandard, _ 
           IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _ 
           True 
End Sub 
+0

Спасибо, но мне нужно сохранить его как excel, хотя я согласен, что PDF будет FAR проще –

+0

Разве вы не хотите сохранять его в формате PDF, я думал, что это была целая проблема. Возможно, измените свой вопрос, если это не так. – Davesexcel

+0

отредактировал текст, если я не понял. –

0

Привет всем спасибо за помощь я исправил проблему.

Это не было с спасительной макрос но зацикливание макроса

Sub ReportUpdate()

Dim я As Integer, NumRows As Integer

**Sheets("Text").Select (** 

    numrows = Range("O2", Range("O2").End(xlDown)).Rows.Count 

    Range("O1").Select 

    i = 1 

    Do While i <= numrows 

    Sheets("text").Select 
    ActiveCell.Offset(rowOffset:=1, columnoffset:=4) = "X" 
    ActiveCell.Offset(1, 0).Select 
    Range("M1") = ActiveCell 

       Save_2_Excel 

    i = i + 1 

    Loop 


    MsgBox "Dear Sir/Madam your base data has been refreshed and all other relivant formatting macros have been run" 

End Sub

Линия выделено жирным шрифтом, все, что я добавил, потому что активную ячейку в листовом сырье необходимо было реактивировать до того, как петля началась еще раз

PS: Если вы копируете это перебрать сохранения файла в Excel добавить в Excel сохранения макроса

ActiveWindow.Close Ложные

Это закроет новый лист без экономии, которая круто, потому что это последняя инструкция и лист уже сохранены.