Экспорт фиксированного диапазона данных в файл

Автор Toha153, 27.08.2013, 00:32

« назад - далее »

Toha153

Добрый вечер! Задача такая:
Имеется макрос отправки данных из заданного диапазона  на листе "главный". Проблема в том, что при вызове с любого другого листа  выдается ошибка.
Требуется реализовать отправку данных вне зависимости от того, какой лист активен, не переключаясь при этом на лист "главный" . Прилагаю файл с примером ниже...
Подскажите плиз, что там нужно подправить? А то чувствую долго еще буду тыкать в кнопки, нет знаний таких.

GWolf

Доброго дня!

На мой взгляд, вот так:
Sub Export()
    Dim Filename As String, link As String, Day As String
    Dim NumRows As Long, NumCols As Integer
    Dim r As Long, c As Integer
    Dim Data
    Dim rnge As Range, ExpRng As Range
   
    Set ExpRng = Worksheets("главный").Range("B6:L6")
   
    NumCols = ExpRng.Columns.Count
    NumRows = ExpRng.Rows.Count
   
    link = "C:\Program Files\"
    Filename = link & "TestFile.csv"
   
    Open Filename For Append As #1
        For r = 1 To NumRows
            For c = 1 To NumCols
                Data = ExpRng.Cells(r, c).Value
                If IsNumeric(Data) Then Data = Val(Data)
                If IsEmpty(ExpRng.Cells(r, c)) Then Data = ""
                If c <> NumCols Then
                    Write #1, Data;
                Else
                    Write #1, Data
                End If
            Next c
        Next r
    Close #1
End Sub
Путей к вершине - множество. Этот один из многих!

Toha153


Toha153

#3
 А нет, не все гладко. Тут выявилась еще одна ошибка - почему-то не дает открыть параллельно другую книгу (что требуется часто делать). Участок этого кода выдает так же ошибку "runtime 9":
Set ExpRng = Worksheets("главный").Range("B6:L6")
Т.е. получается, как понимаю, конфликт книг
P.S. что еще важно уточнить - этот макрос вызывается по условию. Отсюда и проблема как понимаю - активна другая книга, а макрос работать должен в своей...

GWolf

Добрый день!

Уважаем (-ый; -ая) Toha153! Вам не кажется, что подобная постановка задачи, напоминает украинскую пословицу: Умила готуваты, та нэ вмила подаваты!? - Ну откуда, из Ваших предыдущих сообщений, нам дано было догадаться о "конфликте книг"? Вы уж, либо выкладывайте весь проект целиком, либо решайте конфликт сами. На поставленный вопрос в первом сообщении темы я, так понимаю, ответил. А вот все остальное требует для решения БОЛЬШЕ информации, т.е. проект - чтобы понять что там откуда вызывается. На этом форуме практики Excel, но увы не экстрасенсы & отелепаты!
Простите если резковат!
Путей к вершине - множество. Этот один из многих!

Toha153

#5
Цитата: GWolf от 28.08.2013, 07:17
Добрый день!

Уважаем (-ый; -ая) Toha153! Вам не кажется, что подобная постановка задачи, напоминает украинскую пословицу: Умила готуваты, та нэ вмила подаваты!? - Ну откуда, из Ваших предыдущих сообщений, нам дано было догадаться о "конфликте книг"? Вы уж, либо выкладывайте весь проект целиком, либо решайте конфликт сами. На поставленный вопрос в первом сообщении темы я, так понимаю, ответил. А вот все остальное требует для решения БОЛЬШЕ информации, т.е. проект - чтобы понять что там откуда вызывается. На этом форуме практики Excel, но увы не экстрасенсы & отелепаты!
Простите если резковат!
Добрый вечер! (-ый) Ничего страшного... Тут есть, конечно, мой недосмотр, но, поверьте, это результат излишней скрупулезности. Хотелось и правила форума соблюсти, и избавить Вас и тех, кто поможет в решении от излишней информации не нужной никому в решении проблемы и только мешающей, а так же, что самое главное, мой непрофессионализм в этой тематике - мне были не известны подобные технические нюансы. Продолжу тему.

Я прикладываю файл, как Вы просили, с добавленными функциями приводящими к проблемам в работе кода
Макрос считает секунды и в начале каждой новой минуты вызывается макрос отправки в файл. При этом, когда активна другая любая книга в этот момент - выдается ошибка
Сложность:
при открытии в момент отправки
1) любой другой книги - код выдает одну ошибку
2) файла-адресата  выдает другую ошибку
Требуется:
избавиться от всех подобных конфликтов при работе кода

P.S.
За основу счетчика времени взял где-то код. Мне не пришло в голову, как оптимальней внести туда сравнение по каждой новой минуте, но во всех вариантах в файл пишется почему-то по несколько одинаковых строк за раз. Т.е. сам макрос вызывается несколько раз? Не пойму как так выходит... Ведь новая минута приходит 1 раз... Это второй глюк. Варианты пробовал сравнения и в коде только и так, как есть сейчас, но результат один - если и считает изменения минут исправно, то в файл шлет по несколько строк одинокавых постоянно.
PS. Вторую проблему цикличности решил сейчас случайно. И как понимаю верно? Во всяком случае теперь исполняется один раз и соответственно одна строка в файле!
Application.EnableEvents = False
Application.EnableEvents = True
Но отстает на минуту почему-то...

RAN


Toha153

Цитата: RAN от 30.08.2013, 00:00
:)
За кнопочку и ThisWorkbook спасибо ) Теперь понял в чем проблема была!
А если файл адресат может быть так же открытым? Код его открывает, а как если открыт?
строка в коде:
Open Filename For Append As #1
И как проскочить в макросе открытие, если файл уже открыт?
но на 00:00:05 не отправляет, только 00:00:01
Не знаю, как лучше сделать, но то шлет больше одной строки за раз, то отстает на минуту, то первое значение на час...
Но иногда выдает верно все... Странно

GWolf

#8
ЦитироватьА если файл адресат может быть так же открытым? Код его открывает, а как если открыт?

Я в таком случае ставлю проверку. На скрепке. Не тестировал.

Добавил после теста: Если отключить ловлю ошибок, то следит за тем открыт ли файл-приемник исправно, но что делать если он открыт? - Поясните, пожалуйста.
Путей к вершине - множество. Этот один из многих!

Toha153

Цитата: GWolf от 30.08.2013, 14:43
Если отключить ловлю ошибок, то следит за тем открыт ли файл-приемник исправно, но что делать если он открыт?
В идеале продолжать запись в этот файл, но на фоне сложившихся сложностей было бы неплохо уже просто избежать ошибок и упростить. Уже хорошо. Сейчас проверил работу строчки  On Error Resume Nex. Думаю на этом остановиться. Вам и Рану спасибо огромное за помощь!

RAN

Про кнопочку не понял, а "00:00:05" осталось случайно.  :D