Правильное сохранение из формы
Как более правильно сохранить данные из формы, имея следующую ситуацию.
Форма Excel и данные из формы подставляються в шаблон в той же книге Excel. Есть необходимость сохранять данные из формы для последующего возможного редактирования.
В результате:
Первый вариант - сохранять в эту же книгу на отдельную страницу
Второй вариант - сохранять во внешнюю книгу.
Извините что вопрос не особо перекликается с кодированием.
Просто если с сохранением во внешнюю возникнут проблемы из-за незнания механизма этого сохранения.
Это Хорошо, но как быть если проходит например 1 день и надо получить эти данные?
Элементарно записать в файл (проще всего - в текстовый).
Просто направление дальше докопаю)
А подскажите пожалуйста каким образом...
Просто направление дальше докопаю)
Вот самый примитивный пример работы с текстовым файлом последовательного доступа (написано на VBA для Excel):
Sub NewFile()
Dim fullName As String 'Путь к файлу и его полное имя
Dim myFile As Object 'Указатель на объект файловой системы (в нашем случае - файл)
Dim pntFile As Object 'Указатель на файл, заданный в fullName
Dim myVar1, myVar2, myVar3 'Переменные, значения которых нужно сохранить
Const ForReading = 1 'Флаг открывания файла для чтения
Const ForWriting = 2 'Флаг открывания файла для записи
'========= Пример записи в текстовый файл =========
myVar1 = 1
myVar2 = Date
myVar3 = "******"
'Задаем путь к файлу и его имя
fullName = "c:\temp\fil_name.txt"
'Инициализируем переменную типа "Объект файловой системы" (FSO)
Set myFile = CreateObject("Scripting.FileSystemObject")
'Проверяем, нет ли уже такого файла
'(если файл с таким именем уже существует,
'то он будет автоматически очищен перед началом записи)
If Not (myFile.FileExists(fullName)) Then
'Открываем файл на запись
Set pntFile = myFile.OpenTextFile(fullName, ForWriting, True)
'Построчно пишем в файл все, что хотим
pntFile.WriteLine (myVar1)
pntFile.WriteLine (myVar2)
pntFile.WriteLine (myVar3)
'Закрываем файл
pntFile.Close
'Сбрасываем значения переменных типа FSO
Set myFile = Nothing
Set pntFile = Nothing
Else
MsgBox "Такой файл уже существует"
End If
'========= Пример чтения из текстового файла =========
myVar1 = 0
myVar2 = ""
myVar3 = ""
'Инициализируем переменную типа FSO
Set myFile = CreateObject("Scripting.FileSystemObject")
'Проверяем существование файла с данными
If myFile.FileExists(fullName) Then
'Открываем файл на чтение
Set pntFile = myFile.OpenTextFile(fullName, ForReading, True)
'Построчно читаем из файла
myVar1 = pntFile.ReadLine
myVar2 = pntFile.ReadLine
myVar3 = pntFile.ReadLine
'Закрываем файл
pntFile.Close
'Сбрасываем значения переменных типа FSO
Set myFile = Nothing
Set pntFile = Nothing
'Это так, для иллюстрации
MsgBox myVar1 & vbCr & myVar2 & vbCr & myVar3
Else
MsgBox "Нет такого файла"
End If
End Sub
Можно организовать и произвольный доступ, если необходимо. Но здесь все сложнее.
В качестве справочного пособия рекомендую, например, вот это:
Гарнаев А. Самоучитель VBA.- СПб.: БХВ-Петербург, 2002.
Гарнаева купиль, тока не самоучитель а Excel 2002 разработка приложений.))
Буду изучать и пробовать))
Sub WriteInputTextFile()
iNumb = 1
iDate = Date
iText = "Then End"
iNameFile = "test.txt"
iFile = "c:\test.txt"
Open iFile For Output As #1
Write #1, iNumb
Write #1, iDate
Write #1, iText
Close #1
If iNameFile = Dir(iFile) Then
Open iFile For Input As #1
Input #1, iNumb
Input #1, iDate
Input #1, iText
Close #1
MsgBox iNumb & vbCrLf & iDate & vbCrLf & iText, , ""
Else
MsgBox "Нет такого файла", , ""
End If
End Sub
Если предыдущий код был примитивный, тогда посмотрите вот этот, попроще :
Sub WriteInputTextFile()
iNumb = 1
iDate = Date
iText = "Then End"
iNameFile = "test.txt"
iFile = "c:\test.txt"
Open iFile For Output As #1
Write #1, iNumb
Write #1, iDate
Write #1, iText
Close #1
If iNameFile = Dir(iFile) Then
Open iFile For Input As #1
Input #1, iNumb
Input #1, iDate
Input #1, iText
Close #1
MsgBox iNumb & vbCrLf & iDate & vbCrLf & iText, , ""
Else
MsgBox "Нет такого файла", , ""
End If
End Sub
Короткий код - это хорошо. Однако к этому неплохо бы кое-что добавить.
Sub WriteInputTextFile()
iNumb = 1
iDate = Date
iText = "Then End"
Dim handFile As Long
iNameFile = "test.txt"
iFile = "c:\123\test.txt"
handFile = FreeFile 'Вот это обязательно
'Ведь дискриптор #1 может быть уже занят
If iNameFile = Dir(iFile) Then 'Это тоже
'обязательно, ведь файл может быть нужен
'и не в корневом каталоге, а тот может
'и не существовать
Open iFile For Output As #handFile
Write #handFile, iNumb
Write #handFile, iDate
Write #handFile, iText
Close #handFile
Else
MsgBox "Неверный путь к файлу", , ""
End If
If iNameFile = Dir(iFile) Then
Open iFile For Input As #handFile
Input #handFile, iNumb
Input #handFile, iDate
Input #handFile, iText
Close #handFile
MsgBox iNumb & vbCrLf & iDate & vbCrLf & iText, , ""
Else
MsgBox "Нет такого файла", , ""
End If
End Sub
Я пока нахожусь в дееспособном состоянии, а посему сам буду определять, что именно должно присутствовать в моём коде, а что нет. И если бы я хотел дать клон Вашего/Гарнаева ответа, то сделал бы это самостоятельно.
А теперь, более предметно :
>Dim handFile As Long
Разве в моём коде присутствуют описания переменных, но уж если их описывать, то это надо делать грамотно, т.е.
handFile As Integer
>handFile = FreeFile 'Вот это обязательно
>'Ведь дискриптор #1 может быть уже занят
Ничто в моём коде не предполагает, что файл с этим номером открыт, но даже если предположить, что это так, то в этом случае можно использовать Reset и не забивать людям голову лишними инструкциями.
Зачем употреблять ненужные термины, к тому же с орфографическими ошибками, когда можно проще и понятнее для всех - номер файла.
>If iNameFile = Dir(iFile) Then 'Это тоже обязательно
В следующем примере, при чтении из файла, я чётко указал, как определять наличие файла в конкретной папке, так что автор вопроса поймёт, в чём дело, я не сомневаюсь. А вот почему Вы сомневаетесь в его умственных способностях, непонятно.
To Dmitrii
Я пока нахожусь в дееспособном состоянии, а посему сам буду определять, что именно должно присутствовать в моём коде, а что нет. И если бы я хотел дать клон Вашего/Гарнаева ответа, то сделал бы это самостоятельно.
А теперь, более предметно :
>Dim handFile As Long
Разве в моём коде присутствуют описания переменных, но уж если их описывать, то это надо делать грамотно, т.е.
handFile As Integer
>handFile = FreeFile 'Вот это обязательно
>'Ведь дискриптор #1 может быть уже занят
Ничто в моём коде не предполагает, что файл с этим номером открыт, но даже если предположить, что это так, то в этом случае можно использовать Reset и не забивать людям голову лишними инструкциями.
Зачем употреблять ненужные термины, к тому же с орфографическими ошибками, когда можно проще и понятнее для всех - номер файла.
>If iNameFile = Dir(iFile) Then 'Это тоже обязательно
В следующем примере, при чтении из файла, я чётко указал, как определять наличие файла в конкретной папке, так что автор вопроса поймёт, в чём дело, я не сомневаюсь. А вот почему Вы сомневаетесь в его умственных способностях, непонятно.
Извините, уважаемый pashulka. Попытаюсь исправиться:
- буду писать "дескриптор";
- не буду предлагать никому своих глупых советов.
Кстати, по поводу орфографических ошибок, это была шутка, это ведь не форум русского языка и словесности, хотя они конечно присутствовали.