Страницы: 1
RSS
Макрос VBA. Вывод текстовой строки в текстовый файл. W7-64b, Excel-2010-32b,
 
Здравствуйте, господа.  
 
Не судите строго, я не профессионал в VBA.  
Вот моя проблема. Я пишу макрос, задача которого создавать определенные текстовые строки и записывать их по очереди в текстовый файл 1.txt.  
Пытался решить эту проблему, изучая MSDN Library, но, видно, не дано мне...  
Вот какой код я "сочинил" на основе изучения MSDN Library:  
 
Public KS as String  
Public file As System.IO.StreamWriter  
 
Sub Nachalo()  
file = My.Computer.FileSystem.OpenTextFileWriter("C:\Users\OBCom\Documents\Tlf1\АТ1\Р1\ttt\1.txt", True)  
KS="Stroka1" 'на самом деле здесь и в аналогичных строках ниже используются другие операторы, формирующие нужную мне строку Не привожу их, чтобы не загружать Вас не относящейся к делу информацией...  
file.WriteLine (KS)  
KS="Stroka2"  
file.WriteLine (KS)  
Call sub Sled  
End  Sub  
 
Sub Sled()  
KS="Stroka3"  
file.WriteLine (KS)  
file.Close ("C:\Users\OBCom\Documents\Tlf1\АТ1\Р1\ttt\1.txt")  
End Sub  
 
Однако при попытке запуска макроса Nachalo() VBA "ругается":  
Compile Error    
User-defined type not defined    
 
Похоже, на моем компьютере не подключена какая-то (или какие-то) библиотеки? Или вообще это бредовый, неработоспособный  код - ?  
Прошу помощи. Буду очень признателен за подсказку.  
Спасибо.
 
А Вы точно уверены, что этот код для ВБА? Можно ссылочку, откуда это взято?
Я сам - дурнее всякого примера! ...
 
так?
 
{quote}Копирование содержимого в текстовый файл_1  
Sub Range2TXT()  
 MyFile = "C:\File.txt" 'путь к файлу  
 Open MyFile For Output As #1 'открыли для записи  
 For Each i In Selection 'листаем ячейки выделенного диапазона  
   Print #1, i 'пишем (с начала)  
 Next  
 Close #1 'закрываем  
End Sub  
Копирование содержимого в текстовый файл_2  
Sub SaveAsText()  
  Dim cell As Range  
  ' Открытие файла для сохранения (имя файла соответствует имени _  
   рабочей книги, но отличается расширением - TXT)  
  Open ThisWorkbook.Path & "\" & ThisWorkbook.Name & ".txt" _  
   For Output As #1  
  ' Запись содержимого заполненных ячеек таблицы в файл  
  For Each cell In ActiveSheet.UsedRange  
     If Not IsEmpty(cell) Then  
        Print #1, cell.Address, cell.Formula  
     End If  
  Next  
  ' Не забываем закрывать файл  
  Close #1  
End Sub  
Экспорт данных в txt  
Sub ExportAsText()  
  Dim lngRow As Long  
  Dim intCol As Integer  
 
  ' Открытие файла для сохранения  
  Open "C:\primer.txt" For Output As #1  
  ' Запись выделенной части таблицы в файл (построчно)  
  For lngRow = 1 To Selection.Rows.Count  
     ' Запись содержимого всех столбцов строки lngRow  
     For intCol = 1 To Selection.Columns.Count  
        Write #1, Selection.Cells(lngRow, intCol).Value;  
     Next intCol  
     ' Начнем новую строку в файле  
     Print #1, ""  
  Next lngRow  
  ' Не забываем закрыть файл  
  Close #1  
End Sub  
 
Sub ImportText()  
  Dim strLine As String         ' Одна строка файла  
  Dim strCurChar As String * 1  ' Анализируемый символ строки файла  
  Dim strValue As String        ' Значение для записи в ячейку  
  Dim lngRow As Long            ' Номер текущей строки  
  Dim intCol As Integer         ' Номер текущего столбца  
  Dim i As Integer  
 
  ' Открытие импортируемого файла  
  Open "C:\primer.txt" For Input As #1  
  ' Считываем все строки файла и записываем данные, разделенные _  
   запятой, в ячейки таблицы (начиная с текущей ячейки)  
  Do Until EOF(1)  
     ' Считываем строку из файла  
     Line Input #1, strLine  
     ' Разбираем считанную строку  
     For i = 1 To Len(strLine)  
        strCurChar = Mid(strLine, i, 1)  
        If strCurChar = "," Then  
           ' Найден разделитель столбцов - запятая. Запишем _  
            сформированное значение в ячейку  
           ActiveCell.Offset(lngRow, intCol) = strValue  
           intCol = intCol + 1  
           strValue = ""  
        ElseIf i = Len(strLine) Then  
           ' Конец строки - запишем в таблицу последнее _  
            значение в строке (перед этим дополним его последним _  
            символом строки, кроме кавычки)  
           If strCurChar <> Chr(34) Then  
              strValue = strValue & strCurChar  
           End If  
           ' Запись в таблицу  
           ActiveCell.Offset(lngRow, intCol) = strValue  
           strValue = ""  
        ElseIf strCurChar <> Chr(34) Then  
           ' Добавление символа в формируемое значение ячейки _  
            (кавычки игнорируются)  
           strValue = strValue & strCurChar  
        End If  
     Next i  
     ' Переход к новой строке таблицы  
     intCol = 0  
     lngRow = lngRow + 1  
  Loop  
  ' Закрываем файл  
  Close #1  
End Sub  
{/quote}
 
{quote}{login=KukLP}{date=02.10.2011 06:05}{thema=}{post}А Вы точно уверены, что этот код для ВБА? Можно ссылочку, откуда это взято?{/post}{/quote}  
 
АДрес: http://msdn.microsoft.com/ru-ru/library/hxwfzt61.aspx  
Раздел называется "Практическое руководство. Запись текста в файлы с помощью StreamWriter в Visual Basic". Написано, что это Visual Studio 2010. То есть, Вы хотите сказать, что VBA не является частью Visual Studio 2010? Не знал, думал, что является.
 
VBA есть и в WORD, но здесь мы говорим про EXCEL.
 
Не, это я просто наивно считал, что planetaexcel.ru - это форум по Эксел:-)    
Не является. И даже VB и VBA - вещи немного разные. Одного семейства, но - разные.  
П.С. в следующий раз, пожалуйста, не сочтите за труд подписываться под своими сообщениями. Это моя просьба.
Я сам - дурнее всякого примера! ...
 
{quote}{login=KukLP}{date=02.10.2011 07:38}{thema=}{post}Не, это я просто наивно считал, что planetaexcel.ru - это форум по Эксел:-)    
Не является. И даже VB и VBA - вещи немного разные. Одного семейства, но - разные.  
П.С. в следующий раз, пожалуйста, не сочтите за труд подписываться под своими сообщениями. Это моя просьба.{/post}{/quote}  
 
{quote}{login=KukLP}{date=02.10.2011 07:38}{thema=}{post}Не, это я просто наивно считал, что planetaexcel.ru - это форум по Эксел:-)    
Не является. И даже VB и VBA - вещи немного разные. Одного семейства, но - разные.  
П.С. в следующий раз, пожалуйста, не сочтите за труд подписываться под своими сообщениями. Это моя просьба.{/post}{/quote}  
 
Прошу прощения. Забыл поставить свой НИК. То письмо со ссылкой было от того, кому был задан Ваш вопрос, то есть от ТРР.  
 
"И даже VB и VBA - вещи немного разные. Одного семейства, но - разные."  
На мой взгляд - путаница вышла у создателей...  
Хотя, конечно, предполагаю, что где-нибудь там среди тысяч страниц на этом сайте есть пояснение по данному вопросу.  
 
Кстати, кто-нибудь замечал, что если "VBA" набрать на клавиатуре в русской раскладке, то получится "МИФ"? Мне кажется, это символично.    
В общем, МИФ, а не VBA (шутка).
 
Опять забыл в предыдущем письме поставить ник. ТРР .
 
{quote}{login=anighr}{date=02.10.2011 06:17}{thema=Re: }{post}так?{/post}{/quote}  
 
Да, похоже, что так. Спасибо.  
Нужно ли закрывать файл после каждой записи или можно закрыть его один раз, в конце модуля, когда уже все записи сделаны?
 
{quote}{login=}{date=02.10.2011 09:38}{thema=Re: Re: }{post}{quote}{login=anighr}{date=02.10.2011 06:17}{thema=Re: }{post}так?{/post}{/quote}  
 
Да, похоже, что так. Спасибо.  
Нужно ли закрывать файл после каждой записи или можно закрыть его один раз, в конце модуля, когда уже все записи сделаны?{/post}{/quote}
 
{quote}{login=}{date=02.10.2011 09:38}{thema=Re: Re: }{post}{quote}{login=anighr}{date=02.10.2011 06:17}{thema=Re: }{post}так?{/post}{/quote}  
 
Да, похоже, что так. Спасибо.  
Нужно ли закрывать файл после каждой записи или можно закрыть его один раз, в конце модуля, когда уже все записи сделаны?{/post}{/quote}  
в конце. иначе первые записи затруться.
Страницы: 1
Читают тему
Наверх