Всем привет, сделал себе такую вот надстройку, может кому то еще пригодится. Спрашивается зачем? - если есть кнопка преобразовать в стандартных функциях офиса, но суть моей надстройки немного шире чем просто преобразовать))))
Когда сохраняем таблицу 1с в екселевский документ, то у нас, плюс ко всему, не видно ярлычки листов, чтоб их увидеть нужно лезть в настройки и включить птичку "показать Ярлычки листов", плюс потом, вручную растягивать горизонтальную полосу прокрутки... плюс лист подписан как Sheet1, вместо привычного Лист1... А ниже приведенный код который избавляет от этих мучений))))) В личную книгу макросов, кнопку на панель быстрого доступа и вуаля!
[vba]
Код
Sub ConvertToXlsx() Dim s, newS As String Dim str1() As String Application.DisplayAlerts = False Application.ScreenUpdating = False str1 = Split(ActiveWorkbook.FullName, ".") Spliting = str1(UBound(str1))
If Spliting = "xls" Then s = ActiveWorkbook.FullName newS = Replace(s, "xls", "xlsx") ActiveWorkbook.SaveAs newS, xlOpenXMLWorkbook ActiveWorkbook.Close Kill s Workbooks.Open (newS)
With ActiveWindow .DisplayHorizontalScrollBar = False .DisplayWorkbookTabs = True .DisplayHorizontalScrollBar = True .TabRatio = 0.6 End With
Application.ReferenceStyle = xlA1 If ActiveSheet.Name = "Sheet1" Then ActiveSheet.Name = "Лист1" End If End If Application.DisplayAlerts = True Application.ScreenUpdating = True End Sub
[/vba]
Всем привет, сделал себе такую вот надстройку, может кому то еще пригодится. Спрашивается зачем? - если есть кнопка преобразовать в стандартных функциях офиса, но суть моей надстройки немного шире чем просто преобразовать))))
Когда сохраняем таблицу 1с в екселевский документ, то у нас, плюс ко всему, не видно ярлычки листов, чтоб их увидеть нужно лезть в настройки и включить птичку "показать Ярлычки листов", плюс потом, вручную растягивать горизонтальную полосу прокрутки... плюс лист подписан как Sheet1, вместо привычного Лист1... А ниже приведенный код который избавляет от этих мучений))))) В личную книгу макросов, кнопку на панель быстрого доступа и вуаля!
[vba]
Код
Sub ConvertToXlsx() Dim s, newS As String Dim str1() As String Application.DisplayAlerts = False Application.ScreenUpdating = False str1 = Split(ActiveWorkbook.FullName, ".") Spliting = str1(UBound(str1))
If Spliting = "xls" Then s = ActiveWorkbook.FullName newS = Replace(s, "xls", "xlsx") ActiveWorkbook.SaveAs newS, xlOpenXMLWorkbook ActiveWorkbook.Close Kill s Workbooks.Open (newS)
With ActiveWindow .DisplayHorizontalScrollBar = False .DisplayWorkbookTabs = True .DisplayHorizontalScrollBar = True .TabRatio = 0.6 End With
Application.ReferenceStyle = xlA1 If ActiveSheet.Name = "Sheet1" Then ActiveSheet.Name = "Лист1" End If End If Application.DisplayAlerts = True Application.ScreenUpdating = True End Sub
Немного предложили подправить код, поскольку не учел некоторых факторов: первое - если xls будет не только расширение, но и последовательность в имени, его также изменит на xlsx второе - если ВДРУГ, МАГИЧЕСКИМ ОБРАЗОМ, выгрузка с 1с будет содержать более одного листа, то мой код переименует лишь первый...
вот предложенная доработка от AndreTM, с исправлениями двух вышеописанных проблем.
[vba]
Код
Sub ConvertToXlsx() Dim s, newS As String Dim str1() As String Dim sh As Object Application.DisplayAlerts = False Application.ScreenUpdating = False str1 = Split(ActiveWorkbook.FullName, ".") Spliting = str1(UBound(str1))
If Spliting = "xls" Then s = ActiveWorkbook.FullName
ActiveWorkbook.SaveAs newS, xlOpenXMLWorkbook ActiveWorkbook.Close Kill s Workbooks.Open (newS)
With ActiveWindow .DisplayHorizontalScrollBar = False .DisplayWorkbookTabs = True .DisplayHorizontalScrollBar = True .TabRatio = 0.6 End With
Application.ReferenceStyle = xlA1
For Each sh In ActiveWorkbook.Sheets If Left(sh.Name, 5) = "Sheet" Then sh.Name = "Лист" & Mid(sh.Name, 6) End If Next End If Application.DisplayAlerts = True Application.ScreenUpdating = True End Sub
[/vba]
Немного предложили подправить код, поскольку не учел некоторых факторов: первое - если xls будет не только расширение, но и последовательность в имени, его также изменит на xlsx второе - если ВДРУГ, МАГИЧЕСКИМ ОБРАЗОМ, выгрузка с 1с будет содержать более одного листа, то мой код переименует лишь первый...
вот предложенная доработка от AndreTM, с исправлениями двух вышеописанных проблем.
[vba]
Код
Sub ConvertToXlsx() Dim s, newS As String Dim str1() As String Dim sh As Object Application.DisplayAlerts = False Application.ScreenUpdating = False str1 = Split(ActiveWorkbook.FullName, ".") Spliting = str1(UBound(str1))
If Spliting = "xls" Then s = ActiveWorkbook.FullName
ActiveWorkbook.SaveAs newS, xlOpenXMLWorkbook ActiveWorkbook.Close Kill s Workbooks.Open (newS)
With ActiveWindow .DisplayHorizontalScrollBar = False .DisplayWorkbookTabs = True .DisplayHorizontalScrollBar = True .TabRatio = 0.6 End With
Application.ReferenceStyle = xlA1
For Each sh In ActiveWorkbook.Sheets If Left(sh.Name, 5) = "Sheet" Then sh.Name = "Лист" & Mid(sh.Name, 6) End If Next End If Application.DisplayAlerts = True Application.ScreenUpdating = True End Sub
немного доработал код под себя. не, ну как доработал: тупо вставил честно стыренный где то тут на просторах форума(не помню у кого, да простит меня автор) код преобразования "." в ",". Тем самым переводя текст из 1С в числовой формат [vba]
Код
Sub ConvertToXlsx() Dim s, newS As String Dim str1() As String Dim sh As Object Application.DisplayAlerts = False Application.ScreenUpdating = False str1 = Split(ActiveWorkbook.FullName, ".") Spliting = str1(UBound(str1))
If Spliting = "xls" Then s = ActiveWorkbook.FullName
ActiveWorkbook.SaveAs newS, xlOpenXMLWorkbook ActiveWorkbook.Close Kill s Workbooks.Open (newS)
With ActiveWindow .DisplayHorizontalScrollBar = False .DisplayWorkbookTabs = True .DisplayHorizontalScrollBar = True .TabRatio = 0.6 End With
Application.ReferenceStyle = xlA1
For Each sh In ActiveWorkbook.Sheets If Left(sh.Name, 5) = "Sheet" Then sh.Name = "Ëèñò" & Mid(sh.Name, 6) End If Next End If
Dim rn As Range ' вот эта часть For Each rn In Intersect([f:ad], ActiveSheet.UsedRange) If rn Like "*#.#*" Then rn = Val(rn) ', ".", ",") rn.NumberFormat = "0.0000" End If Next Application.DisplayAlerts = True Application.ScreenUpdating = True End Sub
[/vba]
немного доработал код под себя. не, ну как доработал: тупо вставил честно стыренный где то тут на просторах форума(не помню у кого, да простит меня автор) код преобразования "." в ",". Тем самым переводя текст из 1С в числовой формат [vba]
Код
Sub ConvertToXlsx() Dim s, newS As String Dim str1() As String Dim sh As Object Application.DisplayAlerts = False Application.ScreenUpdating = False str1 = Split(ActiveWorkbook.FullName, ".") Spliting = str1(UBound(str1))
If Spliting = "xls" Then s = ActiveWorkbook.FullName
ActiveWorkbook.SaveAs newS, xlOpenXMLWorkbook ActiveWorkbook.Close Kill s Workbooks.Open (newS)
With ActiveWindow .DisplayHorizontalScrollBar = False .DisplayWorkbookTabs = True .DisplayHorizontalScrollBar = True .TabRatio = 0.6 End With
Application.ReferenceStyle = xlA1
For Each sh In ActiveWorkbook.Sheets If Left(sh.Name, 5) = "Sheet" Then sh.Name = "Ëèñò" & Mid(sh.Name, 6) End If Next End If
Dim rn As Range ' вот эта часть For Each rn In Intersect([f:ad], ActiveSheet.UsedRange) If rn Like "*#.#*" Then rn = Val(rn) ', ".", ",") rn.NumberFormat = "0.0000" End If Next Application.DisplayAlerts = True Application.ScreenUpdating = True End Sub