А Вы когда вписываете в редакторе ActiveWindow и ставите точку - у Вас список выпадает? Если да - то использовать можно только то, что в этом списке есть. Иначе ошибка будет, т.к. ни одна программа не умеет обращаться к свойствам и методам, которые еще не реализованы Если список не выпадает - идете в редакторе VBA в Tools -Options -вкладка General и ставите галочку напротив Auto List Members. После этого появление списка при проставлении точки будет работать.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Ну и по сабжу: неужели в интернете нет совсем никаких инструкций о том, как коды из одного файла в другой переносить? Это к слову о "не могу". Вы хоть пытались перенести? Там три движения мышью надо сделать и кнопку скопировать из одного файла в другой. Ну и форму поиска переименовать для начала, хотя бы в UserForm3, чтобы конфликта не было. В общем сложностей по факту нет и для этой задачи даже знать VBA не надо. Алгоритм: 0. Переходите в проект VBA(Alt+F11). Отображаете окно проектов(Ctrl+R). Находите там открытые файл 1 и 2 (VBAProject(1.xlsm) и VBAProject(2.xlsm) 1. в файле 1 (VBAProject(1.xlsm) находите папку Forms, раскрываете её и переименовываете там форму UserForm1 в ufFind(F4 -двойной щелчок левой кнопкой мыши на UserForm1 -для свойства (Name) вписываете ufFind) 2. После этого выделяете её(форму ufFind) левой кнопкой мыши и удерживая эту левую кнопку мыши переносите в проект файла 2 (он будет там же жирным выделен VBAProject(2.xlsm) 3. Копируете кнопку из файла 1 4. В модуле Module1 у Вас есть такой код:
Код
Sub Кнопка1_Щелчок()
UserForm1.Show
End Sub
дополняете его еще одной процедурой, чтобы получилось так:
Код
Sub Кнопка1_Щелчок()
UserForm1.Show
End Sub
'вызов формы поиска
Sub CallFind()
ufFind.Show
End Sub
5. Правая кнопка мыши на скопированной в файл 2 кнопке -Назначить макрос. Выбираете CallFind. 6. ВСЕ.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
А где там поиск хотя бы по одному листу? Там только внесение данных, ни про какой поиск даже намека нет. Или под словом помогите надо понимать "сделайте поиск с нуля"?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Выпадающий список из нескольких диапазонов, Выпадающий список из нескольких диапазонов. Объединение нескольких списков в один. Объединение диапазонов в один
skais675 написал: нужно объединить диапазоны типа двух таких
тут главный вопрос в том, можно ли это делать на отдельном листе. Т.е. объединить нужное на отдельном листе и уже из него брать неразрывный диапазон для списка. Если нет - то вариантов нет вообще.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
ну вообще в общем случае ошибка 400 это невозможность отобразить в модальном режиме форму, т.к. на данный момент уже запущена другая форма в модальном режиме. Можете привести текст ошибки? В моем коде тоже самое?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Выпадающий список из нескольких диапазонов, Выпадающий список из нескольких диапазонов. Объединение нескольких списков в один. Объединение диапазонов в один
Vladimir69 написал: Использовал сравнение даты изменения файла после открытия и после сохранения
это не дает гарантии того, что книга была изменена. Могли открыть, посмотреть, ничего не менять, сохранить и закрыть. В зависимости от версии Excel можно попробовать использовать событие AfterSave. В Excel вроде как начиная с 2010 появилось.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
какую? По сути, все можно сделать чуть проще и чуть правильнее:
Код
Sub S4itivanie() 'Макрос2 - копирование из книги
Dim ImaKnig1 As Workbook
Dim ImaKnig3 As String, ImaKnig2
Dim IsNeedClose As Boolean
Set ImaKnig1 = ThisWorkbook
ImaKnig2 = Application.GetOpenFilename _
("Excel files(*.xls*),*.xls*", 1, "Выбрать Excel файлы для передачи данных", , False)
If VarType(ImaKnig2) = vbBoolean Then
Exit Sub
End If
ImaKnig3 = Dir(ImaKnig2)
If ImaKnig3 <> "" Then 'проверяем, что эта книга есть по этому пути
Application.EnableEvents = False
If Not BookOpenClosed((ImaKnig3)) Then
IsNeedClose = True 'флаг, что книгу надо закрыть
Application.Workbooks.Open ImaKnig2
End If
Application.Workbooks(ImaKnig3).Worksheets("Спецификация").Range("A2:J23").Copy ImaKnig1.Sheets("Спецификация").Range("A2")
If IsNeedClose Then
Application.Workbooks(ImaKnig3).Close False
End If
Application.EnableEvents = True
End If
End Sub
'функция, предназначенная для проверки, открыта или закрыта рабочая книга.
Function BookOpenClosed(wbName As String) As Boolean
Dim myBook As Workbook
On Error Resume Next
Set myBook = Workbooks(wbName)
BookOpenClosed = Not myBook Is Nothing
End Function
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Можете в самом этом файле сделать процедуру, которая добавит свою кнопку на панель(в зависимости от типа файла и версии Excel это может быть и панель быстрого доступа, и собственная панель и вкладка Надстройки). Ознакомьтесь со статьей - если правильно применить, проблему можно решить: Как создать свою надстройку? Добавлю лишь то, что если панель или кнопка нужна только при запуске файла, то можно сделать все так же как в статье, но не сохранять файл как надстройку.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Jack Famous написал: переопределять что-то мне кажется более долгим, чем присваивать в готовое
тут как бы...Да, в данном конкретном случае, скорее всего так и есть. Ибо значений мало. Но если речь не про одну ячейку - то все же нет. А в данном конкретном случае таки да - твой вариант выигрывает по скорости. Но использовать я все равно буду свой
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Могу только предложить вариант перед загрузкой в Power Query преобразовывать видимое значение ячейки в такое же, но реальное: Видимое значение ячейки в реальное Хотя можно и через указанную функцию в PowerQuery, но тут есть нюанс: надо быть точно уверенным, что для всех ячеек один и тот же формат применен. Потому как по опыту знаю, что там может даже текст добавляться к числовым данным именно отдельных ячеек, что делает инструмент из PowerQuery бесполезным. Т.е. там по сути может применяться до 100 разных форматов - в зависимости от реального значения артикула...
ArtGo написал: применение форматов реализовано на стороне Power Query.
Вы бы для начала прочитали про Power Query, что ли...Она вообще к форматам на листах самое последнее отношение имеет. Ну и без файла примера проблема совсем непонятна. Неясно, что именно написано в Worksheet_Change. Неясно где именно это применяется - в обоих случаях в умных таблицах или в разных. А название темы вообще далеко от проблемы и ничего общего с написанным в первом сообщении текстом не имеет. В названии темы речь про загрузку, а в описании про это ну вообще ни слова. Какая-то связь вообще есть или нет?
Jack Famous написал: у тебя будет (для этого примера) — для каждой области
не, ну если таким путем идти, то конечно. Только ты забываешь и еще одну вещь: переопределение через ReDim не одно и тоже, что инициализация И происходит быстрее, т.к. сам массив по сути уже есть. Если бы мне было не лень - может сделал бы сравнительный анализ. Но что-то подсказывает, что выигрыша в скорости в твоем варианте ожидать особо не стоит. Потому что переопределение массива явно быстрее, чем пихание сначала в заранее определенный массив одной ячейки, а потом пихание его в другой массив, который на лету должен будет все равно переопределиться(внутренними ресурсами). Т.е. по сути тот же ReDim все равно будет вызван...Могу ошибаться, конечно, но что-то такое в памяти всплывает из области назначения значений массиву на лету.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
фиговый пример. Вы выделили число БЕЗ ведущего нуля. Следовательно этой ячейке без разницы что там с числовым форматом в PQ. я это к чему: если это некая выгрузка, то там для каждой ячейки может быть свой формат, не похожий на формат других ячеек.
файл не смотрел, но колонтитулы вообще отдельная тема и их так же отдельно надо переносить. Копировать не получится. Не самая простая тема. Ну а про это
The_Prist написал: А потом самое сложное - отформатировать так, чтобы это вменяемо выглядело.
после переноса надо все подгонять под нужный Вам формат. Тоже не самое мое любимое занятие. Это надо делать уже в Word. Перенесите туда таблицу как есть и попробуйте отформатировать до нужного состояния руками. Если это будет просто(типа просто ужали её с краев) - значит вполне легко можно это записать макрорекордером ворда и подставить в код из Excel. А если там куча подстроек под размер - это уже совершенно отдельная тема и тоже не самая простая, возможно.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Jack Famous написал: можно подсократить и ускорить для циклов
ускорения тут не вижу, если честно...Сокращение строк - да. Но я этим не страдаю И там и там инициализация массива займет одинаковое кол-во времени(у меня через ReDim, у тебя через Dim). Только в моем коде этой инициализации не будет, если выделено более одной ячейки. Да, есть однозначное присвоение значения переменной, но оно есть и у тебя. Плюс, в твоем коде идет сначала получение значений из ячеек, а потом перекидывание этих значений из одного массива в другой(одного значения). Не уверен, что такой подход что-то ускорит.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
еще покажите, как это отображается в источнике для запроса PowerQuery...Пока видно то, что по факту можно просто убрать из шага преобразование этого столбца в формат number
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Dim ВыкладкаФайлы
ВыкладкаФайлы = Selection.Value2
If Not IsArray(ВыкладкаФайлы) Then
ReDim ВыкладкаФайлы(1 to 1, 1 to 1)
ВыкладкаФайлы(1,1) = Selection.Value2
end if
а далее работаем с массивом и все.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
1. Не совсем понятно, почему в общей ветке, а не в курилке 2. А квадратные скобки вместе с круглыми Вас не смущают? 3. Это явно должен быть знак "меньше-равно", но что-то пошло не так в момент распознавания
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Anton_Kozlov написал: Если он сработал значит не спорно
все же спорно, наверное, т.к. код кнопки в первом сообщении отличается от того, который в решении приведен. Но в любом случае хотя бы есть что пробовать тем, у кого возникнет такая же проблема. P.S. Ну и надо сказать, что Ваше решение очень незначительно отличается от кода, который в качестве примера привел Игорь.
VIZ_VIZ написал: как доработать указанный ниже макрос, чтобы он заполнял не только видимые ячейки, но и ячейки в скрытых строках
вот тот код, который Вы привели в первом сообщении как раз учитывает и скрытые тоже. Его наоборот надо учить заполнять только видимые. Другой вопрос, откуда у Вас берется a1.Row. Вот она может быть и получается только из видимых строк при неправильном подходе к её получению. Но т.к. у Вас подход не проблему решить, а обидеться на справедливые просьбы о нормальном хотя бы куске кода, а не одной строке - то помочь Вам нечем.
Цитата
VIZ_VIZ написал: параметр LookIn:=xlValues как раз определяет поиск в скрытых строках
а теперь не погуглите, а проверьте на своем примере, правда ли это. Потому что смотреть надо не параметр, а на сам метод Range.Find. Который как раз ничего в скрытых ячейках не ищет, если вызван из VBA с параметром xlValues. Вот именно этот xlValues игнорирует скрытые строки. А если использовать xlFormulas - то скрытые тоже будут в поиске.
nipolka написал: не нашел идеального варианта для себя
и не найдете. Сама основа задачи не нова - заполнение файлов Word из Excel обсуждалось и рассматривалось не раз. Но вот конкретика и нюансы уже выходят за рамки шаблонов и надо выдумывать алгоритмы. Вот еще статья на тему: Как из Excel обратиться к другому приложению Она поможет разобраться с основами, а приложенный пример заполнения может натолкнуть на решение.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
IKor написал: при помощи какого-то инструмента типа макросов
это функция листа макросов ВЫЧИСЛИТЬ. Она вполне может такое делать, но по сути куда правильнее использовать UDF, т.к. макросы все равно надо будет разрешать. А UDF можно сделать куда универсальнее и удобнее в использовании. Про функцию ВЫЧИСЛИТЬ. Если необходимый для вычисления текст в ячейке А1, а результат нужен в В1, то выделяем В1 -переходим на вкладку Формулы -Диспетчер имен -Создать. Даем понятное имя, например "_выч". В качестве формулы вбиваем:
Код
=ВЫЧИСЛИТЬ(Лист1!A1)
Подтверждаем. Теперь в В1 вбиваем =_выч. Текст в А1 будет вычислен. Если протянуть вниз - то будут вычислены и А2, А3 и т.д. Но указать любую произвольную ячейку будет нельзя. UDF удобнее. Создаем:
Код
Function EvalCell(rc As Range)
EvalCell = Evaluate(rc.Value)
End Function
в любой ячейке вбиваем: =EvalCell(A1) при этом вместо А1 можно указать ссылку на любую ячейку, чего никак нельзя сделать при помощи макрофункции ВЫЧИСЛИТЬ.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
изначально лучше пример прикладывать, максимально отвечающий требованиям задачи, если сами не в силах эту задачу решить и возможное решение подстроить. Это на будущее. Переделывать каждый раз под новое "а у меня вот так" мало у кого желания возникает
Код
Dim dic As Object
Sub main()
Dim arr, aarts, sArt$, s$
Dim lr&, lc&, la&, llastc&, llastr&
With ActiveSheet
llastc = .Cells(3, .Columns.Count).End(xlToLeft).Column
aarts = .Cells(3, 8).Resize(2, llastc - 7).Value
For la = 1 To UBound(aarts, 2)
sArt = aarts(1, la)
Set dic = CreateObject("scripting.dictionary")
dic.comparemode = 1
If Len(sArt) Then
dic.Add sArt, 0&
llastr = .Cells(.Rows.Count, 1).End(xlUp).Row
llastc = 4
arr = .Cells(3, 1).Resize(llastr - 2, llastc).Value
For lr = 1 To UBound(arr, 1)
s = arr(lr, 1)
If s = sArt Then
For lc = 2 To UBound(arr, 2)
s = arr(lr, lc)
If Len(s) Then
If Not dic.exists(s) Then
dic.Add s, 0&
GetLinkedArt s, arr
End If
End If
Next
Exit For
End If
Next
dic.Remove sArt
If dic.Count > 0 Then
.Cells(4, la + 7).Resize(dic.Count, 1).Value = Application.Transpose(dic.keys)
End If
End If
Next
End With
End Sub
Function GetLinkedArt(sArt$, arr)
Dim lr&, lc&, s$
For lr = 1 To UBound(arr, 1)
s = arr(lr, 1)
If s = sArt Then
For lc = 2 To UBound(arr, 2)
s = arr(lr, lc)
If Len(s) Then
If Not dic.exists(s) Then
dic.Add s, 0&
GetLinkedArt s, arr
End If
End If
Next
Exit For
End If
Next
End Function
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...