2015-11-24 4 views
1

Я запускаю цикл, который выводит строковую переменную в файл. Каждый цикл цикла изменяет строку. На некоторых циклах цикла я получаю сообщение об ошибке Неверный вызов или функция процедуры.Разрешение отклонено при попытке записи в файл

rst является набор записей таблицы, fl это объект, который я поставил как файл, например так:

Set fso = CreateObject(fileType) 
Set fl = fso.createtextfile(path) 

Это цикл:

Do Until rst.EOF 
      start = rst.Fields(fieldName)) 
      fl.writeLine start 
      rst.MoveNext 
Loop 
+0

Как объявляется «начало»? Если в данный момент это вариант, вы можете попробовать объявить его как String? И затем используйте 'start = Nz (rst.Fields (fieldName)," ")' – Andre

+0

@andre start объявлен как строка. – MJH

ответ

-1

Создать t он файл:

Dim fso as Object 
Dim f1 as Object 
Dim fileType as String 
Dim path as String 
Dim myFile as Byte 

fileType = "Scripting.FileSystemObject" 
path = "C:\myFolder\fileName" 
Set fso = CreateObject(fileType) 
Set fl = fso.createtextfile(path) 

путь - Убедитесь, что путь ведет к папке, в которую вы прочитали разрешения/записи. Насколько мне известно, следующие инструкции подходят для окон 7-10. Они, вероятно, хороши и для XP.

  1. Щелкните правой кнопкой мыши папку (в данном примере папка является «MyFolder» в дисководе C)
  2. Выберите Свойства
  3. Перейдите на вкладку Безопасность
  4. В поле под Группы или пользователи это список пользователей ПК. Системный пользователь игнорирует это. Нажмите на пользователя. Если вы являетесь администратором, вы можете нажать на Администраторы.
  5. Под Права доступа для> пользователя < список всех действий, которые могут быть сделаны с файлами, а также проверка в Разрешить столбец, если этот пользователь имеет разрешения на это действие. В противном случае проверка будет в столбце Deny.
  6. Для изменения разрешения нажмите на Edit ... кнопку, которая находится под группы или другие имена пользователей:

Убедитесь, что вы закрыть файл после его создания, чтобы включить чтение/запись.

f1.close 
set f1 = Nothing 

Теперь вы можете открыть файл и добавить строки до конца, не удаляя предыдущие строки.

myFile = FreeFile 
Open path For Output As #myFile 
Write #myFile, "Something or other " & chr(9) & variableName & rst.Fields(0).Value 
  • #myFile это имя мы даем файл в коде
  • write является команда, которая добавляет строку после последней строки в файле.

Вы можете объединить различные типы переменных с &, до тех пор, как они могут быть преобразованы implicitly к типу строки/полукокса. Я использовал:

  • строку: "something or other"
  • персонаж: chr(9), вкладка символов
  • переменная: variableName, тип строки
  • Содержимое первого поля в rst записей: rst.Fields(0).Value. В скобках rst.Fields().Value вы можете поставить 1 для второго поля, 2 для третьего поля и так далее. Или строка "columnName".

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

Close #myFile 
+1

Вам не нужно создавать файл с FSO, если вы используете команду 'Open'. Также лучше использовать метод FreeFile() для получения следующего доступного номера файла, чем предполагать' # 1' будет всегда быть свободным. Вы также можете «Открыть для добавления» вместо «Вывод» и, наконец, «Установить f1 = Nothing» не является закрытием файла, он освобождает объект из системной памяти - вместо этого вы должны использовать 'f1.Close' для этого. –

+0

@ Macro Man, Спасибо! Я отредактировал свой ответ соответственно. – MJH

1

Попробуйте использовать команду Open вместо :

Dim FF As Byte 

FF = FreeFile 

Open "C:\Users\MacroMan\SomeFolder\myTextFile.txt" For Output As #FF 
    '// Rest of code here 
    start = rst.Fields(fieldName) 
    Print #FF, start 
    '// Rest of code here 
Close #FF 
+0

Я пробовал это, но продолжаю получать сообщение о том, что у меня нет разрешения на запись в файл. Я проверил свойства файла, и у меня есть разрешение на чтение и запись в файл. – MJH

+0

Где находится файл? И правильно ли вы использовали команду 'FreeFile', прежде чем открывать файл для вывода? –

+1

Чтобы уточнить, вы должны использовать это вместо 'FileSystemObject' - если вы открыли файл с FSO, он будет заблокирован, и поэтому вы не сможете его записать. –