#vba #excel
#vba #excel
Вопрос:
Просто быстрый вопрос относительно вставки. У меня есть скрипт, который экспортирует отдельные строки во вновь созданную книгу. Однако проблема в том, что вставленные значения представлены в виде изображения. Кроме того, комментарии пропускаются. Я использовал тот же код для вставки в другие листы той же книги, и проблем нет.
Кажется, я не могу найти причину. Любая помощь будет принята с благодарностью.
Спасибо
Private Sub DC_1Month_Button_Click()
'Searches for crews working on MFDC (7343) and exports a new spreadsheet looking 3 weeks ahead for each person
If MsgBox("Export DC individual schedules?") = vbNo Then
Exit Sub
End If
On Error GoTo CleanFail
Dim nowCol As Integer, lastCol As Integer, endCol As Integer, crewRow As Integer
Dim masterSheet As Worksheet, newExcel As Object, newBook As Workbook, newSheet As Worksheet
Dim startRow As Integer, endRow As Integer
Dim currentName As String, currentProject As String
startRow = 3
endRow = UsedRange.Row - 1 UsedRange.Rows.count
lastcoln = UsedRange.Column - 1 UsedRange.Columns.count
Set masterSheet = ThisWorkbook.Worksheets("Master Schedule")
'Find columns for today and date 3 weeks after
nowCol = Range(Cells(2, 1), Cells(2, lastcoln)).Find(what:=Month(Date) amp; "/" amp; Day(Date) amp; "/" amp; Year(Date)).Column
endCol = Range(Cells(2, 1), Cells(2, lastcoln)).Find(what:=Month(DateAdd("d", 30, Date)) amp; "/" amp; Day(DateAdd("d", 30, Date)) amp; "/" amp; Year(DateAdd("d", 30, Date))).Column
'Disable screen flashing while doing copying and exports
Application.ScreenUpdating = False
'Loop through crew members
For i = 3 To endRow
'Store current row's values
currentName = Replace(ActiveSheet.Cells(i, 2).Value, "SA: ", "")
currentProject = ActiveSheet.Cells(i, 3).Value
'Search the value from the Project column for the MFDC project number
If InStr(1, currentProject, "7343") > 0 Then
'Load schedule template
Set newExcel = CreateObject("Excel.Application")
newExcel.DisplayAlerts = False
newExcel.Workbooks.Open "\VALGEOFS01SurveyProjectManagers304ScheduleTemplatesDC_3Week_Template.xlsx"
Set newBook = newExcel.Workbooks(1)
Set newSheet = newBook.Worksheets(1)
'Copy and paste header rows
masterSheet.Range(masterSheet.Cells(1, nowCol), masterSheet.Cells(2, endCol)).Copy 'Destination:=newSheet.Range("A1")
Application.Wait (Now TimeValue("0:00:01"))
newSheet.Range(newSheet.Cells(1, 6), newSheet.Cells(1, endCol - 1)).PasteSpecial xlPasteValuesAndNumberFormats
Application.CutCopyMode = False
'Copy and paste crew member's location
masterSheet.Range(masterSheet.Cells(i, 2), masterSheet.Cells(i, 6)).Copy 'Destination:=newSheet.Range("A3")
Application.Wait (Now TimeValue("0:00:01"))
newSheet.Range("A3").PasteSpecial Paste:=xlPasteValuesAndNumberFormats
Application.CutCopyMode = False
'Copy schedule data for crew member
masterSheet.Range(masterSheet.Cells(i, nowCol), masterSheet.Cells(i, endCol)).Copy
Application.Wait (Now TimeValue("0:00:01"))
newSheet.Cells(3, 6).PasteSpecial Paste:=xlPasteAll
Application.CutCopyMode = False
'Save individual's schedule
With newBook
.Title = currentName amp; " MFDC Schedule"
.SaveAs Filename:="\VALGEOFS01SurveyProjectManagers304ScheduleMFDC Individual Schedules" amp; currentName amp; " MFDC Schedule " amp; Format(Date, "yymmdd") amp; ".xlsx", AccessMode:=xlExclusive, ConflictResolution:=Excel.XlSaveConflictResolution.xlLocalSessionChanges
.Close (True)
End With
End If
Next i
CleanExit:
MsgBox "Export complete"
'Restore normal screen updating
Application.ScreenUpdating = True
Exit Sub
CleanFail:
If Err.Number <> 0 Then
Msg = "Error # " amp; Str(Err.Number) amp; " was generated by " amp; Err.Source amp; Chr(13) amp; Err.Description
MsgBox Msg, , "Error", Err.HelpFile, Err.HelpContext
End If
Resume CleanExit
Resume
End Sub
Комментарии:
1. Вы используете xlPasteAll один раз, но xlPasteValuesAndNumberFormats в другие разы. Возможно, именно поэтому?
2. Почему вы запускаете новый сеанс Excel на каждой итерации? Вы можете придерживаться текущего сеанса Excel и использовать книги. Откройте (), чтобы открыть новые книги, а затем закройте их с помощью метода Close(), как только вы закончите.
3. @Comintern, см. Отредактированный пост с изображением.
4. @user3598756, создаются и экспортируются разные файлы. Отсюда и отдельные сеансы.
5. @Jbjstam, я попробую это проверить.