Много кода там, но выскакивает только одна вещь относительно изменений в Excel 2007. В 2003 году, если вы скопировали лист в другое место, он раньше становился ActiveSheet.Это не происходит в 2007+, поэтому вам нужно заново обработать код, чтобы явно указать ссылку на копию.
Например:
Dim shtCopy as Worksheet
'copy a sheet
ThisWorkbook.Sheets("Template").Copy After:=Thisworkbook.Sheets("Data")
'get a reference to the copy
Set shtCopy = ThisWorkbook.Sheets(Thisworkbook.Sheets("Data").Index+1)
Редактировать: сделатьВы действительно имеете в виду это
num_sheets = Workbooks.Count
, а не
num_sheets = ActiveWorkbook.Sheets.Count
?
РЕДАКТИРОВАТЬ: лучше всего я могу предположить, что это должно работать для вас
Sub ExportReports()
Static varfile_name As String
Static strpassword As String
'Dim fdialog As Office.FileDialog
Dim varfile As String
Dim prog_name As String
Dim curr_wb As Workbook
Dim selected_wb As Workbook
Dim xflag As String
Dim n As Integer
Set curr_wb = ActiveWorkbook
prog_name = curr_wb.Worksheets("Menu").Range("F14")
'Set fdialog = Application.FileDialog(msoFileDialogFilePicker)
With Application.FileDialog(msoFileDialogFilePicker)
.Title = "Please select or create the file you wish to export reports to"
.Filters.Clear
.Filters.Add "Microsoft Excel Files", "*.xlsx"
If .Show = True Then
varfile = .SelectedItems(1)
Else
Exit Sub
End If
End With
If strpassword = "" Then
strpassword = InputBox("Enter a password to protect worksheets in this file")
End If
'tw Not sure what the purpose of this is?
' by default it will select the *previous* selected wb...
For n = 1 To Application.Workbooks.Count
If Workbooks(n).Name = varfile_name Then
Set selected_wb = Workbooks(n)
Exit For 'break out of loop
End If
Next
If selected_wb Is Nothing Then
Set selected_wb = Workbooks.Open(Filename:=varfile, UpdateLinks:=0)
End If
varfile_name = selected_wb.Name
xflag = "a"
If selected_wb.Sheets(1).Name = "Invoice" Then
xflag = xflag & "b"
End If
If selected_wb.Sheets(2).Name = "All Programs" Then
xflag = xflag & "c"
End If
Select Case xflag
Case "a" ' Both Invoice and All Programs must be exported
CopySheet curr_wb.Sheets("Invoice"), _
selected_wb, 1, "", strpassword
CopySheet curr_wb.Sheets("Preview All Programs"), _
selected_wb, 2, "All Programs", strpassword
Case "ab" ' Only All Programs must be exported
CopySheet curr_wb.Sheets("Preview All Programs"), _
selected_wb, 3, "All Programs", strpassword
Case "ac" ' Only invoice must be exported
CopySheet curr_wb.Sheets("Invoice"), _
selected_wb, 2, "", strpassword
End Select
CopySheet curr_wb.Sheets("Preview"), _
selected_wb, 3, prog_name, strpassword
curr_wb.Activate
curr_wb.Worksheets("Menu").Activate
'selected_wb.Close
End Sub
'Copy sheet to specific position, convert to values,
' change name
Sub CopySheet(wsToCopy As Worksheet, destWb As Workbook, _
destPos As Integer, newName As String, pw As String)
Dim shtCopy As Worksheet
If destPos = 1 Then
wsToCopy.Copy Before:=destWb.Sheets(1)
Else
wsToCopy.Copy After:=destWb.Sheets(destPos - 1)
End If
With destWb.Sheets(destPos)
.UsedRange.Value = .UsedRange.Value
If Len(newName) > 0 Then .Name = newName
.Protect Password:=pw, Scenarios:=True
.Range("A1").Select
End With
End Sub