Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
VBA Как восстановить автоматически открываемый файл, Ошибка в части содержимого в книге
 
Как автоматически восстановить файл при открытии? Файлы открываются через
Код
Workbooks.Open (FilePath), False
Однако порой файлы не открываются, т.к. ошибки пропускаю /On Error Resume Next/, открывая файл вручную вижу такое окно с текстом
Ошибка в части содежимого в книге ...xlsm. выполнить попытку восстановления? Если вы доверяете источнику, из которого получена книга, нажмите кнопку "Да".
Есть предположение, что у кого-то в офисе криво установлен Excel, в связи с чем и просит файл восстановить. Нажимая "Да" файл восстанавливается. Сохранение спасает. Файлы не вкладываю, т.к. проблема не в каком-то одном конкретном файле; портятся также и файлы, которые открывались прежде без проблем.

Кто-нибудь сталкивался с таким, и каким было решение. Буду рад любом дельному совету!
Новый раздел форума
 
Предлагаю сделать раздел форума "Сделайте за меня работу БЕСПЛАТНО" или "Я не хочу учить Excel - решите за меня" .... и всех у кого первое сообщение "Помогите" отправлять туда. Сейчас форум превращается в такое средство экстренной бесплатной помощи.

Давно, когда начинал только изучать VBA, форум помогал проконсультироваться, а не решить все мои проблемы. Иногда и сейчас обращаюсь за консультацией, т.к. до гуру мне далеко. Однако пытаюсь развиваться - разбираться и находить решения. Современные же офисные работники всё чаще напоминают амёб пренебрегают саморазвитием. Проблема - Вася решит. Форум сейчас - как панацея от всех болезней. И всё больше первых постов "пожалуйста помогите" или ещё круче "нужно решить".  Кому нужно? (с) Поэтому, имхо, надо сделать новый раздел для таких постов.
Как переопределить системный цвет COLOR_BTNFACE, VBA cистемный цвет COLOR_BTNFACE
 
На разных компьютерах разные RGB результаты цвета COLOR_BTNFACE. Потому юзерформа отображается по-разному.
на одном RGB этого цвета 240 240 240, на другом 236 233 216 ...
как сделать так, чтобы COLOR_BTNFACE был на каждом компьютере 240 240 240?
VBA ругается на MID, MID error
 
VBA Ругается на функцию MID()



причём на одном конкретном компе. в чём может быть дело?
спасибо за советы!
Как избежать режима ReadOnlyRecommended при открытии книги
 
Есть файл, который нормально работает локально. Однако после перемещения в сетевую папку всегда предлагает открывать в режиме ReadOnlyRecommended. Какие есть варианты устранения данной ситуации?
Спасибо за советы!
VBA как изменить RGB стандартных цветов, VBA color const
 
В юзерформе использую .BackColor = vbВuttonFace

можно как-то узнать rgb этого цвета и (или) переназначить. чтобы все юзерформы книги, использующие данный цвет поменялись?
VBA редактирование защищённых ячеек в многопользовательском режиме без sheets(...).unprotect, VBA безопасность при многопользовательском режиме
 
1) Возможно ли внести данные в защищённые ячейки без снятия пароля с листа? или защитить как-то ячейки без пароля на лист?

2) Если-таки совсем (как я и подозреваю) никак, нужен совет.
Есть файл .xlsm с которым пользователи работают через юзерформу. все данные вносяться только через юзерформу. Администратор должен иметь возможность полного доступа к файлу. Так же нужен доступ к файлу в режиме чтения для пользователей. Многопользовательский режим очень желателен.

По этому способу вижу только одно решение - файл клон для чтения, к-й клонируется процедурой, снимается доступ. Есть ли возможность через Vba сделать книгу обычной (общей). скопировать или дать поработать админу, выгнав всех юзеров.

Очень нужны Ваши советы!
VBA Как развернуть из Excel открытый .doc
 
Открываю документ
Код
     Set wdApp2 = CreateObject("Word.Application" ) 
'...
     Set wdDoc2 = wdApp2.Documents.Open(worldFile, ReadOnly:=True)
     wdApp2.Visible = True
     wdDoc2.Activate
он открывается свёрнутым
как показать открытый этот .doc на передний план?

спс за советы!
Не устанавливаются DTPicker параметры MinDate, MaxDate, Value, DTPicker
 
Не устанавливаются параметры в  DTPicker MinDate, MaxDate, Value. В каком формате необходимо присваивать значения?
не устанавливаются параметры как только я не пытался((

MyUserForm.DTPicker.MinDate = Date - 360
MyUserForm.DTPicker.MaxDate = Date +360
MyUserForm.DTPicker.Value = Date

спасибо за ответы!

зы Microsoft Date and Time Picker Control 6.0 (SP4)
Не выполняется Workbook_open() при открытом коде другой книги
 
Перед закрытием книги скрываю листы от пользователя, чтобы тот не смог отобразить их, если макросы не включены. Иногда при открытии книги не отрабатывает код, к-й раскрывает листы. Заметил, что такое случается если открыта другая книга и курсор стоит на проекте (проект не запущен). Почему такое происходит?  
 
Заранее всем откликнувшимся, спасибо!  
 
есть код в ЭтаКнига:  
 
Private Sub Workbook_Open()  
With Application  
    .DisplayAlerts = 0  
    .EnableEvents = 0  
    .ScreenUpdating = 0  
    .Calculation = xlCalculationManual  
    .EnableCancelKey = 0  
End With  
   
WBprotect (True) 'ставит пароль на структуру книги  
WBprotect (False) 'cнимает пароль со структуры книги  
   
 Call zapusk(True)  
 
WBprotect (True) 'ставим защиту структуры книги  
 With Application  
     .DisplayAlerts = True  
     .EnableEvents = True  
     .ScreenUpdating = True  
     .Calculation = xlCalculationAutomatic  
     .EnableCancelKey = True  
 End With  
End Sub  
 
'----------- процедура ставит или снимает пароль со структуры, чтобы можно было манипулировать листами  
Sub WBprotect(a As Boolean)  
Const pass = "MyPass"  
If a = True Then  
ThisWorkbook.Protect pass, True, False  
End If  
If a = False Then  
ThisWorkbook.Unprotect pass  
End If  
End Sub  
 
 
'------------процедура раскрывает или скрывает листы  
Sub zapusk(a As Boolean)  
 
Dim sh As Worksheet  
Call WBprotect(True) 'ставлю пароль на структуры (на всяк случай)  
Call WBprotect(False) 'снимаю пароль со структуры  
       
    For Each sh In ThisWorkbook.Worksheets  
      If sh.Name <> "source" Then 'проверяю, чтоб опр. лист был всегда невидим...  
         If a = True Then  
             sh.Visible = True  
         Else  
            ThisWorkbook.Sheets("ВключиМакросы").Visible = True  
            sh.Visible = xlSheetVeryHidden 'скрываю все листы кроме того что сообщает что нужно вкл. макросы  
            ThisWorkbook.Sheets("ВключиМакросы).Visible = True  
         End If  
      End If  
    Next  
       
       If a = True Then  
          ThisWorkbook.Sheets("ВключиМакросы").Visible = xlSheetVeryHidden  
          ThisWorkbook.Sheets("source").Visible = xlSheetHidden  
       Else  
          ThisWorkbook.Sheets("source").Visible = xlSheetVeryHidden  
       End If  
           
Call WBprotect(True) 'ставлю пароль на структуры  
 
End Sub  
 
 
'---------Этот код скрывает листы перед закрытием книги  
Private Sub Workbook_BeforeClose(Cancel As Boolean)  
 
With Application  
    .DisplayAlerts = 0  
    .EnableEvents = 0  
    .ScreenUpdating = 0  
    .Calculation = xlCalculationManual  
    .EnableCancelKey = 0  
End With  
   
ThisWorkbook.Saved = True  
 
Call zapusk(0)  
Call WBprotect(False) 'снимаем защиту структуры книги  
ThisWorkbook.Save  
 
Call zapusk(1) 'вдруг листы были как-то скрыты. раскрываю листы.  
   
With Application  
     .DisplayAlerts = True  
     .EnableEvents = True  
     .ScreenUpdating = True  
     .Calculation = xlCalculationAutomatic  
     .EnableCancelKey = True  
End With  
Call zapusk(0)  
Call WBprotect(False) 'снимаем защиту структуры книги  
End Sub
Ошибка adob.recordset в простом запросе
 
При работе с adob.recordset ругается на простом запросе  
\"Отсутствует значение для одного или нескольких требуемых параметров.\"  
 
Не могу понять где ошибка, запрос вроде правильный, сначала была ошибка \"...не определён ядром...\" после сохранения в 2003 формате появилась новая.    
 
Заранее благодарен за ответы!  
 
зы файл во вложении.
неотображение ни одного листа при открытии
 
в целях защиты документа скрываю все листы перед закрытием книги  
 
private sub workbook_beforeClose()  
'............  
'для каждого листа устанавливаю  
for each sh in thisworkbook.worksheets    
if sh.name <>"Лист1" sh.visible = xlSheetVeryHidden  
next  
 
'скрываю все листы кроме одного листа к-й будет отображаться при открытии книги  
'в к-м инструкция, мол, включи макросы или зри только этот Лист1  
 
 
если макросы включены - то    
в private sub Workbook_Open() Отображаю необходимые листы а Лист1 скрываю,  
однако пока макрос выполняет скрытие-открытие. лист1, на долю секунды, всё ж мелькает.    
 
Вопрос: как неотображать лист1 при открытии книги (в случае включённых макросов)  
screenupdating = false не спасает(  
ещё впихивал при открытии книги форму, однако она тоже появляется после "мелькания листа"  
 
зы заранее спасибо за ответы!
как отключить остановку мароса
 
есть книга, в к-й на листе дан доступ к определённому диапазону.  
Весь лист защищён.  
 
Чтобы выполнить макрос, к-й работает с листом снимаю защиту с листа  
 
таким кодом    
 
Sub zashita(wsSh As Object, a As Boolean)  
 Const MyPassword = "11111"  
 If a = 1 Then  
     With wsSh  
         .Unprotect Password:=MyPassword  
         .EnableOutlining = True  
         .Protect Password:=MyPassword, Contents:=True, Scenarios:=True, UserInterfaceOnly:=True  
     End With  
 Else  
     With wsSh  
        .Unprotect Password:=MyPassword  
        .EnableOutlining = True  
     End With  
 End If  
End Sub  
 
 
'.....  
sh as object  
set sh = thisworkbook.sheets("лист1")  
'.....  
call zashita(sh,0)  'в макросе передо обработкой листа снимаю защиту с листа  
 '.....выполняю какуют-то процедуру  
call zashita(sh,1)   'снова защиищаю  
 
однако нехитрое дело - кликнуть ESC или BREAK и всё процесс остановится, лист будет незащищён  
 
Application.OnKey "{ESC}", "" не спасает - видать это не распространяется на дебаг.  
как отключить мне дебаг?  
 
читал есть возможность отключить клаву полностью.  
rundll32 keyboard,disable  
но это уж крайняя мера. да надо-то просто дать макросу завершиться  
 
наверняка есть решение, но прорывшись в форуме не нашёл, мож плохо искал.  
 
зы заранее спасибо советы или готовые решения
Как отключить информационное сообщение при сохранении
 
При сохранении документа *.xls, в к-м защищена структура, листы и пароль на VB проект, выскакивает информационное сообщение  
 
"Данный документ зашифрован и защищён паролем. Форматы Office Open XML, доступные в выпуске 2007... Преобразовать документ.... чтобы улучшить его защиту?"  
 
application.displayalerts = false    
 
не спасло
проверка условия "запущен ли макрос"
 
допустим запускается Макрос1, к-й изменяет значения листа  
 
sub Макрос1()  
...  
cells(1,1)=100500  
...  
end sub  
 
нужно какое-то такое условие:  
 
в коде книги  
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)  
if ЗапущенКакойТоДругойМакрос exit sub  
'....  
end sub  
 
В идеале чтоб Private Sub Workbook_SheetChange() вообще не реагировал на изменения значения ячеек при запуске других макросов.  
 
заранее спс за ответы!
Error 6 Overflow при передаче диапазона в массив!
 
ecть код  
'----------  
    Dim RFP As Object  
    Dim basebookname As String  
    Dim rowmax As Long  
    Dim massiv As Variant  
 
      basebookname = ThisWorkbook.Name  
      Set RFP = Workbooks(basebookname).Sheets("RFP")  
 
   rowmax = RFP.Cells(RFP.Rows.Count, 5).End(xlUp).Row  
 
  'и тут ошибка!  
   massiv= Range(RFP.Cells(7, 5), RFP.Cells(rowmax, 27)) 'rowmax = 1300  
 
код чудесно работал, пока в один прекрасный момент после манимуляций пользователя с файлом (к проэкту у него нет доступа) появилась ошибка в месте, где я в    
переменную massiv загоняю диапазон. до этого код чудно работал с этими-же данными. в чём же проблема?  
 
выяснил:  
 
err.number = 6  
err.description = "overflow"  
err.source = VbaProject  
 
ps office 2007 и 2010 выдают такую ошибку.
Не выполняется событие Application. перед закрытием книги
 
есть процедура:  
(в модуле)  
Sub enableallclear()  
'...  
Application.CellDragAndDrop = False  
Application.EnableAutoComplete = False  
End Sub  
 
Которая выполняется при селекте листа "2"  
(в коде листа 2)  
Private Sub Worksheet_SelectionChange(ByVal Target As Range)  
 Call ClearClipboard  
End Sub  
 
Public Function ClearClipboard()  
Application.CutCopyMode = False  
OpenClipboard (0&)  
EmptyClipboard  
CloseClipboard  
enableallclear    
 
End Function  
 
после закрытия книги, пытаюсь включить Autofill и перетаскивание  
 
Private Sub Workbook_BeforeClose(Cancel As Boolean)  
Application.EnableEvents = True  
Application.EnableAutoComplete = True  
Application.EnableEvents = True  
MsgBox "Включаем Autofill и перетаскивание!"  
End Sub  
 
но. при открытии новой книги, понимаю что не работает-таки Autofill и перетаскивание  
 
Application.EnableAutoComplete = True  
Application.EnableEvents = True
Червячёк в Excell. концепция.
 
Есть идея. сделать червячка в экселе, но боюсь это будет непросто. концепция в файле.  
реально сделать такого? без помощи, советов энтузиастов не осилю.  
 
может кто-то делал уже нечто подобное?
VBA.Как проигнорировать сист.сообщение "Не удаётся обновить одну или несколько ячеек..."
 
Цикл по файлам с помощью DIR  
но если в файле, к-й открываю есть связи выдаёт сообщение. "не удаётся обновить одну или несколько ячеек...", поэтому приходится клацать "продолжить". нужен совет как проигнорировать это сообщение при открытии, либо чего дописать в коде, чтобы "продолжить" нажималось при открытии автоматически  
'-------вот такой код (точнее кусок кода)------  
   MyPath = "C:\Новая папка\"    
   iFileName = Dir(MyPath & "*.xls*")    
   Do While iFileName <> ""  
      If iFileName <> ThisWorkbook.Name Then 'проверяем вдруг эта книга лежит в каталоге "C:\Новая папка\"  
         
       If bBookOpen(CStr(iFileName)) = False Then 'проверяем не открыта ли книга-форма, если не открыта, то открываем  
       Workbooks.Open (MyPath + iFileName)  
       Else  
       Workbooks(iFileName).Close  
       Workbooks.Open (MyPath + iFileName)  
       End If  
 
       
      Workbooks(iFileName).Close SaveChanges:=True  
      End If  
  iFileName = Dir  
Loop
глюк со списками Combobox
 
создал список  Combobox  
указал LinkedFillRange из другого листа той же книги.  
Выдаёт ошибку "Недостаточно ресурсов..." изменил шрифт списка с Calibri 11 на Calibri 10 - глюк пропал. с чем может быть связан такой глюк?  
 
зы список самый обычный из статический значений (без формул)
как поделить один одномерный массив на другой без цикла по элементам?
 
как поделить один одномерный массив на другой, если их размерность одинакова  
dim x(3), dim y(3), dim xy(3)  
'x = 1,2,3  
'y = 2,0,3  
 
xy = x/y  
 
'и должно получится  
'xy = 0.5,0,1  
 
пробывал запихнуть в Range и делить как Range, но опять же нули, на листе    
получается формулой  
=ЕСЛИ(ЕОШИБКА(AC6:AF6/AC7:AF7);0;AC6:AF6/AC7:AF7)    
ну а как реализовать такое на вба? (если с массивами не выйдет)  
 
в результате хотелось бы чтобы работало xy = x/y*z  
но я думаю умножение и деление массивов не сильно отличается
наиболее быстрый способ сконкантенировать два диапазона
 
Собственно в теме весь вопрос. два столбца со данными типа String    
Зы нужно сделать это посредством вба    
  такой метод долговат...  
------------------------------------------------------  
____Dim PnL As Object, k as long,    
____Set PnL = Workbooks(ThisWorkbook.Name).Sheets("P&L")  
____For k = 7 To 5000  
_______PnL.Cells(k, 3).Value = PnL.Cells(k, 4).Value & "|" & PnL.Cells(k, 5).Value  
____Next k  
------------------------------------------------------  
пробывал нечто такое...  
____Dim rng3 As String, rng4 As String, rng5 As String  
     
____rng3 = "B7:B" & rowmax  
____rng4 = "D7:D" & rowmax  
____rng5 = "E7:E" & rowmax  
_______PnL.Range(rng3) = PnL.Range(rng4) & "|" & PnL.Range(rng5)  
 
лелея надежду, что будет работать, но увы(
Как создать многомерный массив из таблички и отсортировать в нём данные
 
Есть табличка с данными (см. пример)  
 
Нужно создать многомерный массив Mass(Магазин, Расходы, Признак статьи, месяц)  
на основе этой таблички, только так чтобы в переменные массива попали только уникальные значения.  
Чтобы потом без труда вылить данные из массива в другую табличку  
 
С многомерными массивами, увы, не дружу.  
 
Для одномерного массива делал как-то так  
rowmax = Cells(Rows.Count, 4).End(xlUp).Row 'в четвёртом столбце искал макс строку  
n = rowmax - 4 'отнимал 4 строки, определив количество элементов  
 Dim mass() As Variant  
 ' ReDim mass2(n, n)  
     k = 1  
     j = 4 'данные в столбце Д  
     'загонял костцентры в массив  
     For i = 5 To rowmax 'с 5 строки    
             mass(k) =Cells(i, j).Value 'центр затрат  
             k = k + 1  
     Next i  
x = k - 1 'последнюю k убираем  
    'проверка массива на уникальность  
     For u = 1 To x 'от начала массива до конца  
        For uu = 1 To u - 1 'от начала массива до предыдущего элемента массива  
        If mass(u) = mass(uu) Then  
           mass(u) = "" 'обнулял повторяющиеся значения  
        End If  
        Next uu  
     Next u  
 
 
Наверняка есть проще способ. прошу провести мне ликбез.
описание в созданную формулу
 
Можно ли добавить описание в созданную на VBA формулу?    
 
Искал, но не нашёл. может кто решал такую задачу.
Как посредством VBA защитить лист, но дать доступ вводить значения из списка
 
Задача такова:  
есть лист, на котором нужно разрешить лишь вводить данные в заданный диапазон из предложенного списка.  
  Проверка данных не совсем подходит, т.к. при копировании с листа можно заполнить ячейку  чем угодно.  
Остальные ячейки вне диапазона редактировать запретить.  
В общем как я вижу, нужно полностью защитить лист от редактирования "Защитить лист", однако разрешить выбирать из списка данные, что не представляется возможным при полной защите листа.  
диапазон должен быть динамическим. потому без помощи вба не представляю как это реализовать.
Как уникально ранговать столбец с повторяющимися числами
 
есть столбец с числами допустим 1,2,5,6,8,5,6,9,10,5...  
нужно его ранговать чтоб было  1,2,3,6,9,4,7,9,10,5  
короче по по порядку. у мя получилась ф-ла только работающае с задвоение, а когда три одинаковых уже не работает. нужно, чтоб ранговало всегда по порядку и не повоторялось.  
спасибо за ответ! и совет!
формула для суммирования результатов и перенесение на другой лист
 
Уважаемые форумчане!  
 
Помогите с формулой.    
В таблице имеются категории товаров которые заказывает дилер. Товар заказанный дилером подразделяется на: заказ, распределение и не доступно. Необходимо чтобы данные из листа1 копировались в лист2, покатегорийно и поклиентно, а так же посчитывалась сумма по заказу, рапределению и не доступности категории.    
Сама таблица в прикреплении.  
 
Заранее спасибо!
Страницы: 1
Наверх