Товарищи, дайте хотя бы ссылку, где можно скачать нормальный контрол типа листбокса, чтобы там можно было с сеткой работать. А то создавать собственный как-то не хочется - наверняка уже кто-то делал.
» Excel VBA
Господин-профессионалист Yuk!
Вот сделал немного пример:
Код: Private Sub UserForm_Initialize()
Dim strAA As String
Dim ls As Worksheet
For Each ls In Worksheets
strAA = ls.Range("A1") 'Application.WorksheetFunction.CountA(ls.Range("A:A"))
ListBox1.AddItem strAA
Next
End Sub
Вот сделал немного пример:
Код: Private Sub UserForm_Initialize()
Dim strAA As String
Dim ls As Worksheet
For Each ls In Worksheets
strAA = ls.Range("A1") 'Application.WorksheetFunction.CountA(ls.Range("A:A"))
ListBox1.AddItem strAA
Next
End Sub
Anton T
а ты точно ТАК код написал? Просто в таком виде
Цитата:
'Application.WorksheetFunction.CountA(ls.Range("A:A")) должно восприниматься, как комментарий . Следовательно, остается строка кода: strAA = ls.Range("A1")
Если в ней меняем A1 на А:А (кстати, проверь - чтобы были латинские), Range уже не прокатит, поскольку будет в качестве результата давать не ячейку (читай - value, которое приводится к строковому типу), а именно Range (столбец), который не приводится к строковому типу .
В общем, процитируй код В ТОЧНОСТИ, как он у тебя записан в VBA.
а ты точно ТАК код написал? Просто в таком виде
Цитата:
strAA = ls.Range("A1") 'Application.WorksheetFunction.CountA(ls.Range("A:A"))
'Application.WorksheetFunction.CountA(ls.Range("A:A")) должно восприниматься, как комментарий . Следовательно, остается строка кода: strAA = ls.Range("A1")
Если в ней меняем A1 на А:А (кстати, проверь - чтобы были латинские), Range уже не прокатит, поскольку будет в качестве результата давать не ячейку (читай - value, которое приводится к строковому типу), а именно Range (столбец), который не приводится к строковому типу .
В общем, процитируй код В ТОЧНОСТИ, как он у тебя записан в VBA.
Цитата:
должно восприниматься, как комментарий
знаю, если убрать апостроф и
Цитата:
ls.Range("A1")и видишь.
Цитата:
Если в ней меняем A1 на А:А (кстати, проверь - чтобы были латинские)
все латинские.
Цитата:
(читай - value, которое приводится к строковому типу), а именно Range (столбец), который не приводится к строковому типу
а понял, продложение следует...
Anton T
не факт, что правильно понял мысль, но попробуй так:
Код:
strAA = CStr(Application.WorksheetFunction.CountA(ls.Columns(1)))
не факт, что правильно понял мысль, но попробуй так:
Код:
strAA = CStr(Application.WorksheetFunction.CountA(ls.Columns(1)))
Yuk
Огромное спасибо! Все великолепно работает надеюсь, если у меня еще появятся вопросы - я смогу их задать
Огромное спасибо! Все великолепно работает надеюсь, если у меня еще появятся вопросы - я смогу их задать
еще вопрос:
для правильного запроса пишем:
Код: sSQL_t = "SELECT * FROM tovar where tovar.***=" & c1
для правильного запроса пишем:
Код: sSQL_t = "SELECT * FROM tovar where tovar.***=" & c1
aalleexxaa
Цитата:
А если не подправлять? Или подправить неестественно
В общем, рекомендую подучить SQL.
Добавлено:
mrdime
В Access можно экспортировать любую таблицу/запрос в Excel.
Если нужно экспортировать много таблиц или все, можно записать макрос.
Цитата:
естественно подправив
А если не подправлять? Или подправить неестественно
В общем, рекомендую подучить SQL.
Добавлено:
mrdime
В Access можно экспортировать любую таблицу/запрос в Excel.
Если нужно экспортировать много таблиц или все, можно записать макрос.
Всем привет
есть строчки .и.т.д
8426 УСТАНОВКА 2 32988576,00
18289440,32
160360 УCTAHOBKA 1 639191,00
551819,16
как итог подсчитать по строкам где есть наименование и где нету.
Подскажите макрос.
есть строчки .и.т.д
8426 УСТАНОВКА 2 32988576,00
18289440,32
160360 УCTAHOBKA 1 639191,00
551819,16
как итог подсчитать по строкам где есть наименование и где нету.
Подскажите макрос.
Widoms
Пустые можно подсчитать так:
=СУММЕСЛИ($A$1:$A$4;"";$B$1:$B$4)
А непустые ... ну, например, вычесть итог по пустым из общей суммы.
Или обязательно надо макрос?
Пустые можно подсчитать так:
=СУММЕСЛИ($A$1:$A$4;"";$B$1:$B$4)
А непустые ... ну, например, вычесть итог по пустым из общей суммы.
Или обязательно надо макрос?
Yuk
Ты с ListView случайно не работал? Из того, что у меня под рукой, только этот контрол делает на форме список с границами.
Как тут добавлять/удалять элементы?
Ты с ListView случайно не работал? Из того, что у меня под рукой, только этот контрол делает на форме список с границами.
Как тут добавлять/удалять элементы?
The okk
Неа. Посмотри в гугле, полно примеров, если это он самый, конечно.
Неа. Посмотри в гугле, полно примеров, если это он самый, конечно.
Yuk
Искал я в гугле. Только, когда открываю в обжект броузере этот ListView, не вижу там ни LV_add, ни ListViewItem, ничего, хотя бы отдаленно напоминающего add. Также тут нет ни намека на source и Items. Полный тупик.
Добавлено:
Стоп. Нашел . ListItems у него есть, а уж в нем Item'ы прячутся.
Добавлено:
Yuk
А не знаешь, можно сделать список значений из ссылок? - Чтобы при выборе (данные-проверка-список значений) в ячейке выбиралось бы не конкретное значение, а ссылка?
Т.е., например, столбец состоит из записей:
значение1
значение2
значение3
Если при проверке данных сослаться на этот столбец, подставляться будет именно значение, а я хочу, чтобы подставлялась ссылка на ячейку, где лежит это значение.
Это возможно?
Искал я в гугле. Только, когда открываю в обжект броузере этот ListView, не вижу там ни LV_add, ни ListViewItem, ничего, хотя бы отдаленно напоминающего add. Также тут нет ни намека на source и Items. Полный тупик.
Добавлено:
Стоп. Нашел . ListItems у него есть, а уж в нем Item'ы прячутся.
Добавлено:
Yuk
А не знаешь, можно сделать список значений из ссылок? - Чтобы при выборе (данные-проверка-список значений) в ячейке выбиралось бы не конкретное значение, а ссылка?
Т.е., например, столбец состоит из записей:
значение1
значение2
значение3
Если при проверке данных сослаться на этот столбец, подставляться будет именно значение, а я хочу, чтобы подставлялась ссылка на ячейку, где лежит это значение.
Это возможно?
Yuk
"Штатных" средств для экспорта таблиц из Excel в Access нет. Есть надстройка AccessLink, но по ряду причин она мне не подходит.
Задача состоит в следующем: Есть таблицы с полностью одинаковой структурой в Excel которые периодически необходимо экспортировать в Access. В Access создан набор запросов который нужным образом анализирует данные из этих таблиц. Для этого мне необходимо хотя бы узнать синтаксис основных команд по созданию таблиц, баз Access из Excel на VBA.
"Штатных" средств для экспорта таблиц из Excel в Access нет. Есть надстройка AccessLink, но по ряду причин она мне не подходит.
Задача состоит в следующем: Есть таблицы с полностью одинаковой структурой в Excel которые периодически необходимо экспортировать в Access. В Access создан набор запросов который нужным образом анализирует данные из этих таблиц. Для этого мне необходимо хотя бы узнать синтаксис основных команд по созданию таблиц, баз Access из Excel на VBA.
The okk
Я понимаю, но мне счет не нужен, а список строк имени.
Yuk
Как думаешь сделать список имен? Если не трудно, пиши.
Я понимаю, но мне счет не нужен, а список строк имени.
Yuk
Как думаешь сделать список имен? Если не трудно, пиши.
Anton T
Что такое "список строк имени"?
Добавлено:
Изучаю контрол ListView. Хорошая вещь. Кому не хватает ListBox'а - рекомендую. Кто-нибудь знает, как сюда добавить сразу диапазон ячеек, а не по одной их втыкать через ListItems.Add?
Что такое "список строк имени"?
Добавлено:
Изучаю контрол ListView. Хорошая вещь. Кому не хватает ListBox'а - рекомендую. Кто-нибудь знает, как сюда добавить сразу диапазон ячеек, а не по одной их втыкать через ListItems.Add?
mrdime
Создай модуль КЛАССА и имением:
[more=CSVFileClass]
Код: Option Explicit
'CSVFileClass
'''''''''''''
'СВОЙСТВА
' ExportRange
' ImportRange
'МЕТОДЫ
' Import
' Export
Private RangeToExport As Range
Private ImportToCell As Range
Property Get ExportRange() As Range
Set ExportRange = RangeToExport
End Property
Property Let ExportRange(rng As Range)
Set RangeToExport = rng
End Property
Property Get ImportRange() As Range
Set ImportRange = ImportToCell
End Property
Property Let ImportRange(rng As Range)
Set ImportToCell = rng
End Property
Sub Export(CSVFileName)
' Экспортирует диапазон в файл DBF
Dim ExpBook As Workbook
If RangeToExport Is Nothing Then
MsgBox "Экспортируемый диапазон не определен"
Exit Sub
End If
On Error GoTo ErrHandle
Application.ScreenUpdating = False
Set ExpBook = Workbooks.Add(xlWorksheet)
RangeToExport.Copy
Application.DisplayAlerts = False
With ExpBook
.Sheets(1).Paste
.SaveAs FileName:=CSVFileName, FileFormat:=xlDBF4
.Close SaveChanges:=False
End With
Application.CutCopyMode = False
Application.ScreenUpdating = True
Application.DisplayAlerts = True
Exit Sub
ErrHandle:
ExpBook.Close SaveChanges:=False
Application.CutCopyMode = False
Application.ScreenUpdating = True
Application.DisplayAlerts = True
MsgBox "ОШИБКА " & Err & vbCrLf & vbCrLf & Error(Err), _
vbCritical, "Ошибка метода экспортирования"
End Sub
Sub Import(CSVFileName)
' Импортирует файл DBF в диапазон
Dim CSVFile As Workbook
If ImportToCell Is Nothing Then
MsgBox "Диапазон для импорта не определен"
Exit Sub
End If
If CSVFileName = "" Then
MsgBox "Не определено имч импортируемого файла"
Exit Sub
End If
On Error GoTo ErrHandle
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Workbooks.Open CSVFileName
Set CSVFile = ActiveWorkbook
ActiveSheet.UsedRange.Copy Destination:=ImportToCell
CSVFile.Close SaveChanges:=False
Application.ScreenUpdating = True
Application.DisplayAlerts = True
Exit Sub
ErrHandle:
CSVFile.Close SaveChanges:=False
Application.ScreenUpdating = True
Application.DisplayAlerts = True
MsgBox "ОШИБКА " & Err & vbCrLf & vbCrLf & Error(Err), _
vbCritical, "Ошибка метода импортирования"
End Sub
Создай модуль КЛАССА и имением:
[more=CSVFileClass]
Код: Option Explicit
'CSVFileClass
'''''''''''''
'СВОЙСТВА
' ExportRange
' ImportRange
'МЕТОДЫ
' Import
' Export
Private RangeToExport As Range
Private ImportToCell As Range
Property Get ExportRange() As Range
Set ExportRange = RangeToExport
End Property
Property Let ExportRange(rng As Range)
Set RangeToExport = rng
End Property
Property Get ImportRange() As Range
Set ImportRange = ImportToCell
End Property
Property Let ImportRange(rng As Range)
Set ImportToCell = rng
End Property
Sub Export(CSVFileName)
' Экспортирует диапазон в файл DBF
Dim ExpBook As Workbook
If RangeToExport Is Nothing Then
MsgBox "Экспортируемый диапазон не определен"
Exit Sub
End If
On Error GoTo ErrHandle
Application.ScreenUpdating = False
Set ExpBook = Workbooks.Add(xlWorksheet)
RangeToExport.Copy
Application.DisplayAlerts = False
With ExpBook
.Sheets(1).Paste
.SaveAs FileName:=CSVFileName, FileFormat:=xlDBF4
.Close SaveChanges:=False
End With
Application.CutCopyMode = False
Application.ScreenUpdating = True
Application.DisplayAlerts = True
Exit Sub
ErrHandle:
ExpBook.Close SaveChanges:=False
Application.CutCopyMode = False
Application.ScreenUpdating = True
Application.DisplayAlerts = True
MsgBox "ОШИБКА " & Err & vbCrLf & vbCrLf & Error(Err), _
vbCritical, "Ошибка метода экспортирования"
End Sub
Sub Import(CSVFileName)
' Импортирует файл DBF в диапазон
Dim CSVFile As Workbook
If ImportToCell Is Nothing Then
MsgBox "Диапазон для импорта не определен"
Exit Sub
End If
If CSVFileName = "" Then
MsgBox "Не определено имч импортируемого файла"
Exit Sub
End If
On Error GoTo ErrHandle
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Workbooks.Open CSVFileName
Set CSVFile = ActiveWorkbook
ActiveSheet.UsedRange.Copy Destination:=ImportToCell
CSVFile.Close SaveChanges:=False
Application.ScreenUpdating = True
Application.DisplayAlerts = True
Exit Sub
ErrHandle:
CSVFile.Close SaveChanges:=False
Application.ScreenUpdating = True
Application.DisplayAlerts = True
MsgBox "ОШИБКА " & Err & vbCrLf & vbCrLf & Error(Err), _
vbCritical, "Ошибка метода импортирования"
End Sub
Anton T
хм... прочитал. Есть листы с названиями от А до Б. там в первом столбце фамилии, начинающиеся с это буквы. Надо вывести список всех фамилий. Так?
А в чем проблема? Твой код именно это и делает.
Только вместо обращения к первой ячейке (A1) надо пройтись по всем ячейкам:
Код:
Private Sub UserForm_Initialize()
Dim strAA As String
Dim RowCounter As Long
Dim ls As Worksheet
For Each ls In Worksheets
For RowCounter = 1 To ls.UsedRange.Rows.Count
strAA = ls.Cells(RowCounter, 1)
ListBox1.AddItem strAA
Next
Next
End Sub
хм... прочитал. Есть листы с названиями от А до Б. там в первом столбце фамилии, начинающиеся с это буквы. Надо вывести список всех фамилий. Так?
А в чем проблема? Твой код именно это и делает.
Только вместо обращения к первой ячейке (A1) надо пройтись по всем ячейкам:
Код:
Private Sub UserForm_Initialize()
Dim strAA As String
Dim RowCounter As Long
Dim ls As Worksheet
For Each ls In Worksheets
For RowCounter = 1 To ls.UsedRange.Rows.Count
strAA = ls.Cells(RowCounter, 1)
ListBox1.AddItem strAA
Next
Next
End Sub
Anton T
Цитата:
Ты не прав.
http://www.citforum.ru/programming/digest/excel_vba.shtml#3
К сожалению этот кусок кода у меня почему-то не работает, но очевидно из-за того, что я сразу переделал его под свои нужды и что-то не учел или же он со старта написан с ошибками.
Вопрос остается открытым...
Цитата:
З.Ы. Ексел не експортируют Аксесс(mdb)!
Ты не прав.
http://www.citforum.ru/programming/digest/excel_vba.shtml#3
К сожалению этот кусок кода у меня почему-то не работает, но очевидно из-за того, что я сразу переделал его под свои нужды и что-то не учел или же он со старта написан с ошибками.
Вопрос остается открытым...
mrdime
Извиняюсь, стормозил. ДУмал про экспорт в обратную сторону.
Рекомендую посмотреть книжку Integrating Excel and Access.
Я здесь давал недавно ссылку.
http://forum.ru-board.com/topic.cgi?forum=93&topic=0461&start=120#5
Если уже затерли, сообщи.
Добавлено:
Anton T
По-моему, тебе The okk уже ответил. Или не устраивает?
Добавлено:
The okk
А где этот ListView можно взять?
Извиняюсь, стормозил. ДУмал про экспорт в обратную сторону.
Рекомендую посмотреть книжку Integrating Excel and Access.
Я здесь давал недавно ссылку.
http://forum.ru-board.com/topic.cgi?forum=93&topic=0461&start=120#5
Если уже затерли, сообщи.
Добавлено:
Anton T
По-моему, тебе The okk уже ответил. Или не устраивает?
Добавлено:
The okk
А где этот ListView можно взять?
Есть Help для VBA Office2003 на русском языке?
Yuk
Устраиваю, но не все, там 1 столбец по фамилию и все, а надо все - имя, отечество и т.д.
Устраиваю, но не все, там 1 столбец по фамилию и все, а надо все - имя, отечество и т.д.
Anton T
Что-то я совсем запутался, что тебе надо.
Давай еще раз, с начала и поподробнее.
Если долго объяснять, может файл выложишь?
Что-то я совсем запутался, что тебе надо.
Давай еще раз, с начала и поподробнее.
Если долго объяснять, может файл выложишь?
Yuk
Это майкрософтовский контрол, он у тебя должен быть. Лежит в system32\mscomctl.ocx
В VBA заходишь в tools - additional controls и там будет "Microsoft Listview Control" (у меня 6-я версия).
Добавлено:
Anton T
Т.е. в листах фамилия, имя и отчество в разных столбцах, а надо, чтобы в листбоксе было все в одном столбце - и имя и отчество и фамилия?
Тогда используй конкатенацию. Вместо strAA = ls.Cells(Rowcounter,1) пиши:
Код:
strAA = ls.Cells(Rowcounter,1) & " " & ls.Cells(Rowcounter,2) & " " & ls.Cells(Rowcounter,3)
Это майкрософтовский контрол, он у тебя должен быть. Лежит в system32\mscomctl.ocx
В VBA заходишь в tools - additional controls и там будет "Microsoft Listview Control" (у меня 6-я версия).
Добавлено:
Anton T
Т.е. в листах фамилия, имя и отчество в разных столбцах, а надо, чтобы в листбоксе было все в одном столбце - и имя и отчество и фамилия?
Тогда используй конкатенацию. Вместо strAA = ls.Cells(Rowcounter,1) пиши:
Код:
strAA = ls.Cells(Rowcounter,1) & " " & ls.Cells(Rowcounter,2) & " " & ls.Cells(Rowcounter,3)
The okk
спасибо!
Цитата:
ок.
Yuk
вот The okk он написал, правильно!
Добавлено:
Еще есть один вопрос. Как можно преобразовать 6420/43 в 6420 и 43?
спасибо!
Цитата:
хотя, лучше не ставить каждый раз ls., а использовать With
ок.
Yuk
вот The okk он написал, правильно!
Добавлено:
Еще есть один вопрос. Как можно преобразовать 6420/43 в 6420 и 43?
Anton T
Идея там примерно такая:
Код:
Sub SplitNum(BaseNum As String) 'берем базовую строку
Dim FirstNum As Integer, SecondNum As Integer 'ее будем разделять на 2 числа
FirstNum = CInt(Left(BaseNum, InStr(1, BaseNum, "/") - 1)) 'первое число - это
' первые N-1 символов базовой строки, где N - номер символа "/" в базовой строке
SecondNum = CInt(Right(BaseNum, Len(BaseNum) - InStr(1, _
BaseNum, "/"))) 'второе число - это все, что после знака дроби.
End Sub
Идея там примерно такая:
Код:
Sub SplitNum(BaseNum As String) 'берем базовую строку
Dim FirstNum As Integer, SecondNum As Integer 'ее будем разделять на 2 числа
FirstNum = CInt(Left(BaseNum, InStr(1, BaseNum, "/") - 1)) 'первое число - это
' первые N-1 символов базовой строки, где N - номер символа "/" в базовой строке
SecondNum = CInt(Right(BaseNum, Len(BaseNum) - InStr(1, _
BaseNum, "/"))) 'второе число - это все, что после знака дроби.
End Sub
The okk
Куда вставлять? в модуле, да и не запускается макрос?
Я так понял, в стольбце Н имеется 6420/43, надо разделять 6420 на столбце Н и 43 на столбце I. Правда, в строке много числовой записи надо разделять.
Куда вставлять? в модуле, да и не запускается макрос?
Я так понял, в стольбце Н имеется 6420/43, надо разделять 6420 на столбце Н и 43 на столбце I. Правда, в строке много числовой записи надо разделять.
Anton T
в ТАКОМ виде - никуда. Смысла нет - даже если на вход ты что-то и дашь, процедура только изменит свои внутренние переменные. А вот если в этот код вставить доп. действия по размещению результата в ячейке или форме, тогда - другое дело.
Ты скажи толком, откуда брать эту дробь и куда совать её компоненты. Тогда напишу частное решение.
в ТАКОМ виде - никуда. Смысла нет - даже если на вход ты что-то и дашь, процедура только изменит свои внутренние переменные. А вот если в этот код вставить доп. действия по размещению результата в ячейке или форме, тогда - другое дело.
Ты скажи толком, откуда брать эту дробь и куда совать её компоненты. Тогда напишу частное решение.
Yuk
Книга судя по всему отменная, но ссылки - мертвые.
На Рапиде файл грохнули.
2-я открывает архив .rar к скачиванию, но ничего не качается - Браузер выдает, что сервер недоступен.
3-я (на зеркале) - выдает какую-то билиберду с просьбой регистрации, причем ни тени намека на нужный мне файл.
Книга судя по всему отменная, но ссылки - мертвые.
На Рапиде файл грохнули.
2-я открывает архив .rar к скачиванию, но ничего не качается - Браузер выдает, что сервер недоступен.
3-я (на зеркале) - выдает какую-то билиберду с просьбой регистрации, причем ни тени намека на нужный мне файл.
mrdime
_http://fileho.com/download/cf52fe879187/iea.zip.html
_http://fileho.com/download/cf52fe879187/iea.zip.html
Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
Предыдущая тема: Стоит ли переходить с Билдера на Делфи?
Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.