ActiveSheet.ShowAllData помощ
7 отговора
0 прегледа
ActiveSheet.ShowAllData помощ
Направих макрос, който отваря файла bazaBP, избира шит 1 и го копира във файла Edos в шит 1. Така макроса работи без проблем, но шит 1 от файла bazaBP се ползва от много хора и се използва филтър. За да ми копира цялата информация сложих "ActiveSheet.ShowAllData", но пък ми се появи проблем, че когато в шит1 на файла bazaBP, не е използван филтър на този ред дава грешка. Моля посъветвайте ме какво да добавя, за да може да се копира цялата информация и в двата случая, когато има и когато няма избран филтър и макроса да работи.
А ето икода на макроса:
Sub Macro2()
Workbooks.Open Filename:= _
"\\.................\bazaBP.xls", Password:=".....", ReadOnly:=True, UpdateLinks:= _
0
Sheets("1").Select
ActiveSheet.ShowAllData
Cells.Select
Selection.Copy
Windows("Edos.xls").Activate
Sheets("1").Select
Cells.Select
ActiveSheet.Paste
Application.CutCopyMode = False
ActiveWorkbook.Save
Windows("bazaBP.xls").Activate
ActiveWindow.Close SaveChanges:=False
End Sub
Благодаря предварително на отзовалите се.
А ето икода на макроса:
Sub Macro2()
Workbooks.Open Filename:= _
"\\.................\bazaBP.xls", Password:=".....", ReadOnly:=True, UpdateLinks:= _
0
Sheets("1").Select
ActiveSheet.ShowAllData
Cells.Select
Selection.Copy
Windows("Edos.xls").Activate
Sheets("1").Select
Cells.Select
ActiveSheet.Paste
Application.CutCopyMode = False
ActiveWorkbook.Save
Windows("bazaBP.xls").Activate
ActiveWindow.Close SaveChanges:=False
End Sub
Благодаря предварително на отзовалите се.
Re: ActiveSheet.ShowAllData помощ
Можеш да използваш FilterMode property на Worksheet за да провериш дали има приложен филтър:
If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData
Между другото кода ти може да се пипне доста, за да се избягват select-ите, да не се реферира постоянно Activesheet и т.н.
Geocaching в България
If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData
Между другото кода ти може да се пипне доста, за да се избягват select-ите, да не се реферира постоянно Activesheet и т.н.
Geocaching в България
Редактирано от Бypaн на
Re: ActiveSheet.ShowAllData помощ
Благодаря Буран
Сигурно има много неща, които могат да се напишат по-добре, ще се опитам да си оптимизирам кода. Хубав ден.
Сигурно има много неща, които могат да се напишат по-добре, ще се опитам да си оптимизирам кода. Хубав ден.
Re: ActiveSheet.ShowAllData помощ
Пробвай преди
ActiveSheet.ShowAllDataда сложиш този ред:
On Error Resume Next
Re: ActiveSheet.ShowAllData помощ
По принцип мисля че On Error Resume Next е хубаво да се използва само в краен случай. Разбира се има определени ситуации, които са изключение от това правило, но в случая не е така, при условие, че има "легален" начин да се провери приложен ли е филтър.
Ако все пак се използва, то тогава веднага след ActiveSheet.ShowAllData трябва да се сложи On Error GoTo 0 (в общия случай, когато няма дефиниран errоr handler). Ако не се възстанови обработката на грешки, резултата може да бъде много неочакван.
Geocaching в България
Ако все пак се използва, то тогава веднага след ActiveSheet.ShowAllData трябва да се сложи On Error GoTo 0 (в общия случай, когато няма дефиниран errоr handler). Ако не се възстанови обработката на грешки, резултата може да бъде много неочакван.
Geocaching в България
Re: ActiveSheet.ShowAllData помощ
Прав си, по принцип твоето решение е по-добро, но го постнах за да има човека идея и за този начин, защото, както и ти казваш, понякога не можеш да избягаш от on error-а. 
Re: ActiveSheet.ShowAllData помощ
:-)
Предположих, че е така. просто исках да доизясня идеята ти - че трябва да се възстранови обработката на грешки след това
Предположих, че е така. просто исках да доизясня идеята ти - че трябва да се възстранови обработката на грешки след това
Редактирано от Бypaн на
Re: ActiveSheet.ShowAllData помощ
Благодеря за предложената идея за "On Error Resume Next"
Някой път при необходимост ще я ползвам.
Някой път при необходимост ще я ползвам.