Имеется большая таблица, сформированная 1С, в ней много пустых клеток. Можно ли как-нибудь средствами экселя, не перебирая каждое значение, определить последний ряд в ней и последнюю колонку?
» Excel VBA (часть 2)
При выполнении кода выскакивает ошибка ERROR IN LOADING DLL. Причем, выскакивает все время в разных местах.
Из за чего она взялась и что теперь с ней делать?
Из за чего она взялась и что теперь с ней делать?
David_Kats
Неплохо бы узнать, какую DLL не может загрузить.
Как вариант - скопировать текст программы в новый лист, причём только текст, не модули, не листы, а просто текст (можно через блокнот) и посмотреть, будет ли там вылетать. Возможно, что какой-то из References выключен или неправильно указан.
Если ничего не поможет, и вы пользуетесь только штатными функциями (без подгрузки дополнительных DLL), то переустановить офис.
Неплохо бы узнать, какую DLL не может загрузить.
Как вариант - скопировать текст программы в новый лист, причём только текст, не модули, не листы, а просто текст (можно через блокнот) и посмотреть, будет ли там вылетать. Возможно, что какой-то из References выключен или неправильно указан.
Если ничего не поможет, и вы пользуетесь только штатными функциями (без подгрузки дополнительных DLL), то переустановить офис.
Друзья, подскажите пожалуйста:
Есть список названий, вроде
"Вася"
"Петя"
"Коля"...
В интересующем диапазоне значения ячеек принимают вид:
"Вася_290000 Петя_18666 Коля_212"
"Петя_1 Коля_66665"
итп
Мне нужно выделить всех Вась_хххх диапазона одним цветом,
Петь_ххххх - другим итп, даже в пределах одной ячейки.
Самое близкое что я нашел - далее, но оно ищет точное совпадение и выделяет всю ячейку...
Dim strStartAddr As String ' Хранит координаты первого найденного _
значения
Dim rgResult As Range
Dim candidate1 As String
' Поиск первого входжения искомого слова
Set rgResult = Range("G14:G109").Find("Вася_290000", , xlValues)
If Not rgResult Is Nothing Then
' Сохраним адрес найденной ячейки (чтобы контролировать _
зацикливание поиска)
strStartAddr = rgResult.Address
End If
Do While Not rgResult Is Nothing
' Обработка результата поиска
rgResult.Interior.Color = RGB(255, 255, 0)
' Новый поиск
Set rgResult = Range("G14:G109").FindNext(rgResult)
If rgResult.Address = strStartAddr Then
' Поиск завершен
Exit Do
End If
Loop
Есть список названий, вроде
"Вася"
"Петя"
"Коля"...
В интересующем диапазоне значения ячеек принимают вид:
"Вася_290000 Петя_18666 Коля_212"
"Петя_1 Коля_66665"
итп
Мне нужно выделить всех Вась_хххх диапазона одним цветом,
Петь_ххххх - другим итп, даже в пределах одной ячейки.
Самое близкое что я нашел - далее, но оно ищет точное совпадение и выделяет всю ячейку...
Dim strStartAddr As String ' Хранит координаты первого найденного _
значения
Dim rgResult As Range
Dim candidate1 As String
' Поиск первого входжения искомого слова
Set rgResult = Range("G14:G109").Find("Вася_290000", , xlValues)
If Not rgResult Is Nothing Then
' Сохраним адрес найденной ячейки (чтобы контролировать _
зацикливание поиска)
strStartAddr = rgResult.Address
End If
Do While Not rgResult Is Nothing
' Обработка результата поиска
rgResult.Interior.Color = RGB(255, 255, 0)
' Новый поиск
Set rgResult = Range("G14:G109").FindNext(rgResult)
If rgResult.Address = strStartAddr Then
' Поиск завершен
Exit Do
End If
Loop
а почему бы не так ...
а ... понял ... шрифт разными цветами ...
тады ... так ..
Sub wr()
Set Target = Range("A:A")
For Each rn In Target
If rn.Value Like "*Вася*" Then
n = InStr(1, rn.Value, "Вася")
m = InStr(n, rn.Value, " ")
With rn.Characters(Start:=n, Length:=m - n).Font
.ColorIndex = 38
End With
End If
If rn.Value Like "*Петя*" Then
n1 = InStr(1, rn.Value, "Петя")
m1 = InStr(n1, rn.Value, " ")
With rn.Characters(Start:=n1, Length:=m1 - n1).Font
.ColorIndex = 33
End With
End If
If rn.Value Like "*Саша*" Then
n2 = InStr(1, rn.Value, "Саша")
m2 = InStr(n2, rn.Value, " ")
With rn.Characters(Start:=n2, Length:=m2 - n2).Font
.ColorIndex = 36
End With
End If
Next
End Sub
а ... понял ... шрифт разными цветами ...
тады ... так ..
Sub wr()
Set Target = Range("A:A")
For Each rn In Target
If rn.Value Like "*Вася*" Then
n = InStr(1, rn.Value, "Вася")
m = InStr(n, rn.Value, " ")
With rn.Characters(Start:=n, Length:=m - n).Font
.ColorIndex = 38
End With
End If
If rn.Value Like "*Петя*" Then
n1 = InStr(1, rn.Value, "Петя")
m1 = InStr(n1, rn.Value, " ")
With rn.Characters(Start:=n1, Length:=m1 - n1).Font
.ColorIndex = 33
End With
End If
If rn.Value Like "*Саша*" Then
n2 = InStr(1, rn.Value, "Саша")
m2 = InStr(n2, rn.Value, " ")
With rn.Characters(Start:=n2, Length:=m2 - n2).Font
.ColorIndex = 36
End With
End If
Next
End Sub
Создаю панель в екселе и там будет кнопка:
Код:
With .Controls.Add(Type:=msoControlButton)
.Style = msoButtonWrapCaption
.Caption = "Рефер"
.OnAction = "ref"
End With
Код:
With .Controls.Add(Type:=msoControlButton)
.Style = msoButtonWrapCaption
.Caption = "Рефер"
.OnAction = "ref"
End With
nopoxz
А что, макросом "ref" его нельзя открывать?
А что, макросом "ref" его нельзя открывать?
SERGE_BLIZNUK
корпус квартира
КОР.1 КВ.61
КВ.37
если не трудно помоги со скриптом для разовой проверки файла, чтоб КОР был в графе корпуса а КВ в строке квартира.
корпус квартира
КОР.1 КВ.61
КВ.37
если не трудно помоги со скриптом для разовой проверки файла, чтоб КОР был в графе корпуса а КВ в строке квартира.
doc58_81oB0t
Пусть столбец "A" - корпус, столбец "B" - квартира (где первая строка - заголовок). Тогда, можно, например, так:
Код: Dim i As Long
For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row
If Cells(i, "B") = "" Then Cells(i, "A").Cut Cells(i, "B")
Next
Пусть столбец "A" - корпус, столбец "B" - квартира (где первая строка - заголовок). Тогда, можно, например, так:
Код: Dim i As Long
For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row
If Cells(i, "B") = "" Then Cells(i, "A").Cut Cells(i, "B")
Next
Ребята помогите!!!
вопрос такой: у меня есть userform с label и spreadsheet и нужно чтоб при нажатии кнопки commandbutton были бы распечатаны данные с userform с заданым мною заголовком. пасибки
вопрос такой: у меня есть userform с label и spreadsheet и нужно чтоб при нажатии кнопки commandbutton были бы распечатаны данные с userform с заданым мною заголовком. пасибки
SAS888
у меня так и работает: в ячейку вписал линк на файл, а макрос "реф" нажимает на эту ячейку. Минус этого варианта в том, что рабочая область сдвигается к той ячейке, где прописан линк.
если есть другой вариант, можешь подсказать?
у меня так и работает: в ячейку вписал линк на файл, а макрос "реф" нажимает на эту ячейку. Минус этого варианта в том, что рабочая область сдвигается к той ячейке, где прописан линк.
если есть другой вариант, можешь подсказать?
Пишу
g = Range("I1:I4").Value
и VBA проглатывает. Тогда что содержит переменная g ???
Можно ли вообще в одну операцию передать значения диапазона ячеек массиву, или нужен обязательно цикл, и по другому никак?
g = Range("I1:I4").Value
и VBA проглатывает. Тогда что содержит переменная g ???
Можно ли вообще в одну операцию передать значения диапазона ячеек массиву, или нужен обязательно цикл, и по другому никак?
visual73
я возьму на себя наглость ответить, да ещё и привести чужой код в качестве примера:
(с) Pavel55
Код:
Sub Макрос1()
Dim iArray As Variant
Dim i As Long
'просто для примера пишем 20 значений в столбец А
For i = 1 To 20
Cells(i, 1) = i
Next
'заполняем массив одним махом
iArray = Application.Transpose(Range("A1:A" & Range("A65536").End(xlUp).Row))
'а теперь переносим его одним махом в соседний столбец B
Range("B1:B" & UBound(iArray)) = Application.Transpose(iArray)
End Sub
я возьму на себя наглость ответить, да ещё и привести чужой код в качестве примера:
(с) Pavel55
Код:
Sub Макрос1()
Dim iArray As Variant
Dim i As Long
'просто для примера пишем 20 значений в столбец А
For i = 1 To 20
Cells(i, 1) = i
Next
'заполняем массив одним махом
iArray = Application.Transpose(Range("A1:A" & Range("A65536").End(xlUp).Row))
'а теперь переносим его одним махом в соседний столбец B
Range("B1:B" & UBound(iArray)) = Application.Transpose(iArray)
End Sub
SERGE_BLIZNUK
Спасибо.
Но это не совсем то что я хотел. Этот массив - массив ячеек. Мне нужен массив значений этих ячеек.
Мне кажется этот момент очень сильно скажется на производительности Excel. Одно дело работать с range а другое с Duble. А если ячеек 10 000 000?
Спасибо.
Но это не совсем то что я хотел. Этот массив - массив ячеек. Мне нужен массив значений этих ячеек.
Мне кажется этот момент очень сильно скажется на производительности Excel. Одно дело работать с range а другое с Duble. А если ячеек 10 000 000?
visual73
Цитата:
Цитата:
ну так там же в массиве значения! я Вас не понимаю!.. :-(
Цитата:
Цитата:
Мне кажется этот момент очень сильно скажется на производительности Excel.а я думаю, что наоборот - быстрее, чем в цикле поочередно обращаться к каждой ячейке... впрочем, пробуйте - так и так, замеряйте время - всё в ваших руках.
Цитата:
Этот массив - массив ячеек. Мне нужен массив значений этих ячеек.
ну так там же в массиве значения! я Вас не понимаю!.. :-(
Цитата:
Одно дело работать с range а другое с Duble.одно дело ходить в пальто, другое дело — ходить в кино... Каким образом Range (ссылка на ячейки) связано в с типом данных "Duble" (double, я полагаю описка...) ??!!
SERGE_BLIZNUK
А почему "как Variant"?
Цитата:
У меня в ячейках находятся значения типа "Double" (..да, это описка была). Почему в данном примере я не могу использовать "As Double" ?
Я имел ввиду что можно работать с массивом состоящим из отдельных ячеек, каждому элементу массива можно например передать свойство .Value или например заблокировать .Locked=True.
Похоже в данном случае диапазон передает в массив значения. Спасибо.
P.S. Не кипятитесь. Можно например в пальто пойти в кино Все мы учимся.
А почему "как Variant"?
Цитата:
Dim iArray As Variant
У меня в ячейках находятся значения типа "Double" (..да, это описка была). Почему в данном примере я не могу использовать "As Double" ?
Я имел ввиду что можно работать с массивом состоящим из отдельных ячеек, каждому элементу массива можно например передать свойство .Value или например заблокировать .Locked=True.
Похоже в данном случае диапазон передает в массив значения. Спасибо.
P.S. Не кипятитесь. Можно например в пальто пойти в кино Все мы учимся.
visual73
Цитата:
Можете, но есть несколько моментов.
1) если у вас в ячейке (случайно) будет тип данных не совместимый с Double, то работа макроса будет завершена по ошибке. А в случае получения в переменную Variant тип данных можно проверить.
2) Variant в некоторых случаях можно использоваться как неявный безразмерный массив. В приведённом примере функция возвращает массив со строго определённым размером.
Добавлено:
nopoxz
Цитата:
А можно проблемную часть кода посмотреть? И что подразумевается под рабочей областью: выделение, прокрутка, активный лист/книга? Возможно, что код можно так сделать, чтобы ничего не сдвигалось, а если это невозможно, то можно попробовать просто запоминать рабочую область (?) и восстанавливать её после того участка кода, который её сдвигает.
Цитата:
А почему "как Variant"?
Цитата:Dim iArray As Variant
У меня в ячейках находятся значения типа "Double". Почему в данном примере я не могу использовать "As Double" ?
Можете, но есть несколько моментов.
1) если у вас в ячейке (случайно) будет тип данных не совместимый с Double, то работа макроса будет завершена по ошибке. А в случае получения в переменную Variant тип данных можно проверить.
2) Variant в некоторых случаях можно использоваться как неявный безразмерный массив. В приведённом примере функция возвращает массив со строго определённым размером.
Добавлено:
nopoxz
Цитата:
у меня так и работает: в ячейку вписал линк на файл, а макрос "реф" нажимает на эту ячейку. Минус этого варианта в том, что рабочая область сдвигается к той ячейке, где прописан линк.
А можно проблемную часть кода посмотреть? И что подразумевается под рабочей областью: выделение, прокрутка, активный лист/книга? Возможно, что код можно так сделать, чтобы ничего не сдвигалось, а если это невозможно, то можно попробовать просто запоминать рабочую область (?) и восстанавливать её после того участка кода, который её сдвигает.
nick7inc
Цитата:
Никак не работает с приведенным выше примером и Double. Попробуйте сами.
Цитата:
Можете
Никак не работает с приведенным выше примером и Double. Попробуйте сами.
SAS888
Dim i As Long
For i = 3 To Cells(Rows.Count, "O").End(xlUp).Row
If Cells(i, "P") = "" Then Cells(i, "O").Cut Cells(i, "P")
Application.Run "'1.xlsm'!Макрос1"
Next
строка 3, столбец O-корпус, P-квартира
ошибку при выполнении выдает
Dim i As Long
For i = 3 To Cells(Rows.Count, "O").End(xlUp).Row
If Cells(i, "P") = "" Then Cells(i, "O").Cut Cells(i, "P")
Application.Run "'1.xlsm'!Макрос1"
Next
строка 3, столбец O-корпус, P-квартира
ошибку при выполнении выдает
А на мой вопрос что скажете? Есть какие-то встроенные функции, для определения последних столбца и строки таблицы, если в ней есть пустые ячейки?
Помогите, не нашел ответа.
Необходимо выбрать несколько файлов.
Использую:
file = Application.GetOpenFilename
в переменной file соответственно получаю ссылку на файл и далее
Workbooks.OpenText Filename:=file, и т.д.
Так я могу выбрать только один файл, хотелось бы использовать ctrl для выбора нескольких.
Необходимо выбрать несколько файлов.
Использую:
file = Application.GetOpenFilename
в переменной file соответственно получаю ссылку на файл и далее
Workbooks.OpenText Filename:=file, и т.д.
Так я могу выбрать только один файл, хотелось бы использовать ctrl для выбора нескольких.
XOPEK HAPKOMAH
сделай форму со списком, считай названия файлов в список и в нем сделай МНОЖЕСТВЕННЫЙ выбор ...
ЕСЛИ не подходит ...
Application.Dialogs(xlDialogOpen).Show
сделай форму со списком, считай названия файлов в список и в нем сделай МНОЖЕСТВЕННЫЙ выбор ...
ЕСЛИ не подходит ...
Application.Dialogs(xlDialogOpen).Show
PerpleXOR
Цитата:
что значит - "встроенные"?? и на VBA надо?
так пробовали?
Код:
Dim Col1, Col2 As Long
Col1 = ActiveWorkbook.ActiveSheet.UsedRange.Column
Col2 = Row1 + ActiveWorkbook.ActiveSheet.UsedRange.Columns.Count
MsgBox "Последняя использованная колонка на листе = " _
& Str(Col1 + Col2 - 1)
Цитата:
на мой вопрос что скажете? Есть какие-то встроенные функции, для определения последних столбца и строки таблицы, если в ней есть пустые ячейки?
что значит - "встроенные"?? и на VBA надо?
так пробовали?
Код:
Dim Col1, Col2 As Long
Col1 = ActiveWorkbook.ActiveSheet.UsedRange.Column
Col2 = Row1 + ActiveWorkbook.ActiveSheet.UsedRange.Columns.Count
MsgBox "Последняя использованная колонка на листе = " _
& Str(Col1 + Col2 - 1)
ух, сколько вариантов.
Спасибо больше, SERGE_BLIZNUK!
Буду пробовать.
Спасибо больше, SERGE_BLIZNUK!
Буду пробовать.
SERGE_BLIZNUK
сохраненный файл формата Excel 2007 с макросами
сохраненный файл формата Excel 2007 с макросами
WowGun
Цитата:
Спасибо за советы, но форма не подходит.
Application.Dialogs(xlDialogOpen).Show не только выбирает но и открывает файлы, этого не надо. Надо именно список выбранных файлов. Что и как открыть далее решается программно, а это важно. Например, при открытии текстового файла выходит мастер текстов. Пользователю не нужны лишние действия.
Цитата:
сделай форму со списком, считай названия файлов в список и в нем сделай МНОЖЕСТВЕННЫЙ выбор ...
ЕСЛИ не подходит ...
Application.Dialogs(xlDialogOpen).Show
Спасибо за советы, но форма не подходит.
Application.Dialogs(xlDialogOpen).Show не только выбирает но и открывает файлы, этого не надо. Надо именно список выбранных файлов. Что и как открыть далее решается программно, а это важно. Например, при открытии текстового файла выходит мастер текстов. Пользователю не нужны лишние действия.
Здравствуйте,у меня такой вопрос. Можно ли пользоваться функцией GetObject,получающей ссылку на excel-документ,не открывая этот документ(может есть похожая на нее функция).
У меня это функция правильно работает,только если перед этим вызвать Workbooks.Open Filename:=file_name
У меня это функция правильно работает,только если перед этим вызвать Workbooks.Open Filename:=file_name
XOPEK HAPKOMAH
ну если не в ФОРМУ (встроенную или пользовательскую) - тогда КУДА? если учесть, что надо ВЫБРАТь ...
ну в ЯЧЕЙКИ ... в столбик ... :u)
ну если не в ФОРМУ (встроенную или пользовательскую) - тогда КУДА? если учесть, что надо ВЫБРАТь ...
ну в ЯЧЕЙКИ ... в столбик ... :u)
Цитата:
ну если не в ФОРМУ (встроенную или пользовательскую) - тогда КУДА? если учесть, что надо ВЫБРАТь
Я получаю в переменной ссылку на файл, уже писал код:
Цитата:
file = Application.GetOpenFilename
Неужели нет функций наподобие, только чтоб более одного выбрать, можно теоретически результат в строковую переменную поместить( разделитель путей к файлу м.б. табуляция и т.п.) или массив.
Цитата:
хотелось бы использовать ctrl для выбора нескольких
Цитата:
в строковую переменную поместить или массив
если честно - НЕ понял ...
так выбор ВИЗУАЛЬНЫЙ или какой?
Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
Предыдущая тема: Написание своего HyperTerminal для считывания данных
Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.