Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Excel VBA (часть 2)

Автор: divik
Дата сообщения: 19.06.2007 07:18
AndVGri

Цитата:
Так чем помочь, что в коде не получается


............да нет вообще ничего....есть тока таблица в EXel..
....вот жду советов........
Автор: silver007
Дата сообщения: 19.06.2007 08:39

Цитата:
AndVGri

CStr убрал, но оно не мешало

Цитата:
vStroka As Long

сделал
Все равно пишет Run-Time Error '91':
Object variable or With blok variable not set



Добавлено:
все, сам победил
сделал
prm = Trim(CStr(Range("A15").Value))
и все заработало
Worksheets(1).Cells.Find(What:=prm,....
видно пробелы не любит
Автор: M_a_s_i_k
Дата сообщения: 19.06.2007 10:57
Народ отзовитесь в чем проблема очень надо разобраться Object doesn't support this action (Error 445)
Цитата:
Народ прошу помощи есть макрос который работает на Excel 2003 поставил Excel 2007
перестал работать выдает ошибку "Object doesn't support this action (Error 445)" вот на это "Set fs = Application.FileSearch"

Сам макрос Тут >>>
Заранее спасибо.



Автор: Diadema
Дата сообщения: 19.06.2007 11:28
Может уже где-то спрашивали.. Хотя вроде нет..
У меня появляется такая ошибка. Заношу данные в массив из Range
Faces = fData.Range("A$2:" & fData.Range("B:B").Columns.End(xlDown).Address).Value

Так вот, хотя все данные в этих строках типа String, но при указании массива Faces типа стринг появляется ошибка type mismatch, при variant все нормально. Если сделать variant и посмотреть значения все равно все значения будут variant/string.
Разница то вроде никакой, но все же как можно сделать, чтобы и при Faces As String все работало?
Автор: AndVGri
Дата сообщения: 19.06.2007 12:55
Diadema
Цитата:
при Faces As String

TypeName(Faces)
есть String
TypeName(fData.Range("A$2:" & fData.Range("B:B").Columns.End(xlDown).Address).Value)
есть Variant(), так что разница есть
И собственно, что ты хотел сделать? Сцепить все значения ячеек или получить массив значений? Если массив, то какая, собственно, разница считывать ли значения массива представленного Variant или из массива строк?
Автор: Diadema
Дата сообщения: 19.06.2007 13:09
Массив значений, ну да, разницы то нет. Значит если считывать range всегда будет значение типа Variant?
И еще вопрос такой, как найти адрес самого правого заполненного столбца в таблице с разным количеством заполненных строк, причем сразу неизвестно в какой строке будет наибольшее значение, и сколько строк в таблице.
Колличество строк высчитывается по формуле, что выше. И тем же способом вроде можно получить самый правый столбец, используя End(xlToRight).Address. Но это работает только если прямо указать нужную строку, если указать Range("A:J") например, или даже Range("A1:J500"), то данный способ не работает.
Вообще, таким образом можно получить этот столбец? Или только пройтись циклом по всем строкам, найти самый правый в каждый, затем найти наибольший среди них. Этот способ мне как-то не нравится..
Автор: AndVGri
Дата сообщения: 19.06.2007 13:30
Diadema

Цитата:
Значит если считывать range всегда будет значение типа Variant?

Не всегда, если обращение к одиночной ячейке, то Range("A1").Value может быть String, Double, Date, Currency

Цитата:
еще вопрос такой, как найти адрес самого правого заполненного столбца в таблице с разным количеством заполненных строк

Если под таблицей понимать область данных, где нет сквозных пропусков по строкам и столбцам (любая ячейка таблицы с данными имеет хотя бы одну соседнюю ячейку с даными, хотя бы по диагонали), то можно воспользоваться
LastCol = Cells(i, j).CurrentRegion.Columns.Count + Cell(i, j).CurrentRegion.Column - 1&
где i, j индексы строки/столбца ячейки, которая гарантированно находится внутри твоей таблицы
Автор: divik
Дата сообщения: 20.06.2007 13:42
Ребята как написать макрос по таким данным:
-в ячейке создал список работ
-выбираю одну работу
- и нужно чтобы характеристики которые относятся только к данной работе, они расположены в данных на другом листе(все данные всех работ),отразились в ячейках с право(включая формулы) в нескольких ячейках, т.к. характеристик несколько(числовые и текстовые)
Подкинте мыслю!!!!!!!
Автор: AndVGri
Дата сообщения: 20.06.2007 14:01
divik
Используй обработчик события изменения данных на этом листе

Код:
Private Sub Worksheet_Change(ByVal Target As Range)
'...
End Sub
Автор: M_a_s_i_k
Дата сообщения: 20.06.2007 14:46

Ребята кто разъяснит как теперь пользоваться FileSearch

это я нашёл в справки по Microsoft Office Excel 2007

Excel Developer Reference
Object Model Changes Since Microsoft Office 2003


The following is a summary of the changes in the Microsoft Office Excel 2007 object model as compared to Microsoft Office 2003.

Application

Properties Status

FileFind Hidden
FileSearch Hidden


Автор: AndVGri
Дата сообщения: 20.06.2007 16:36
M_a_s_i_k
Пиши свою реализацию, используя Microsoft Scripting Runtime для сканирования файлов папки и подпапок и Microsoft VBScript Regular Expressin для анализа по маске файлов.
Автор: divik
Дата сообщения: 21.06.2007 14:03
AndVGri

Цитата:
Код:
Private Sub Worksheet_Change(ByVal Target As Range)
'...
End Sub

поподробней или пример, пожалста!!!


Добавлено:
AndVGri

Цитата:
Код:
Private Sub Worksheet_Change(ByVal Target As Range)
'...
End Sub

поподробней или пример, пожалста!!!
Автор: sVx
Дата сообщения: 21.06.2007 15:03
Нашел здесь Надстройка Excel получения списка папок и файлов
помогите изменить, что бы выводил список папок(файлов) в виде гиперссылок.
Автор: AndVGri
Дата сообщения: 22.06.2007 05:59
divik
Идёшь сюда, выбираешь версия для печати и поиском по Worksheet_Change смотришь примеры.

sVx
Добавь

Код:
ActiveSheet.Hyperlinks.Add Anchor:=Range(NameListRange).Cells(m, 2), _
Address:=fl.Path, TextToDisplay:=fl.Name
Автор: nick7inc
Дата сообщения: 22.06.2007 16:35
Здравствуйте. Столкнулся с интересной проблемой.
Происходит зацикливание кода вычисления созданной мною функции для Excel

Вот её объявление (код большой, пока приводить не буду):

Код:
Public Function Area2(X_range As Range, Y_range As Range, Optional X_start As Double = 0, Optional X_end As Double = 0) As Variant
...
Автор: hackman
Дата сообщения: 22.06.2007 17:22
Ребята помогите написать макрос какой мог бы файл из текстового формата переводить в формат Excel
не знаю как обрабатывать у ВБА текстовые файлы
Подаю пример текстового файла
http://slil.ru/24546210
Автор: nick7inc
Дата сообщения: 25.06.2007 14:37
hackman
В принципе, не очень сложно. Хотя таблица в файле странная... ([more= читать дальше...]
Странности в приложенном файле
Почему-то отсутствует закрывающая правая граница в таблице в строчках с 3-9. Это ошибка или так на самом деле получается? Если да, то при каких условиях.
В таблице разделители столбцов 2х видов: вертикальная черта или восклицательный знак. Что это означает?
Объединять ячейки тоже надо?

[/more])
Автор: nick7inc
Дата сообщения: 26.06.2007 12:04
sVx

Цитата:
Нашел здесь Надстройка Excel получения списка папок и файлов

Список папок - вещь хорошая. В стандартном наборе Excell этого нет. А вот список файлов можно получать не обращением к скрипту, а встроенной в бейсик функцией DIR (если нужны только имена файлов).
Автор: Troitsky
Дата сообщения: 26.06.2007 15:18
nick7inc

Цитата:
А вот список файлов можно получать не обращением к скрипту, а встроенной в бейсик функцией DIR (если нужны только имена файлов).

вообще она и список папок может возвращать
Цитата:
Dir Function
Returns a String representing the name of a file, directory, or folder that matches a specified pattern or file attribute, or the volume label of a drive.
а используя FileLen(), FileDateTime() можно и свойства файлов узнать.
Автор: nick7inc
Дата сообщения: 26.06.2007 17:04
Troitsky
Не знал, спасибо. Нашёл GetAttr() для аттрибутов. Про список папок знаю (WinApi диалог выбор папки), к тому же этот код у меня отдельным фалом есть.
Автор: Anton T
Дата сообщения: 27.06.2007 08:56
Как сделать все листы(от А до Я) передать в Аксес? Мне срочно сделать это.
Автор: SERGE_BLIZNUK
Дата сообщения: 27.06.2007 11:27
Anton T
Цитата:
Как сделать все листы(от А до Я) передать в Аксес?

ну, если срочно, тогда позволю себе уточнящий вопрос:
а как один лист передать в Access ? (приведите код! или хотя бы последовательность действий...)
Автор: Anton T
Дата сообщения: 27.06.2007 12:04
SERGE_BLIZNUK
Молоток!!!
Лекция 6: Обмен данными
Способы передачи данных из MS ACCESS в Excel
Передача информации из Access в Excel
Автор: SERGE_BLIZNUK
Дата сообщения: 27.06.2007 12:50
Anton T
не понял, почему сразу "молоток".. ну да ладно...
всё приведённые статьи, это перенос (выгрузка) данных из MS Access в Excel.

А вам что надо то?!
и ещё, неплохо было бы выложить тестовую табличку с нужными Вам таблицами.

Автор: Oyger
Дата сообщения: 29.06.2007 14:59
Ребята. Вопрос:
У меня есть диапазон длинной 16 ячеек.
Хочу его забить в массив (длина анналогична).
Я знаю как это делать через цикл. А можно ли диапазон загнать в массив одной командой - без цикла.
А то цикл вроде не большой, а когда 56000 записей да еще несколько раз, то этот цикл выходит в очень приличное времечко.
Вот и думаю, а может можно его как сократить?
Кто что может сказать?
Автор: ferias
Дата сообщения: 30.06.2007 22:35
Подскажите пожалуйста. У меня вопрос: Пытаюсь следовать инструкциям, по книге Уокенбаха, програмирование в Exel 2002 на языке VBA(тестирую в Exel 2003), немогу выполнить макрос BubbleSort. Открываю окно Alt + F8, а в нем макрос BubbleSort отсутствует. Немогу разобратся в массивах. Может массив как-то по другому объявляют?

Код:
Sub SortSheets()
Dim SheetNames() As String
Dim i As Integer
Dim SheetCount As Integer
SheetCount = ActiveWorkbook.Sheets.Count
ReDim SheetNames(1 To SheetCount)
For i = 1 To SheetCount
SheetNames(i) = ActiveWorkbook.Sheets(i).Name
Next i
Call BubbleSort(SheetNames)
End Sub

Sub BubbleSort(List() As String)
'
Dim First As Integer, Last As Integer
Dim i As Integer, j As Integer
Dim Temp As String
First = LBound(List)
Last = UBound(List)
For i = First To Last - 1
For j = i + 1 To Last
If List(i) > List(j) Then
Temp = List(j)
List(j) = List(i)
List(i) = Temp
End If
Nextj
Nexti
End Sub
Автор: SERGE_BLIZNUK
Дата сообщения: 01.07.2007 12:29
ferias

Цитата:
Открываю окно Alt + F8, а в нем макрос BubbleSort отсутствует.

1) а Вы вставили текст макроса в книгу? (alt-F11 - двойной щелчок по "ЭтаКнига" и туда вставляете Ваш текст...)
После этого у меня в списке макросов появился макрос "SortSheets"
2) nextj nexti пишутся отдельно: next j next i
3) по поводу массивов ничего не могу сказать, но, раз обработка происходит, значит всё нормально, но вот только результат (который сортирует массив SheetNames (он же List)), , насколько я понимаю в коде, результаты никуда не помещаются...
Автор: ferias
Дата сообщения: 01.07.2007 16:05
SERGE_BLIZNUK
Огромное спасибо.
Цитата:
насколько я понимаю в коде, результаты никуда не помещаются...

Результат, в конце процидуры SortSheets можно отобразить в окно intermediate
код:
For i = 1 To SheetCount
Debug.Print SheetNames(i)
Next i
Моя ошибка в том, что, я думал, что BubbleSort, должен отображатся в списке макросов. Еще раз спасибо.
Автор: robinLib
Дата сообщения: 04.07.2007 19:48
Доброе время суток.
Подскажите пожалуйста следующие:
1. есть обьединенная ячейка, например орбьединяющая строки 1-3 листа Excel. Как узнать номер первой строки, которая обьеденена в эту ячейку? Дело в том что я могу перейти в эту ячейку с первой, второй и третей строки (Ячейка обьединяет только 1 столбец) и в этом случае свойство ROW ячейки будет различно. Как определить первую строку?
2. Как определить находится ли ячейка в выделенном диапазоне?
Автор: AndVGri
Дата сообщения: 05.07.2007 07:26
robinLib
1. Cells(i, j).MergeArea.Row
2. If Not (Application.Intersect(Cells(i, j), Selection) Is Nothing) Then ...

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133

Предыдущая тема: Написание своего HyperTerminal для считывания данных


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.