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

Страницы: 1 2 3 След.
Связи в файле Excel: специфика работы кэша
 
Всем добрый день.

Есть два файла Excel (file_1.xlsx и file_2.xlsx).
В каждом из файлов есть одна связь на внешний файл. Исходя из указанной связи идет расчет в ячейке A1.
Внешний файл для обоих файлов один и тот же. Разница лишь во времени обновления данных (старая и новая версия), т.е. исходник для file_1.xlsx и file_2.xlsx один и тоже, но т.к. делались они в разное время, то и цифра соответственно разная.

Если file_1.xlsx и file_2.xlsx отправить человеку, который не имеет доступа к исходному файлу, он с ними сможет работать без обновления связей.
Но что любопытно. Если человек одновременно откроет  file_1.xlsx и file_2.xlsx, то цифры в обоих файлах сравняются.

Почему такое происходит?

Содержимое \xl\externalLinks\externalLink1.xml в каждом файле свое. Если открывать файлы по одному, то тоже ок - цифры отличаются. Почему же, когда оба файла открыты данные совпадают, будто подключаются к одному кэшу?

Да, можно отключить пересчет формул и "слияния" значений не произойдет. Можно разорвать связь, тем самым преобразовав ее в значения, тогда разумеется значения также зафиксируются.

Но хочется понять принцип работы экселя. Почему он склеивает эти кэши, тогда как файлы совершена разные (хоть и открыты в рамках одного процесса).
Excel, VBA и SSH
 
Всем доброго дня.

Скажите, кто-нибудь использует в работе VBA + SSH? Если да, то как реализуете процесс работы?

Поискал по форуму и в интернете. Всё, что удалось найти так или иначе завязано на том, что в комплекте с файлом Excel надо всегда носить еще пачку файлов, необходимых для работы с SSH (будь то файлы от Putty Portable или иного какого клиента). Также некоторые приложения платные и стоит немало.

Из бесплатных и с минимальным движений со стороны пользователя, интересно, есть вообще что-нибудь?
Работа Excel в OneDrive
 
Подскажите, пожалуйста, может кто использует.

Есть файл excel, который загружен в onedrive.live.com
Режим просмотра: в браузере. Будут ли доступны макросы vba таким образом?

Сделал простенький файл excel с простейшим макросом вывода MsgBox. Но что-то не получается его запустить.
Первое впечатление, что данный функционал не поддерживается.
Доработка ComboBox1_MouseMove
 
Добрый день.
Подскажите. Есть такой код:
Код
Private Sub ComboBox1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    If ComboBox1.TopIndex < 0 Then
        Frame1.Caption = "откройте список"
        Exit Sub
    End If
    Frame1.Caption = Range("C1:C10").Cells(Int(Y / 9.65) + 1).Value
End Sub

Код рабочий, но если в выпадающем списке больше 8 вариантов, появляется скролл, и позиция элемента считается неверно. Т.е. если в приложенном ниже примере в выпадающем списке скролл прокрутить вниз и навести курсор например на "Вариант10", то в подсказке уже отобразится совсем не то, что ожидалось.

Как в этом случае можно рассчитать номер строки для вывода корректной подсказки?
Включение COM надстройки
 
Добрый день.
Подскажите, пожалуйста.

Есть VBS скрипт с таким содержимым:
Код
Dim xlApp, xlWb, xlWs
Set xlApp = CreateObject("Excel.Application")
Set xlWb = xlApp.Workbooks.Add: Set xlWs = xlWb.Worksheets(1)
xlApp.Visible = TRUE
Set xlWs = Nothing: Set xlWb = Nothing: Set xlApp = Nothing

Excel успешно открывается, книга создается.
Но никак не могу решить одну проблему.

У меня в excel есть подключенные XLAM и COM надстройки. При открытии excel скриптом выше, надстройки не подключаются. При этом в самом excel (Параметры Excel -> Надстройки) я эти надстройки вижу как активные/подключенные.

С XLAM-надстройкой проблему я решил просто. В скрипт выше добавил строку:
Код
Set xlWb = xlApp.Workbooks.Open("C:\Users\User\Documents\MoяНадстройка.xlam")

А вот с COM надстройкой засада. Ни как не могу заставить работать.
Пробовал манипуляции с:
Код
xlApp.EnableEvents = false/true
xlApp.IgnoreRemoteRequests = false/true
xlApp.AutomationSecurity = 1
xlApp.AddIns.Add("C:\Users\User\Documents\НадстройкаCOM.dll").Installed = True 
xlApp.AddIns("НадстройкаCOM.dll").Installed = True
xlApp.VBE.ActiveVBProject.References.AddFromFile "C:\Users\User\Documents\НадстройкаCOM.dll"

Может кто сталкивался с подобным?
Проблема при подключении надстройки
 
Доброго дня.

Делаю надстройку для Excel 2007. Файл xlsm сохраняю в файл xlam. В файле надстройки всего один макрос (для теста).
Надстройку подключаю стандартно: Параметры Excel -> Надстройки -> Надстройки Excel ->  Перейти -> Обзор -> Выбираю файл надстройки (xlam) -> OK

Но после нажатия кнопки 'OK' Excel как-то странно себя ведет. А именно: "замараживается" рабочая область активного листа, т.е. не могу кликать по ячейкам и тп (будто у меня открыта модальная форма). Если нажать на крестик (закрытие книги Excel), то книга "отмирает" (словно закрывается какая-то ее копия, к-ая мешала нормальной работе).
Раньше такого не встречал.

Еще что любопытно. Данная проблема наблюдается только если надстройка подключается через "Обзор -> Выбираю файл надстройки (xlam) -> OK". Если эта же надстройка ранее была подключена (но не активирована) и я просто ставлю галочку напротив данной надстройки и нажимаю 'OK', то вышеуказанной проблемы не наблюдается.

Кто-нибудь сталкивался с подобным?
Отображение длинного текста в ComboBox
 
Добрый день.
Подскажите, пожалуйста.
Например, я открываю форму, раскрываю выпадающий список. Но часть значений выпадающего списка у меня относительно длинные и их текст по ширине не помещается в сплывающее окошко ComboBox. В результате, окончание текста у ряда длинных значений не видимо.
Можно установить ширину ComboBox "с запасом". Но это не всегда удобно.

Есть ли возможность настроить ComboBox так, чтобы полный текст значения появлялся при наведении указателя мыши на соответствующее значение в выпадающем списке? Что-то вроде всплывающей подсказки.
Оптимизация формулы расчета суммы
 
Здравствуйте. Подскажите, пожалуйста.
Есть расчет суммы, которая считается как сумма разности между значениями двух массивов.
Сейчас расчет делаю с использованием дополнительного столбца.
Можно ли как-то изменить формулу, чтобы расчитать нужную сумму (ячейка J4) без использования вспомогательного столбца?
В приложенном файле пример исходных данных и пример текущего расчета суммы.
Отследить изменение содержимого ячейки
 
Доброе утро!

Подскажите, пожалуйста, как отследить изменение содержимого связанной ячейки при клике чекбокса на листе.
Пример в вложении.  
Сохранение гиперссылок при преобразовании Excel в PDF
 
Здравствуйте.
Подскажите, пожалуйста.
При сохранении Excel в PDF (сохранить как => pdf) сохраняются только гиперссылки на веб-сайты и эл. почту.
Можно ли как-то при сохранении файла Excel в pdf сохранять гиперссылки на "место в документе" (аналог вордовских закладок, к-ые без проблем переносятся в pdf)?
Перебор выделенных диаграмм на листе
 
Здравствуйте.
Подскажите, пожалуйста. Код ниже перебирает все диаграммы ни листе.

Код
Sub SelectChart2()
    Dim oObj As Object
    For Each oObj In Sheets("Лист1").Shapes
        If oObj.Type = 3 Then
            Debug.Print oObj.Name
        End If
    Next oObj
End Sub 

Как перебрать только выделенные диаграммы?
Присвоение значения переменной объекта Range
 
Здравствуйте!

Подскажите, пожалуйста, как переменной iRng.Value присвоить значение "test", минуя привязку к конкретной ячейке листа Sheets("лист").Range("A1") ?

Dim iRng As Range
Set iRng = Sheets("лист").Range("A1")
iRng.Value = "test"
Пользовательская подпись данных в диаграмме
 
Добрый день!

Пытаюсь построить диаграмму, используя в качестве подписи данных процентную долю продаж.
Кручу верчу, но ни как не получается добиться желаемого.

Помогите пожалуйста.
Подробное описание проблемы + пример в вложении.


PS: Сейчас процентные подписи данных я указываю вручную, что очень неудобно.
Может можно как-то через дополнительную процентную шкалу справа реализовать или через доп. вычисляемое поле в сводной? У меня, к сожалению, не получилось.
ВПР из закрытого файла
 
Доброе утро!

Зашел в тупик с поиском решения такой задачи.
Пытаюсь средствами VBA подтягивать данные посредством функции ВПР. Все вроде просто, но из-за того, что данные для поиска находятся в другой книге, ни как не получается.

Пример строки:
Range("A1").Formula = "=VLOOKUP(КодСотрудника,'D:\Продажи\СПБ\сводная.xlsx'!ОбъемПродаж,3,0)"

Указанный выше пример работает, но как результат функции передать в переменную, а не в Range("A1").Formula?
Если записать данную формулу в виде:

MyResult = WorksheetFunction.VLookup(КодСотрудника, "'D:\Продажи\СПБ\сводная.xlsx'!ОбъемПродаж", 3, 0)

то функция уже перестает работать.
Изменено: Andrew - 17.04.2013 11:13:25
Обработка большого объема данных в Excel
 
Доброй ночи!  
 
Пытаюсь настроить макрос для разбивки данных листа на файлы.  
Столбцов на листе 10, а вот строк ~ 100 000.  
 
Принцип разбивки на файлы: берется столбец, из уникальных значений к-ого формируется заголовок будущего файла и в этой формирующийся файл попадаются строки из исходного файла только с указанным значением в столбце.  
 
 
Пробовал разные вариант:  
1 вариант - пользуюсь давно, все ок, но при объеме > 50 000 строк макрос о-о-очень подвисает.  
2 вариант - пробовал загонять весь объем данных в массив и уже из массива получать нужные значения перебором. работает, но тоже медленно.  
3 вариант - пробовал через сводные. Работает быстрее предыдущих вариантов, но сам код получается очень сложным + всякие доп книги приходится создавать и тп.  
 
 
Подскажите, пож-та, как все-таки лучше в excele обрабатывать такой объем данных?  
Может есть другие алгоритмы для данной задачи, более производительные?  
 
 
Буду признателен за любые подсказки.  
 
==========================================  
 
 
Вариант 1:  
   Dim Wb As Workbook  
   Dim r As range, c As range, BasePath As String  
       Set r = range(TextBox2.Value & "2", range(TextBox2.Value & "1").End(xlDown))  
       BasePath = ActiveWorkbook.Path & "\Rezult\"  
       On Error Resume Next  
       With New Collection  
           For Each c In r  
               .Add 0, c  
               If Err Then  
                   Err.Clear  
               Else  
                   ActiveSheet.Copy  
                   range(r.Address).ColumnDifferences©.EntireRow.Delete  
                   Set Wb = ActiveWorkbook  
                   Wb.SaveAs BasePath & c & " - " & TextBox1.Value & ".xlsx", FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False  
                   Wb.Close False  
                   Err.Clear  
               End If  
           Next  
       End With  
         
==========================================  
 
 
Вариант 2 (кусок кода):  
 
Dim МассивДанных() As Variant  
Dim i As Long  
Dim j As Integer  
Dim x As Long  
МассивДанных = Sheets("Лист1").range("A1:Z150000").Value  
x = 0  
For i = 1 To 150000  
   If МассивДанных(i, 6) = "значение для поиска" Then  
       For j = 1 To 26  
           Sheets("Лист2").range(БукваСтолбца(j) & i - x).Value = МассивДанных(i, j)  
       Next j  
   Else  
       x = x + 1  
   End If  
Next i  
Erase МассивДанных  
 
==========================================  
 
 
Вариант 3:  
 
Dim tempWB As Workbook  
Dim tempДанные As Worksheet  
Dim tempСводная As Worksheet  
ActiveSheet.Copy: Set tempДанные = ActiveSheet  
tempДанные.Columns(27).Value = ActiveSheet.Columns(6).Value  
tempДанные.range("AA1").Value = "x-TEMP-x"  
Set tempWB = ActiveWorkbook: tempWB.Sheets.Add  
Set tempСводная = tempWB.ActiveSheet  
tempWB.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _  
   tempДанные.Name & "!R1C1:R5000C" & 26 + 1, Version:=xlPivotTableVersion12).CreatePivotTable _  
   TableDestination:=tempСводная.Name & "!R1C1", TableName:="СводнаяТаблица", DefaultVersion:=xlPivotTableVersion12  
With tempСводная.PivotTables("СводнаяТаблица").PivotFields("Продавец")  
   .Orientation = xlRowField  
   .Position = 1  
End With  
tempСводная.PivotTables("СводнаяТаблица").AddDataField tempСводная.PivotTables _  
   ("СводнаяТаблица").PivotFields("x-TEMP-x"), _  
   "Количество по полю x-TEMP-x", xlCount  
tempСводная.range("B2").ShowDetail = True
Вызов диалогового окна функции макросом
 
Доброго дня!  
 
Подскажите, пожалуйста.  
Например, у меня есть пользовательская функция. Можно ли как-то через макрос вызвать диалговое окно данной функции, не прибегая к создаю специальной UserForm ?  
 
Пример вызываемого окна в вложении.
Объявление переменной массива в UserForm
 
Здравствуйте!  
 
Помогите, пожалуйста, разобраться в вопросе.  
Например, у меня есть UserForm. При загрузки формы (Load) хочу загрузить массив данных и в последующем обращаться к этому массиву (элементах этого массива) из модулей этого же проекта VBA до тех пор, пока открыта моя форма.  
 
Вопрос. Как это реализовать?  
 
Ведь если я загружаю массив, то он доступен только в процедуре form_load, которая никак не связана с моими другими процедурами. Или в данном случае обращение к массиву возможно только посредством предварительного его создания/инициализации в той процедуре, из к-ой хочу к нему обратиться.
Создание двумерного массива из TXT
 
Пытаюсь загрузить данные из txt-файла в двумерный массив.  
Данные в txt-файле представлены в таком виде:  
 
Код товара;Название товара  
24123;яблоки  
353454;груши  
55463;апельсины  
 
Смог написать такой вот код:  
 
Dim str1() As String  
Dim x As Integer  
Dim y() As String  
 
str1 = Split(ЗагруженныеДанныеИзTXT, vbCrLf)  
 
For i = 0 To UBound(str1)  
y = Split(str1(i), ";")  
For x = 0 To UBound(y)  
If x = 0 Then MsgBox(y(x))  
If x = 1 Then MsgBox(y(x))  
Next  
Next  
 
 
В общем, запутался окончательно: что делать дальше, как переопределять размерность и тд. И самое главное, как загрузить данные из txt в двумерный массив, - так и не понял.  
Помогите пожалуйста разобраться.
Работа с множественным выбором значений в ListBox VBA
 
Доброго дня!  
 
Помогите, пожалуйста, с решением неольшого вопроса.  
 
Есть UserForm с ListBox1. ListBox1 содержит 10 значений (например, фамилии сотрудников). Разрешен выбор нескольких значений (MultiSelect).  
 
Если выбрано одно значение, поместить его в ячейку листа получилось: ActiveCell.Value = ListBox1.List(ListBox1.ListIndex)  
 
Но вот никак не получается поместить в одну ячейку результат выбора нескольких значений ListBox.  
 
 
Решение думаю очень простое, но ни как не могу найти ответа на такой вроде несложный вопрос.  
 
 
Буду очень признателен за помощь.
Модальный режим в UserForm
 
Всем доброго дня.  
Помогите, пожалуйста, разобраться с UserForm и ее модальностью.  
 
Например, у меня есть макрос, при запуске которого подгружается UserForm с текстом "Подождите, идет обработка данных":  
 
Sub Мой_Макрос()  
UserForm1.Show  
Range("A1").Value = 1  
Range("A2").Value = 2  
Range("A3").Value = 3  
Unload UserForm1  
MsgBox "Поздравляем! Ваши данные обработаны."  
End Sub  
 
 
Цель - пользователь при старте макроса видит сообщение о том, что данные обрабатываются и ничего не может сделать до тех пор, пока обработка данных не закончится.  
 
Можно ли как-то запустить мой макрос, подгрузить UserForm в модальном режиме и при этом чтобы шла обработка остальной части макроса (после инициализации UserForm)?
Ошибка при формировании письма в Lotus из Excel
 
Добрый день!  
Прошу помощи.  
 
При формировании письма в Lotus из Excel периодически выскакивает ошибка:  
Run-time error '-2147417851 (80010105)': Automation error  
VBA ругается на строку:  
Set uiDoc = uiWorkspace.EDITDOCUMENT(True, MailDoc)  
 
В чем может быть проблема?  
 
Код макроса прилагаю.  
==========================  
 
Sub Макрос_ОтправкаПисьма()  
 
Dim Maildb As Object 'The mail database  
Dim UserName As String 'The current users notes name  
Dim MailDbName As String 'The current users notes mail database name  
Dim MailDoc As Object 'The mail document itself  
Dim AttachME As Object 'The attachment richtextfile object  
Dim Session As Object 'The notes session  
Dim EmbedObj As Object 'The embedded object (Attachment)  
Dim Subject As String 'The subject string  
Dim Attachment As String 'The path to the attachemnt string  
Dim Recipient As String 'The Recipient string (or you could use the list)  
Dim Recip(10) As Variant 'The Recipient list  
Dim BodyText As String 'The body text  
Dim SaveIt As Boolean 'Save to sent mail  
Dim WasOpen As Integer 'Checking to see if the Mail DB was already  
Dim uiDoc As Object  
Dim uiWorkspace As Object  
Dim docProfile As Variant  
Dim strProfileEnableSignature As Variant  
Dim CopyTo As String  
Dim BlindCopyTo As String  
 
 
Application.ScreenUpdating = False  
Application.DisplayAlerts = False  
 
Subject = ТемаПисьма  
Recipient = Email_Кому  
CopyTo = Email_Копия  
BlindCopyTo = Email_СкрытаяКопия  
SaveIt = True  
 
Set Session = CreateObject("Notes.NotesSession")  
Set uiWorkspace = CreateObject("Notes.NotesUIWorkspace")  
 
UserName = Session.UserName  
MailDbName = Left$(UserName, 1) & Right$(UserName, (Len(UserName) - InStr(1, UserName, " "))) & ".nsf"  
Set Maildb = Session.GETDATABASE("", MailDbName)  
 
If Maildb.IsOpen = True Then  
WasOpen = 1 'Already open for mail  
Else  
WasOpen = 0  
Maildb.OPENMAIL 'This will prompt you for password  
End If  
 
Set MailDoc = Maildb.CREATEDOCUMENT  
MailDoc.Form = "Memo"  
MailDoc.sendto = Recipient 'Or use Racip(10) for multiple  
MailDoc.CopyTo = CopyTo  
MailDoc.BlindCopyTo = BlindCopyTo  
MailDoc.Subject = Subject  
 
MailDoc.Body = ТекстПисьма  
 
'MailDoc.SAVEMESSAGEONDRAFTS = SaveIt  
Set AttachME = MailDoc.CREATERICHTEXTITEM("Attachment")  
Set EmbedObj = AttachME.EMBEDOBJECT(1454, "", ВложениеПисьма)  
 
'MailDoc.PostedDate = Now() 'Gets the mail to appear in the sent items folder  
'Set uiDoc = uiWorkspace.EDITDOCUMENT(True, MailDoc)  
Set docProfile = Maildb.GETPROFILEDOCUMENT("CalendarProfile")  
strProfileEnableSignature = docProfile.GETITEMVALUE("EnableSignature")(0)  
If strProfileEnableSignature = "1" Then  
docProfile.EnableSignature = ""  
Call docProfile.Save(True, False)  
End If  
 
Set uiDoc = uiWorkspace.EDITDOCUMENT(True, MailDoc)  
 
If strProfileEnableSignature = "1" Then  
docProfile.EnableSignature = "1"  
Call docProfile.Save(True, False)  
End If  
 
'MailDoc.SEND 0, Recipient // if you want to send  
Set Maildb = Nothing  
Set MailDoc = Nothing  
Set AttachME = Nothing  
Set EmbedObj = Nothing  
Set uiDoc = Nothing  
If WasOpen = 1 Then  
Set Session = Nothing  
ElseIf WasOpen = 0 Then  
Set Session = Nothing  
End If  
 
Dim Msg, Style, Title  
'Msg = "E-mail has been sent to " & Recipient & Chr(13) & Chr(10) & Chr(13) & Chr(10) & "Press OK to continue."  
Style = vbOKOnly + vbInformation  
Title = "Open Issues List"  
'Response = MsgBox(Msg, Style, Title, Help, Ctxt)  
 
Application.DisplayAlerts = True  
Application.ScreenUpdating = True  
     
End Sub
Ошибка при выполнении макроса
 
Доброй ночи!  
Есть макрос, который делит один файл на несколько. В качестве названия нового файла берет уникальное значение из указанного столбца.  
 
В столбце "С" у меня идут 4-х значные коды продавцов (вроде 2456, 4564, 3253 и тп).  
Если в коде я указываю: Set r = Range("B2", Range("B1").End(xlDown))  
то ничего не происходит.  
Если же указываю: Set r = Range("A2", Range("A1").End(xlDown))  
то макрос нормально отрабатывает.  
 
В чем может быть проблема?
Сохранение только через макрос
 
Всем доброго дня!  
 
Подскажите, пожалуйста, как в книге отключить стандартные средства сохранения (кнопка сохранить, кнопка сохранить как, горячие клавиши сохранения) и при этом оставить сохранение через макрос?  
 
 
Например, сохранение файла у меня идет при его закрытии:  
 
Sub Workbook_BeforeClose(Cancel As Boolean)  
ActiveWorkbook.Save  
End Sub  
 
Как при этом заблокировать стандартные пользовательские средства сохранения?
Solver и линейная модель
 
Доброе утро!  
 
Прошу помочь с подбором оптимальных значений.  
 
Например, у меня есть 4-е товара, по которым известны:  
- фактический объем поставки (C5:G5),  
- фактическая доля поставки от общего кол-ва поставок (C6:G6),  
- плановое значение доли поставки от общего кол-ва поставок (C8:G8).  
 
 
Цель: найти оптимальное кол-во каждого товара (C11:F11), к-ое необходимо грузить (поставить), чтобы выйти на плановый уровень по долям (C8:G8) с учетом фактических значений поставок.  
 
 
Если бы задача стояла подобрать оптимальное кол-во поставок каждого товара в отдельности, то я бы мог воспользоваться инструментом "Подбор параметра".  
 
Но в моем случае необходимо подобрать оптимальное значение каждого товара, которое необходимо грузить, с учетом веса их плановых долей от общего числа поставок. Т.е.:  
- оптимальная доля поставок,% (C12:F12) >= плановой доли поставок, % (C8:F8)  
- оптимальное кол-во поставок, шт. (C11:F11) >= фактический объем поставки (C5:G5)  
- оптимальное кол-во поставок, шт. (C11:F11) = целое  
- оптимальное кол-во поставок, шт. = неотрицательное значение  
 
Методом проб и ошибок, в некоторых случаях у меня получилось высчитать необходимое оптимальное кол-во поставок. Но такого результата удалось достичь нелинейным методом, к-ый конечный результат возвращает не всегда (в зависимости от факта поставок и плановых долей).  
 
Возможно ли реализовать подбор оптимального кол-ва поставок линейным методом?  
Или при указанных входных данных и минимальных ограничениях линейную модель не построить?  
 
 
Возможно, я не вижу чего-то главного здесь или упускаю какие-то взаимосвязи при построении линейной модели. В любом случае, буду признателен за любую помощь.
Сокращение записи IF в VBA
 
Здравствуйте!  
Подскажите, пожалуйста.  
Например, у меня есть такой код:  
 
...  
iUserName = Environ("UserName")  
If iUserName = "user_1" Or iUserName = "user_2" Or iUserName = "user_3" Then  
MsgBox "вариант 1"  
Else  
MsgBox "вариант 1"  
End If  
...  
 
Как можно кратко записать строку с перечислением всех пользователей (user_N)?  
Т.е. чтобы вместо  
If iUserName = "user_1" Or iUserName = "user_2" Or iUserName = "user_3" Then  
было что-то вроде  
If iUserName = ("user_1" Or "user_2" Or "user_3") Then  
 
?
Закрепление фильтра по определенному столбцу данных
 
Здравствуйте!  
 
Подскажите, пожалуйста.  
У меня есть книга (см. вложение), которая выложена на общем диске и с которой будут работать разные пользователи. Хочется сделать так, чтобы при открытии книги каждый пользователь видел информацию только по себе, т.е. чтобы был зафиксирован фильтр по логину данного пользователя (при этом чтобы фильтры по другим столбцам работали).  
 
 
На текущий момент я использую решение:  
открывается исходная книга => по логину пользователя через фильтр выбираются данные пользователя => выбранные данные сохраняются в новой промежуточной книгe => при закрытии созданной новой книги данные пользователя заносятся обратно в исходных файл вместо старых данных => созданная промежуточная книга удаляется  
 
Мой вариант вполне работоспособен, но хочется узнать другие способы реализации(без всякий промежуточных файлов).  
 
Установить нужный фильтр при открытии книги/листа не проблема:  
 
iUserName = Environ("UserName")  
Workbooks("моя_книга").Sheets(1).Range("A1").AutoFilter Field:=4, Criteria1:=iUserName  
 
Но вот как закрепить фильтр по столбцу "Логин" при этом, чтобы фильтр по другим столбцам продолжал работал. Возможно ли вообще такое?
VBA. Ошибка "automation error"
 
Всем добрый день!  
 
Подскажите, пожалуйста, с чем может быть связана ошибка:  
 
run-time error '-2147221080 (800401a8)':  
automation error  
 
--------------------------------  
 
Dim iUserName As String  
Dim iFullName As String  
Dim EX As Application  
Dim wb As Workbook  
 
iUserName = Environ("UserName")  
iFullName = "C:\Documents and Settings\" & iUserName & "\книга_2.xlsm"  
 
... код ....  
 
Set EX = New Application  
EX.Visible = False  
Set wb = EX.Workbooks.Open(iFullName)  
 
wb.Sheets(1).Visible = -1 /ошибка возникает на данной строке. Sheets(1) в книге "книга_2.xlsm" изначально скрыт, поэтому я патаюсь его отобразить.  
 
... код ....  
 
--------------------------------  
 
Понимаю, что для нормального ответа желателен весь код макроса, поэтому буду признателен хотя бы за пинок в нужное направление (исходя из специфики ошибки).
Как правильно написать вложенный цикл FOR?
 
Добрый день!  
 
Пытаюсь допилить вложенные циклы, но что-то запутался.  
У меня есть два цикла:  
1) перебирает названия листов в активной книге  
2) перебирает значения на листе "const" в столбце "C".  
 
Если запускать циклы раздельно, то все работает. А вот совместить их (сделать вложенными) никак не выходит. Предполагаю, что дело в переменных и в присвоенных им типе данных, но может быть и еще что-то для меня не ясное.    
 
Помогите, пожалуйста, дописать вложенный цикл.  
 
 
Dim lngRow As Range  
Dim Zagolovok As String  
Dim LastColumns As Integer  
Dim LastRows As Integer  
Dim x As Worksheet  
Dim v As Variant  
 
LastRows = 3844  
 
'запускаем цикл перебора названий листов  
For Each v In Workbooks.Item("исходник моз.xlsm").Sheets  
Set x = v.Name  
     
   'запускаем цикл перебора слов для поиска  
   For i = 2 To 12 Step 1  
   Zagolovok = Sheets("const").Range("C" & i).Value  
     
   Set x = Sheets("тест")  
   Set lngRow = x.Range("A1:BZ1").Find(What:=Zagolovok, LookIn:=xlValues, LookAt:=xlWhole)  
     
   Range(x.Cells(1, lngRow.Column), x.Cells(LastRows, lngRow.Column)).Copy  
   LastColumns = Sheets("данные").UsedRange.Columns.Count  
   Sheets("данные").Cells(1, LastColumns + 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False  
   Application.CutCopyMode = False  
   Next i  
 
Next v
Работа с книгой в фоновом режиме
 
Здравствуйте!  
 
Помогите, пожалуйста, с возникшим вопросом.  
 
Есть книга excel, с которой работают пользователи.  
При каждом открытии книги макросом определяется имя текущего пользователя и в другую книгу (stat.xlsx) в фоновом режиме заносится информация о времени открытия файла конкретным пользователем (имена пользователей заранее известны и прописаны в столбце A книги stat.xlsx)  
 
Макрос:  
 
Dim iUserName As String  
Dim lngRow As Long  
Dim ФайлОтчета As Workbook  
 
iUserName = Environ("UserName")  
 
Application.ScreenUpdating = False  
Application.DisplayAlerts = False  
Application.EnableEvents = False  
 
Set ФайлОтчета = Workbooks.Open(("C:\Documents and Settings\Admin\Рабочий стол\stat.xlsx"))  
ФайлОтчета.Windows(1).Visible = False  
lngRow = WorksheetFunction.Match(iUserName, ФайлОтчета.Worksheets(1).Range("A1:A100"), 0)  
ФайлОтчета.Worksheets(1).Range("B" & lngRow) = Now  
ФайлОтчета.Close savechanges:=True  
Application.Visible = True  
 
Application.EnableEvents = True  
Application.DisplayAlerts = True  
Application.ScreenUpdating = True  
 
================================  
 
Макрос работает, информация сохраняется. Но при работе макроса столкнулся с такой проблемой. Если запустить макрос и попытаться потом просто открыть книгу stat.xlsx, то книга все равно открывается в фоновом режиме и [Application.Visible = True] не помогает.
 
В чем причина, не подскажите?
Управление событием OptionButton1_Click
 
Добрый день!  
 
 
Помогите, пожалуйста, разобраться.  
 
Вставил на лист объект активекс (фрейм с двумя OptionButton)  
Когда дошел до настроек кода с целью "отловить" те или клики по внедренным OptionButton, то тупик.  
Как в этом случае в VBA отлавливаются OptionButton.Value ?
Страницы: 1 2 3 След.
Наверх