Удаляю лист книги и пытаюсь ее сохранить ...
Модератор: Naeel Maqsudov
Удаляю лист книги и пытаюсь ее сохранить
Error вылазит:
can't enter break mode at this time и потом еще type mismatch
Код:
Private Sub CB_Load_Click()
' Загрузка из файла
With CommonDialog1
.Filter = "Файлы Excel (*.xls)| *.xls" 'Фильтр для открытия файла
.InitDir = "C:\"
.Action = 1 'Или же CommonDialog1.ShowOpen
'.Filename = "TS"
End With
Application.Workbooks.Open CommonDialog1.Filename
TS_Open = ActiveWorkbook.Name
nResult = MsgBox("Внимание лист таблицы соответствия будет заменен. Вы согласны ? ", vbYesNo + vbExclamation, "Будем заменять лист таблицы соответствия ? !")
If nResult = vbYes Then
Workbooks("osv.xls").Activate
Workbooks("osv.xls").Worksheets("Таблица соответствия").Select
ActiveWindow.SelectedSheets.Delete
Workbooks("osv.xls").Save
Error вылазит:
can't enter break mode at this time и потом еще type mismatch
Код:
Private Sub CB_Load_Click()
' Загрузка из файла
With CommonDialog1
.Filter = "Файлы Excel (*.xls)| *.xls" 'Фильтр для открытия файла
.InitDir = "C:\"
.Action = 1 'Или же CommonDialog1.ShowOpen
'.Filename = "TS"
End With
Application.Workbooks.Open CommonDialog1.Filename
TS_Open = ActiveWorkbook.Name
nResult = MsgBox("Внимание лист таблицы соответствия будет заменен. Вы согласны ? ", vbYesNo + vbExclamation, "Будем заменять лист таблицы соответствия ? !")
If nResult = vbYes Then
Workbooks("osv.xls").Activate
Workbooks("osv.xls").Worksheets("Таблица соответствия").Select
ActiveWindow.SelectedSheets.Delete
Workbooks("osv.xls").Save
Jojo®
-
- Сообщения: 11
- Зарегистрирован: 07 июл 2004, 12:09
- Откуда: Красноярск
попробуй перед удалением запретить предупреждения:
Application.DisplayAlerts = False
ActiveWindow.SelectedSheets.Delete
Application.DisplayAlerts = True
Application.DisplayAlerts = False
ActiveWindow.SelectedSheets.Delete
Application.DisplayAlerts = True
__________
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
jojo, в какой конкретно строке возникает type mismatch?
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
BeerMaster, Ваш совет правильный, и важен, когда дело доходит до ActiveWindow.SelectedSheets.Delete, но судя по перечню ошибок указанных автором вопроса, то до ActiveWindow.SelectedSheets.Delete еще далеко. Если из приведенного кода исключить работу с CommonDialog1 то абсолютно никаких предпосылок для возникновения указанных ошибок не будет.
jojo, где-то возникает type mismatch (несоответствие типов), и это первичная ошибка. VBA при этом должен перейти в break mode (выделить желтым строку с ошибкой), но по каким-то непонятным мне причинам возникает вторичная ошибка, связанная с невозможностью перехода в Break mode. В связи с этим дополнительный встречный вопрос: Что за CommonDialog используется в этом проекте? Из какой библиотеки?
jojo, где-то возникает type mismatch (несоответствие типов), и это первичная ошибка. VBA при этом должен перейти в break mode (выделить желтым строку с ошибкой), но по каким-то непонятным мне причинам возникает вторичная ошибка, связанная с невозможностью перехода в Break mode. В связи с этим дополнительный встречный вопрос: Что за CommonDialog используется в этом проекте? Из какой библиотеки?
Использую, бросил прямо на лист
MS Common Dialog Control 6.0. (SP3)
Млин хрень хреновская ...чё делать то ...
Не катит - ошибка Automation error -2147221080(800401a8)
Private Sub CB_Load_Click()
' Загрузка из файла
With CommonDialog1
.Filter = "Файлы Excel (*.xls)| *.xls" 'Фильтр для открытия файла
.InitDir = "C:\"
.Action = 1 'Или же CommonDialog1.ShowOpen
End With
Application.Workbooks.Open CommonDialog1.FileTitle
TS_Open = CommonDialog1.FileTitle
nResult = MsgBox("Внимание лист таблицы соответствия будет заменен. Вы согласны ? ", vbYesNo + vbExclamation, "Будем заменять лист таблицы соответствия ? !")
If nResult = vbYes Then
Workbooks("osv.xls").Activate
Workbooks("osv.xls").Worksheets("Таблица соответствия").Select
Application.DisplayAlerts = False
ActiveWindow.SelectedSheets.Delete
Application.DisplayAlerts = True
ActiveWorkbook.Save
Workbooks("ts.xls").Activate
Workbooks("ts.xls").Worksheets("Таблица соответствия").Select
Workbooks("ts.xls").Worksheets("Таблица соответствия").Copy Before:=Workbooks("osv.xls").Sheets(5)
Workbooks("ts.xls").Activate
ActiveWorkbook.Close SaveChanges:=False, Filename:=TS_Open
MsgBox ("Внимание ! Таблица соответствия сохранена в файле OSV.XLS !")
End If
End Sub
MS Common Dialog Control 6.0. (SP3)
Млин хрень хреновская ...чё делать то ...
Не катит - ошибка Automation error -2147221080(800401a8)
Private Sub CB_Load_Click()
' Загрузка из файла
With CommonDialog1
.Filter = "Файлы Excel (*.xls)| *.xls" 'Фильтр для открытия файла
.InitDir = "C:\"
.Action = 1 'Или же CommonDialog1.ShowOpen
End With
Application.Workbooks.Open CommonDialog1.FileTitle
TS_Open = CommonDialog1.FileTitle
nResult = MsgBox("Внимание лист таблицы соответствия будет заменен. Вы согласны ? ", vbYesNo + vbExclamation, "Будем заменять лист таблицы соответствия ? !")
If nResult = vbYes Then
Workbooks("osv.xls").Activate
Workbooks("osv.xls").Worksheets("Таблица соответствия").Select
Application.DisplayAlerts = False
ActiveWindow.SelectedSheets.Delete
Application.DisplayAlerts = True
ActiveWorkbook.Save
Workbooks("ts.xls").Activate
Workbooks("ts.xls").Worksheets("Таблица соответствия").Select
Workbooks("ts.xls").Worksheets("Таблица соответствия").Copy Before:=Workbooks("osv.xls").Sheets(5)
Workbooks("ts.xls").Activate
ActiveWorkbook.Close SaveChanges:=False, Filename:=TS_Open
MsgBox ("Внимание ! Таблица соответствия сохранена в файле OSV.XLS !")
End If
End Sub
Jojo®
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
Да... У меня такого и нету вообще.Использую, бросил прямо на лист
MS Common Dialog Control 6.0. (SP3)
Млин хрень хреновская ...чё делать то ...
Досадно, что никак не вызвать родной диалог Excel которым открываются файлы.
Впрочем решение есть. Вместо MS Common Dialog Control 6.0. надо просто воспользоваться функцией WinApi.
Сходите на доску по WinApi (ShellApi) - спросите. Там есть функция для выбора директории и функция для выбора файла. Они делают стандартные диалоговые окна. Мы ее на VBA переведем.
Я бы сам посмотрел, но все мои хелпы и примеры сейчас от меня далеко

Есть вариант еще воспользоваться в встроенным диалоговым окошком для открытия файлов:
Private Sub CB_Load_Click()
If (Application.Dialogs(xlDialogOpen).Show("*.xls")) Then
Dim newBook As Workbook
Set newBook = Application.Workbooks(Application.Workbooks.Count)
nResult = MsgBox("Внимание лист таблицы соответствия будет заменен. Вы согласны ? ", vbYesNo + vbExclamation, "Будем заменять лист таблицы соответствия ? !")
If nResult = vbYes Then
'нельзя удалять из книги последний лист
If newBook.Worksheets.Count > 1 Then
Application.DisplayAlerts = False
On Error GoTo NoSheet
newBook.Worksheets("Sheet1").Delete
On Error GoTo 0
Application.DisplayAlerts = True
End If
newBook.Save
newBook.Close SaveChanges:=False
End If
End If
NoSheet:
MsgBox "нет такого листа"
Exit Sub
End Sub
Private Sub CB_Load_Click()
If (Application.Dialogs(xlDialogOpen).Show("*.xls")) Then
Dim newBook As Workbook
Set newBook = Application.Workbooks(Application.Workbooks.Count)
nResult = MsgBox("Внимание лист таблицы соответствия будет заменен. Вы согласны ? ", vbYesNo + vbExclamation, "Будем заменять лист таблицы соответствия ? !")
If nResult = vbYes Then
'нельзя удалять из книги последний лист
If newBook.Worksheets.Count > 1 Then
Application.DisplayAlerts = False
On Error GoTo NoSheet
newBook.Worksheets("Sheet1").Delete
On Error GoTo 0
Application.DisplayAlerts = True
End If
newBook.Save
newBook.Close SaveChanges:=False
End If
End If
NoSheet:
MsgBox "нет такого листа"
Exit Sub
End Sub
Jojo®
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
Черт! Как это не заметил этот метод!?Application.Dialogs

Ну так как? Все получилось?
Спасибо за помощь
!
Да этот альтернативный способ работает !!! ...но у меня начинается путаница с активными книгами
лист удаляется ... но не в той книге ...
, то закрывается не та книга
Посмотрите пож-та выше - моя задача
1.удалить лист в 1-ой книге
2.скопировать лист из 2 книги в 1 книгу
Вот код на котором я остановился
Private Sub CB_Load_Click1()
Dim newBook As Workbook
If (Application.Dialogs(xlDialogOpen).Show("*.xls")) Then
TS_Open = ActiveWorkbook.Name
Set newBook = Application.ActiveWorkbook
Application.Workbooks("osv.xls").Activate
Application.Workbooks("osv.xls").Worksheets("Таблица соответствия").Select
nResult = MsgBox("Внимание лист таблицы соответствия будет заменен. Вы согласны ? ", vbYesNo + vbExclamation, "Будем заменять лист таблицы соответствия ? !")
If nResult = vbYes Then
'нельзя удалять из книги последний лист
If newBook.Worksheets.Count > 1 Then
Application.DisplayAlerts = False
On Error GoTo NoSheet
ThisWorkbook.Worksheets("Таблица соответствия").Delete
On Error GoTo 0
Application.DisplayAlerts = True
End If
Workbooks(TS_Open).Activate
Workbooks(TS_Open).Worksheets("Таблица соответствия").Select
Workbooks(TS_Open).Worksheets("Таблица соответствия").Copy Before:=Workbooks("osv.xls").Sheets(5)
Workbooks(TS_Open).Activate
ActiveWorkbook.Close SaveChanges:=False
newBook.Save
'newBook.Close SaveChanges:=False
MsgBox ("Внимание ! Таблица соответствия сохранена в файле OSV.XLS !")
End If
End If
NoSheet:
MsgBox "нет такого листа"
Exit Sub
End Sub

Да этот альтернативный способ работает !!! ...но у меня начинается путаница с активными книгами
лист удаляется ... но не в той книге ...

Посмотрите пож-та выше - моя задача
1.удалить лист в 1-ой книге
2.скопировать лист из 2 книги в 1 книгу
Вот код на котором я остановился
Private Sub CB_Load_Click1()
Dim newBook As Workbook
If (Application.Dialogs(xlDialogOpen).Show("*.xls")) Then
TS_Open = ActiveWorkbook.Name
Set newBook = Application.ActiveWorkbook
Application.Workbooks("osv.xls").Activate
Application.Workbooks("osv.xls").Worksheets("Таблица соответствия").Select
nResult = MsgBox("Внимание лист таблицы соответствия будет заменен. Вы согласны ? ", vbYesNo + vbExclamation, "Будем заменять лист таблицы соответствия ? !")
If nResult = vbYes Then
'нельзя удалять из книги последний лист
If newBook.Worksheets.Count > 1 Then
Application.DisplayAlerts = False
On Error GoTo NoSheet
ThisWorkbook.Worksheets("Таблица соответствия").Delete
On Error GoTo 0
Application.DisplayAlerts = True
End If
Workbooks(TS_Open).Activate
Workbooks(TS_Open).Worksheets("Таблица соответствия").Select
Workbooks(TS_Open).Worksheets("Таблица соответствия").Copy Before:=Workbooks("osv.xls").Sheets(5)
Workbooks(TS_Open).Activate
ActiveWorkbook.Close SaveChanges:=False
newBook.Save
'newBook.Close SaveChanges:=False
MsgBox ("Внимание ! Таблица соответствия сохранена в файле OSV.XLS !")
End If
End If
NoSheet:
MsgBox "нет такого листа"
Exit Sub
End Sub
Jojo®
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
Вообще-то, вместо свистопляски с прыганьем между листами и книгами я бы написал так:
Т.е не вызывая метод Activate, а точно указывая местоположение объекта. И на экране при этом ничего не будет мигать!
Предварительно проверить наличие удаляемых и копируемых листов удобно с помощью функции:
Вызывается как if SheetPresent("Книга1","Лист2") then .....
Код: Выделить всё
Workbooks("Книга2").Sheets("Лист3").Delete
Workbooks("Книга1").Sheets("Лист3").Copy Before:=Workbooks("Книга2").Sheets(1)
Предварительно проверить наличие удаляемых и копируемых листов удобно с помощью функции:
Код: Выделить всё
Function SheetPresent(ByVal ABook As String, ByVal ASheet As String) As Boolean
On Error Resume Next
Set Sh = Workbooks(ABook).Worksheets(ASheet)
SheetPresent = Not IsEmpty(Sh)
End Function