Страницы: 1
RSS
Таблица для переноса данных
 
Здравствуйте уважаемые знатоки!!! Помогите мне пожалуйта решить проблему, которая стоит как кость в горле: имеется таблица1 с 13 строчками: просьба-там где пусто в этой таблице, должно комплектовать в отдельную таблицу2. Сбрасываю ниже ту самую таблицу, о которой идёт речь выше. Слезно прошу, стоя на коленях, помогите пожалуйста!!!!!
 
Макросом. Обратите внимание на расположение данных на Лист1
 
Непонятно на что обратить внимание, для примера был сброшен вариант, потому как колонки могут добавляться и расширяться в макросах не очень силен и что то редактировать будет достаточно сложно, потому может вариант обычными и привычными формулами. А так макрос работает Вам anvg респект и уважуха!
 
Public Sub GetEmptyTable()  
   Dim sConn As String, pConn As New ADODB.Connection  
   Dim sSQL As String, pRSet As New ADODB.Recordset  
   Dim pSheet As Excel.Worksheet  
   sConn = "Provider=Microsoft.ACE.OLEDB.12.0;Mode=Read;Data Source=" & ThisWorkbook.FullName  
   sConn = sConn & ";Extended Properties=""Excel 12.0;HDR=NO"";"  
   pConn.Open sConn  
   pRSet.Open "Select f2 f3 From [Книга1$] Where f1 is Null", pConn
   Set pSheet = ThisWorkbook.Worksheets.Add  
   pSheet.Range("A1").CopyFromRecordset pRSet  
   pRSet.Close: pConn.Close  
End Sub  
 
где в макросе поменять или расширить диапазон а именно:"Select f2 f3 From это для столбцов B и С добавить диапазон D E F либо выборочный B D F
 
Ничего там "страшного" нет. Требования простые, чтобы таблица выглядела, как в выбранном файле. То есть данные начинаются с перовой строки без заголовка и с первого столбца. Ничего лишнего не относящегося к этой информации быть не должно.  
Теперь по поводу добавления столбцов - самое главное в этом маркосе эта строка.  
"Select f2,f3 From [Лист11$] Where f1 is Null"
где f1,f2,f3 и т. д. номера столбцов таблицы. Их порядок после Select можете указать свой по смыслу вывода (для это примера можно было изменить на f3,f2).  
Запись  
f1 is Null    
означает выбарать только те строки таблицы, где столбцец f1 (при изменении можете заменить на необходимый номер) имеет только пустые значения.  
[Лист11$]
Как вы догадались - название листа таблицы, должно заканчиваться знаком $
 
добавил f4 и выдало ошибку
 
Естественно же. Столбец D совершенно пустой. В пределах 20 строк должно быть хотя бы одно значение, чтобы ADO мог определить тип данных в столбце. В этом отчасти и сложность использования ADO с Excel. Лучше бы у вас таблица имела хоть какие-нибудь заговоки (неповторяющиеся) в первой строке листа. Тогда при 20 пустых строках ADO считало бы содержимым этого столбца текст.  
>>D E F  
"Select f2,f3,f4,f5,f6 From [Книга1$] Where f1 is Null"
У вас дейстительно лист назвывается Книга1? Если нет, то введите правильное название.
 
Если решите делать в первой строке листа названия столцов, то измените строку  
sConn = sConn & ";Extended Properties=""Excel 12.0;HDR=NO"";"  
поменяйте NO на YES  
И запрос select будет использовать эти назавния, вместо номеров столбцов с приставкой f (допустим по вашему примеру в первой сроке в три столбца введено: Ответ, Диаметр, Продукт), то запрос изменится  
Select [Диаметр],[Продукт] From [Лист1$] Where [Ответ] is Null
 
по кол-ву увеличения ячеек получилось а по созданию наименований не получилось, где собака зарыта?
 
Или я плохо объясняю, или вы не внимательны  
Вот так
 
Дело в том что я перепутал и предполагал что на новом листе создаст шапку с теми названиями. Спасибо! сейчас буду кумекать под свою таблицу.
 
а все таки можно чтоб в новый лист переносило с шапкой?
 
Set pSheet = ThisWorkbook.Worksheets.Add  
pSheet.Range("A1").CopyFromRecordset pRSet  
Поменяйте на  
Set pSheet = ThisWorkbook.Worksheets.Add  
'Для четырёх названий столбцов  
pSheet.Range("A1:D1").Value = Array("Имя1","Имя2","Имя3","Имя4")  
pSheet.Range("A2").CopyFromRecordset pRSet
 
На самом деле можно и с шапкой, но много дольше объяснять ;-)
 
А чтоб исходное форматирование столбцов переносило? это как
 
Увы, в лоб это не возможно. Макрос работает с листом как с базой данных.  
Можно воспользоваться обходным путём. Создать книгу с одним листом с подготовленным форматированием столбцов, включая шапку (естественно, тогда можно будет убрать строчку pSheet.Range("A1:D1").Value = Array("Имя1","Имя2","Имя3","Имя4") из макроса). Сохраняем книгу.  
Затем меняем  
Set pSheet = ThisWorkbook.Worksheets.Add  
на  
Set pSheet = ThisWorkbook.Sheets.Add Type:="d:\path\bookname.xlsx"  
Где, думаю понятно, d:\path\bookname.xlsx путь и имя файла, сохранённой выше книги.
Страницы: 1
Читают тему
Наверх