Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 03.02.2012
Сообщений: 23

Копирование данных с ексель в текстовый файл

14.01.2013, 02:00. Показов 2778. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброй ночи. Помогите плиз понять в чем ошибка.
Пишу прогу на VB 6.0, не могу с открытой книги скопироват определенный диапазон ячеек с данными в текстовый файл. Пишет ошибку Object required. Ниже код:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Private Sub Command1_Click()
    Dim oExcel As Object
    Dim oSheet
    Dim uT As Integer
Set oExcel = CreateObject("Excel.Application")           ' создаю объект ексель
oExcel.Workbooks.open("D:\Primer\2.xls").Activate      ' открываю файл
oExcel.Visible = True                                              ' отображаю
Set oSheet = oExcel.Workbooks("2.xls").WorkSheets(1)
uT = 11
oSheet.Range("H" & uT).Select                                'выделяю ячейку
oSheet.Cells(Rows.Count, "H").End(xlUp).Row             'тут хочу найти последнюю пустую ячейку, но мне выдает ошибку
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.01.2013, 02:00
Ответы с готовыми решениями:

Есть текстовый файл, первый символ каждой строки записать в другой текстовый файл
Есть текстовый файл, первый символ каждой строки записать в другой текстовый файл помогите в написании такой программы

Конец файла и Пренеос данных в ексель
что бы не создовать много новых тем решил все спросить в одном: 1. есть файл в конец файла надо вставить "End;". каким макаром...

Копирование данных из формы в текстовый файл
Нужна помощь. Есть PHP-страничка, на которой размещается поле для ввода данных и рядом кнопка "ОК". Задача такая -...

16
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18033 / 7736 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
14.01.2013, 02:15
Цитата Сообщение от malder_d Посмотреть сообщение
Visual Basic
oSheet.Range("H" & uT).Select
зачем? Быстрее будет работать, если ничего не выделять.
Цитата Сообщение от malder_d Посмотреть сообщение
Visual Basic
oSheet.Cells(Rows.Count, "H").End(xlUp).Row
Rows.Count - не указан объект, на который ссылаетесь.
Попробуйте так:
Visual Basic
oSheet.Cells(oSheet.Rows.Count, "H").End(xlUp).Row + 1
0
0 / 0 / 0
Регистрация: 03.02.2012
Сообщений: 23
14.01.2013, 15:11  [ТС]
не получается (((, теперь выдает такую ошибку
Run-time error '1004'
Application-defined or object-defined error/
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18033 / 7736 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
15.01.2013, 01:22
Да у Вас там еще куча ошибок.

1) Напишите первой строкой программы (вне Sub) команду:
Visual Basic
Option Explicit
Необъявленные переменные, несуществующие методы будут указаны Вам компилятором перед исполнением кода.

2) Используете Select, а зачем. Но если используете, нужно убедится: перед выделением ячейки, что лист, на которой она находится активирован.
Visual Basic
oSheet.activate
Но еще раз повторю - незачем это все делать. Какая вообще задача?

3) Метод .Row - что делает - возвращает значение. Куда? - А некуда. Где переменная?
Visual Basic
1
2
Dim n&
n = oSheet.Cells(oSheet.Rows.Count, "H").End(-4162).Row + 1
4) Если используете Excel-евские константы (те, что с приставкой xl) либо делайте Reference на его объектную модель - Вид (View) - Reference (Информация)

Не по теме:

убил бы переводчика ]:->

Microsoft Excel 11 object library.
Либо используйте числовые константы. Заходите в программу Excel, ALT+F11, View -> Immediate Window -> Ввести в окно ?xlup -> нажать {ENTER}, получите число -4162.
1
0 / 0 / 0
Регистрация: 03.02.2012
Сообщений: 23
16.01.2013, 01:34  [ТС]
Огромное спасибо !!!!!! Получилось.

Добавлено через 23 часа 24 минуты
Не долго моя радость длилась. После того как получил начение пустой ячейки столбца H и присвоив переменной n, почему то дальше не получается скопировать диапазон ячеек, при том всем если ставлю запись так
Visual Basic
oSheet.Range("H11:H13").Copy 'получается
а если запись
Visual Basic
oSheet.Range("H11:H & n").Copy ' то выдает ошибку
В чем моя ошибка, почему не могу использовать данную запись.
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18033 / 7736 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
16.01.2013, 03:18
Visual Basic
oSheet.Range("H11:H" & n).Copy
0
Заблокирован
16.01.2013, 16:16
Цитата Сообщение от Dragokas Посмотреть сообщение
убил бы переводчика
Google траслит. Они так переводят.
0
0 / 0 / 0
Регистрация: 03.02.2012
Сообщений: 23
16.01.2013, 18:21  [ТС]
Цитата Сообщение от Dragokas Посмотреть сообщение
Visual Basic
oSheet.Range("H11:H" & n).Copy
Всеравно не получается такой вариант, выдает ошибку
Run-time error '1004'
Application-defined or object-defined error/
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18033 / 7736 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
16.01.2013, 18:40
Выложите Вашу задачу полностью. Так и будем играть в кошки-мышки.
0
0 / 0 / 0
Регистрация: 03.02.2012
Сообщений: 23
16.01.2013, 20:34  [ТС]
Цитата Сообщение от Dragokas Посмотреть сообщение
Выложите Вашу задачу полностью. Так и будем играть в кошки-мышки.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Private Sub Command1_Click()
    Dim oExcel As Object
    Dim oSheet As Object
    Dim uT As Integer
    Dim n As Integer
Set oExcel = CreateObject("Excel.Application")
oExcel.Workbooks.Open("D:\Primer\2.xls").Activate
oExcel.Visible = True
Set oSheet = oExcel.Workbooks("2.xls").Worksheets(1)
uT = 11                                                                 ' переменная для начала выделение диапаона
n = oSheet.Cells(oSheet.Rows.Count, "H").End(xlUp).Row - 2  ' находим посленюю заполненную ячейку в столбце Н
oSheet.Range("H11:H" & n).Copy ' здесь пытаюсь скопировать диапазон, но мне выдает ошибку. см. выше.
' дальше если получится скопировать диапазон, хочу вставить данные в текстовый файл например [url]www.txt[/url]
End Sub
0
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
16.01.2013, 22:03
Чему равно n? Поставьте Msgbox n перед 12 строкой.
0
0 / 0 / 0
Регистрация: 03.02.2012
Сообщений: 23
16.01.2013, 23:34  [ТС]
Цитата Сообщение от Казанский Посмотреть сообщение
Чему равно n? Поставьте Msgbox n перед 12 строкой.
n равно 13

Добавлено через 49 минут
получилось, записал строку таким образом

Visual Basic
1
oSheet.Range("H" & uT & ":" & "H" & n).Copy
Но теперь другая беда, а как же скопированные данные вставить в текстовый файл?
0
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
16.01.2013, 23:41
А для этого их копировать и не надо
Почитайте справку по операторам Open, Print #, Close, или поищите по форуму в разделах VB, VBA.
0
0 / 0 / 0
Регистрация: 03.02.2012
Сообщений: 23
16.01.2013, 23:47  [ТС]
Цитата Сообщение от Казанский Посмотреть сообщение
А для этого их копировать и не надо
Почитайте справку по операторам Open, Print #, Close, или поищите по форуму в разделах VB, VBA.
Я то знаю как ими пользоватся, просто у меня вопрос, если просто открыть ексель, скопировать диапазон с данными и потом открыть текстовый файл и вставить, то все красиво получается, а на VB можно так сделать? или так просто не получится )
0
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
17.01.2013, 01:13
Цитата Сообщение от malder_d Посмотреть сообщение
и потом открыть текстовый файл
В чем открыть? Если в Блокноте, то он не имеет API, т.е. им нельзя управлять программно, как Экселем. Можно через SendKeys или имитацию кликов мыши, но это муторно и ненадежно.
Кстати, можно в Экселе создать новую книгу, вставить туда диапазон и сохранить как текст
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18033 / 7736 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
17.01.2013, 18:57
Да тут никакого API и не нужно.
TXT-файл не имеет ни хидера, ни какого-либо специфического форматирования при дефолтовой кодировке.
Просто бери и записывай в файл.

Visual Basic
1
2
3
4
5
6
7
dim ff%
ff = freefile()
open "c:\file.txt" for output as #ff
for n = 11 to n
  print #ff, oSheet.Cells(n, "H")
next
close #ff
или
Visual Basic
1
2
3
4
5
6
7
dim ff%, RA as object
ff = freefile()
open "c:\file.txt" for output as #ff
for each RA in oSheet.Range("H11:H" & n).Cells
  print #ff, Ra.value
next
close #ff
0
0 / 0 / 0
Регистрация: 03.02.2012
Сообщений: 23
17.01.2013, 19:44  [ТС]
Спасибо, так и буду делать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.01.2013, 19:44
Помогаю со студенческими работами здесь

Копирование в текстовый файл
Друзья, кто когда-нибудь имел дело с программой Excel ? Подскажите, как копировать оттуда данные в обычный текстовый файл открываемый...

Копирование в буфер и вывод в текстовый файл
Как при нажатии на button1 скопировать содержимое textBox1 и textBox2 в буфер обмена? И как при нажатии на этот-же button1 сохранить...

Копирование чисел из экселя в текстовый файл
Доброго времени суток! Появилась задача копирования чисел в текстовый файл в определенной последовательности, количество цифр и через...

Копирование написанного кода в текстовый файл
Здравствуйте! Подскажите пожалуйста как реализовать следующую задачу: Есть код, например сложение 2х чисел, я хочу функцию, при вызове...

Копирование строк в новый текстовый файл
Создать текстовый файл Verde.txt в который скопируются строки с входного текстового файла, строки об фигурах с зеленым цветом. Вот мой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru