Option Explicit
Sub AutoFillToRow(rngBeg As Range, rEnd As Long)
Dim rngEnd As Range
With rngBeg
If rEnd >= .Row Then
Set rngEnd = .Resize(rEnd - .Row + 1)
Else
If rEnd < .Row Then Set rngEnd = .Offset(rEnd - .Row).Resize(.Row - rEnd + .Rows.Count)
End If
.AutoFill Destination:=rngEnd, Type:=xlFillDefault
End With
End Sub
Sub Заполнить()
Dim x, firstRowData As Long, rEnd As Long, rngUsed As Range, rngBeg As Range
Set rngUsed = ActiveSheet.UsedRange
firstRowData = 12 'первая строка данных в таблице
rEnd = rngUsed.Row + rngUsed.Rows.Count - 1 'последняя используемая строка на листе
For Each x In Array(1, 2, 5, 6, 13, 14, 15, 21) 'в каких столбцах нужен AutoFill
Set rngBeg = Cells(firstRowData, x) 'за основу первая строка данных таблицы
' Set rngBeg = Range(Cells(firstRowData, x), Cells(rEnd - 1, x))'за основу диапазон кроме последней строки данных таблицы
AutoFillToRow rngBeg, rEnd
Next
End Sub
Работа с Яндекс диском из vba, Загрузить файл, скачать, создать директорию, переименовать
Пользователь
Сообщений: Регистрация: 18.12.2016
15.10.2018 21:29:12
Код
Function WebDavDsk(lgn$, psw$, Optional fldr$) As String
Dim fso As Object, netDsk As Object, dskPath$, i&
Set netDsk = CreateObject("WScript.Network")
Set fso = CreateObject("Scripting.FileSystemObject")
On Error Resume Next
For i = 65 To 90
dskPath = Chr(i) & ":"
If Not fso.DriveExists(dskPath) Then
netDsk.MapNetworkDrive dskPath, "https://webdav.yandex.ru:443/" & fldr, False, lgn, psw
If Err.Number = 0 Then Exit For Else dskPath = "": Err.Clear
End If
Next
On Error GoTo 0
WebDavDsk = dskPath
End Function
Sub NetDskOff(dskPath$)
Dim fso As Object, x, netDsk As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Set netDsk = CreateObject("WScript.Network")
On Error Resume Next
For Each x In fso.Drives
dskPath = x.Path: If fso.FolderExists(dskPath) Then netDsk.RemoveNetworkDrive dskPath, True, True: Exit For
Next
End Sub
Sub ПримерИспользования()
Dim БукваПодключаемогоДиска$
БукваПодключаемогоДиска = WebDavDsk("Логин", "Пароль", "Папка")
'vcomp71 написал: Загрузить файл, скачать, создать директорию, переименовать
'Здесь все это делаем что хотели
NetDskOff БукваПодключаемогоДиска 'Отключаем диск после работы
End Sub
Изменено: - 15.10.2018 21:31:00
ячейки с зада :), и такое бывает
Пользователь
Сообщений: Регистрация: 18.12.2016
06.09.2018 16:11:16
Сергей, Без серьезного творческого подхода лень корни не пустит. А без корней, она не цветет и не плодоносит...
ячейки с зада :), и такое бывает
Пользователь
Сообщений: Регистрация: 18.12.2016
05.09.2018 11:17:11
Видимо лень слишком сложный инструмент...
Сортировка в двумерном массиве VBA Excel, Написал тут небольшую процедурку, может кому будет полезна
Пользователь
Сообщений: Регистрация: 18.12.2016
18.08.2018 14:06:07
Приношу свои извинения, если что не так... Как смогу - проверю, и, кроме того, код уже переписан, который использую.... Просто не было возможности ответить.... Внесу изменения в течение недели. Еще раз приношу извинения...
Изменено: - 18.08.2018 14:08:51
Делимся..., разным
Пользователь
Сообщений: Регистрация: 18.12.2016
04.08.2018 16:26:19
Подумай о других...
Сортировка в двумерном массиве VBA Excel, Написал тут небольшую процедурку, может кому будет полезна
Пользователь
Сообщений: Регистрация: 18.12.2016
22.07.2018 17:01:02
Цитата
Inexsu написал: Type mismatch: array or user-defined type expected
Поданные массивы не соответствую заявленному типу (либо ДвумерныйМассив, либо МассивИндексов)
Ошибка при заполнении списка при смене текущего листа
Пользователь
Сообщений: Регистрация: 18.12.2016
11.07.2018 14:57:54
lechiy, если тупо и в лоб и только для работы с ComboBox(ListBox), не трогая данные листов и обрабатывается первая колонка ComboBox(ListBox) добавьте в код UserForm
Код
Option Explicit
Sub UnqVal(ctrl, a)
Dim i As Long, d As Object
With Me.Controls(ctrl)
.List = a: If .ListCount = 0 Then Exit Sub
Set d = CreateObject("Scripting.Dictionary"): d.CompareMode = 1
Do While i < .ListCount
If d.exists(.List(i, 0)) Then .RemoveItem (i) Else d(.List(i, 0)) = Empty: i = i + 1
Loop
End With
End Sub
Private Sub UserForm_Initialize()
UnqVal "ComboBox1", Array("a", "b", "c", "b", "c", "d", "a")
End Sub
Изменено: - 11.07.2018 15:11:47
Макрос сохраняет файл иногда с расширением, а иногда без
Пользователь
Сообщений: Регистрация: 18.12.2016
10.07.2018 05:30:37
Код
Filename = L1.Cells(6, 31) & ".xlsx"
Ошибка вызова формы, Перестала работать кнопка вызова формы
В коде UserForm. Поставьте точки останова в коде UserForm и отловите там ошибку...
Закрытие или сохранение без активного фильтра.
Пользователь
Сообщений: Регистрация: 18.12.2016
30.06.2018 15:40:02
inseption, посмотрите в сторону надстроек... Там все аналогично.
Макрос открытие книги и определенного листа., Макросом открыть книгу и необходимый лист, ссылка указана я ячейках.
Пользователь
Сообщений: Регистрация: 18.12.2016
30.06.2018 15:19:40
Файл пример прилагайте
Код
Sub Аптека()
Dim wbkSource As Workbook
Set wbkSource = Workbooks.Open(ActiveSheet.Range("A1"), Password:="0301")
wbkSource.Sheets(ThisWorkbook.ActiveSheet.Range("B2").Value).Activate
End Sub
Закрытие или сохранение без активного фильтра.
Пользователь
Сообщений: Регистрация: 18.12.2016
30.06.2018 14:46:27
inseption, вот поэтому нужно читать правила форума, которые гласят о предоставлении файла примера...
Код
Private Sub Workbook_Open()
Dim wks As Worksheet
For Each wks In Worksheets
With wks
If .AutoFilterMode Then If .AutoFilter.FilterMode Then .ShowAllData
End With
Next
End Sub
Изменено: - 30.06.2018 14:48:24
Макрос открытие книги и определенного листа., Макросом открыть книгу и необходимый лист, ссылка указана я ячейках.
Пользователь
Сообщений: Регистрация: 18.12.2016
30.06.2018 14:24:13
Код
Sub Аптека()
Set wbkSource = Workbooks.Open(Range("A1"), Password:="0301")
wbkSource.sheets(thisworkbook.activesheet.Range("B2")).activate
End Sub
Закрытие или сохранение без активного фильтра.
Пользователь
Сообщений: Регистрация: 18.12.2016
30.06.2018 13:36:55
Код
Public Sub Auto_Open()
Dim wks As Worksheet
For Each wks In Worksheets
with wks
If .AutoFilterMode Then If .AutoFilter.FilterMode Then .ShowAllData
end with
next
end sub
Изменено: - 30.06.2018 13:45:14
Поиск и группировка данных по строкам, Группировка значений по критерию и их объединение и запись в строку
Пользователь
Сообщений: Регистрация: 18.12.2016
28.06.2018 12:58:14
Qwertys, Задача весьма стандартная, только не понятно зачем на одном листе источник и результат? Лучше результат поместить на отдельном листе или нет?
Изменено: - 28.06.2018 12:58:55
Автозаливка строк по двум условиям
Пользователь
Сообщений: Регистрация: 18.12.2016
28.06.2018 12:49:28
Andrei0808, Вы хотите сказать, что таблица в представленном виде может иметь различное количество строк?
Поставить символ в ячейку таблицы на основании координат ответа.
Пользователь
Сообщений: Регистрация: 18.12.2016
26.06.2018 08:41:13
Aibar, Предложите название темы, а то Ваше "Заполнение ячейки"... И как из названия темы можно заключить, чтто Ваша задача отличается от того, чем занимается любой пользователь работающий в Excel (см. сообщение #2)
Поставить символ в ячейку таблицы на основании координат ответа.
"Найти все" по заголовкам: выделить, скопировать и вставить столбцы
Пользователь
Сообщений: Регистрация: 18.12.2016
21.06.2018 03:42:49
Код
Sub TestCopyValue()
Dim aField, x, xColumn as range, c&
shNm1 = "Лист1"
shNm2 = "Лист2"
aField = Array("Столбец A1", "Столбец B1", "Столбец D1")
For Each x In aField
Set xColumn = GetColumnRange(shNm1, x, 1)
If Not xColumn Is Nothing Then c = c + 1: Sheets(shNm2).Cells(2, c).Resize(xColumn.Count).Value = xColumn.Value
Next
End Sub
Изменено: - 21.06.2018 03:44:29
"Найти все" по заголовкам: выделить, скопировать и вставить столбцы
Можно делать все что угодно и не факт, что эта работа будет полезна вопрошающему, только время потратить...
Код
Function GetColumnRange(ByVal nmSheet, ByVal nmField, Optional ByVal rField& = 1) As Range
Dim x, i&
With Sheets(nmSheet).UsedRange
If rField < .Row Then rField = .Row
With .Offset(rField - .Row).Resize(.Rows.Count - rField + .Row)
For Each x In .Resize(1)
If nmField = x Then Set GetColumnRange = .Offset(1, i).Resize(.Rows.Count - 1, 1): Exit Function
i = i + 1
Next
End With
End With
End Function
Sub ВыделитьНеобходимыйДиапазон()
Dim ИмяЛиста$, ИмяНужногоПоля$, НомерСтрокиЗаголовков&
ИмяЛиста = "Лист1"
ИмяНужногоПоля = "ID"
НомерСтрокиЗаголовков = 1
GetColumnRange(ИмяЛиста, ИмяНужногоПоля, НомерСтрокиЗаголовков).Select
End Sub
Изменено: - 20.06.2018 16:30:32
[ Закрыто] Ошибка: Макрос не обрабатывает отчёт до конца.
Пользователь
Сообщений: Регистрация: 18.12.2016
20.06.2018 13:51:25
vikttur, а вдруг неизвестно, я поэтому про необходимый минимум и говорю... Может здесь какие-то новые навороты.
Изменено: - 20.06.2018 13:52:02
[ Закрыто] Ошибка: Макрос не обрабатывает отчёт до конца.
Пользователь
Сообщений: Регистрация: 18.12.2016
20.06.2018 13:46:11
netmakar, Вы хотя бы дайте ссылку на задачу... (старую тему)
Определить неизвестные свойства ListBox на форме
Пользователь
Сообщений: Регистрация: 18.12.2016
20.06.2018 11:59:57
Alemox, по горизонталке да, по вертикали смысла нет, поэтому идей нет (не искал вариантов). ps Да, уточню, этих неизвестных свойств нет
Изменено: - 20.06.2018 12:13:01
Определить неизвестные свойства ListBox на форме
Пользователь
Сообщений: Регистрация: 18.12.2016
20.06.2018 11:52:56
Alemox, как-то была тема по этому вопросу, ну и я уже забыл в чем там дело, но, именно, тогда я накатал такую функцию: Проверено на размерах шрифтов = 6 - 14 (для моих проектов более, чем достаточно)...
Код
Function SetListBoxRowsCount(lst As Control, Optional ByVal rCount&, Optional rAuto As Boolean)
Dim d, hAdd!, r&, lHeight!, iHeight As Boolean
Static y!
On Error Resume Next
With lst
If rCount > 0 Then
If y Then
If rAuto Then If rCount > .ListCount Then rCount = .ListCount
.IntegralHeight = False: .Height = y * (rCount + 1): .IntegralHeight = True: DoEvents
SetListBoxRowsCount = y: Exit Function
End If
Else
lHeight = .Height: iHeight = .IntegralHeight
End If
r = 1
Set d = CreateObject("Scripting.Dictionary")
.IntegralHeight = False: .Height = lst.Font.Size * 0.75: .IntegralHeight = True: DoEvents
hAdd = .Height + 1.5: y = .Height
Do Until r >= 10
.IntegralHeight = False: .Height = .Height + hAdd: .IntegralHeight = True: DoEvents
y = Round((.Height - y) / 0.75): d(y) = d(y) + 1: If d(y) * 2 - 3 > d.Count Then Exit Do
y = .Height: r = r + 1
Loop
y = y * 0.75: .IntegralHeight = False:
If lHeight > 0 Then
.Height = lHeight + y: .IntegralHeight = True: DoEvents: .IntegralHeight = iHeight
Else
.Height = y * (rCount + 1): .IntegralHeight = True: DoEvents
End If
End With
SetListBoxRowsCount = y
End Function
Я ее не совершенствовал, ибо работает... Возвращает высоту строки ListBox lst - сам контрол rCount - количество строк rAuto - назначение высоты ListBoox по количеству строк или по rCount ( общему количеству строк) ps Это работает уже давно и сбоев не давало, но можно было бы переписать ее в более эффективной форме. Просто суровая действительность не возникала, а желанию было некогда. psps
Изменено: - 20.06.2018 11:59:21
Удалить символы 7 и 8 из маркировки, Необходимо удалить из автоматической маркировки цифры 7 и 8
Удалить символы 7 и 8 из маркировки, Необходимо удалить из автоматической маркировки цифры 7 и 8
Пользователь
Сообщений: Регистрация: 18.12.2016
20.06.2018 10:27:44
Qwerty Z, Если у Вас русский Excel Если нет, то замените названия функций на соответствующие языку. В Ya-Google эти соответствия легко найдутся..
Изменено: - 20.06.2018 10:30:14
Удалить символы 7 и 8 из маркировки, Необходимо удалить из автоматической маркировки цифры 7 и 8
Пользователь
Сообщений: Регистрация: 18.12.2016
20.06.2018 08:29:58
Если не хотите макросом, то фильтр Вам точно не поможет связать код с нумерацией ="KZ"&ПОДСТАВИТЬ(ДЕС.В.ВОСЬМ(A1;4);"7";"9") И название темы не соответствует... Скорее так: "Формирование кодов маркировки с пропуском значений, содержащих 7 или 8"
Изменено: - 20.06.2018 08:35:15
Удаление текста в ячейке одновременно до и после символа
vestes написал: совет AAF это как я понял для пользователей, меняющих данные
Так для тех, кто не меняет данные еще проще, лежит xls с состоянием на текущий момент и все. ps Ведь есть преимущества перед картинкой и поиск и автофильтр все пожалуйста