Перенос входных данных пользователя из Word в Excel (макросы)

Я создал форму, в которой пользователь оценивает частоту определенного события (всегда, иногда, редко, никогда, Н/Д), нажимая переключатели, отображаемые в таблице. Переключатели взвешены, поэтому, если пользователь выбирает всегда, значение для этого номера вопроса равно 4 (иногда = 3 и т. д.). Мне нужно взять результаты опроса и поместить их в документ Excel, который усредняет результаты многих опросов. В настоящее время у меня есть текстовое поле, которое печатает числа в конце опроса, и я копирую и вставляю их в свой документ Excel, но я хотел бы найти лучший способ сделать это. В идеале, если бы я мог создать отдельный текстовый документ со словом, содержащим только числовые результаты опроса, которые можно импортировать в Excel, это было бы идеально. Ниже приведен пример моего кода: как вычисляются радиокнопки и как они печатаются.

Private Sub RadioButtonyj_Click()
    If RadioButtonyj.Value = True Then

        num33 = 2
    UpdateRating
    End If

End Sub

Private Sub RadioButtonnj_Click()
    If RadioButtonnj.Value = True Then


        num33 = 1
    UpdateRating
    End If

End Sub

Private Sub RadioButtonnj1_Click()
    If RadioButtonnj1.Value = True Then


        num33 = 0
    UpdateRating
    End If

End Sub

Private Sub UpdateRating()
TextBox2.Text = num1 & vbNewLine & num2 & vbNewLine & _
num3 & vbNewLine & num4 & vbNewLine & _
num5 & vbNewLine & num6 & vbNewLine & _
num7 & vbNewLine & num8 & vbNewLine & num9 & vbNewLine & num10 & vbNewLine & num11 _
& vbNewLine & num12 & vbNewLine & num13 & vbNewLine & num14 & vbNewLine _
& num15 & vbNewLine & num16 & vbNewLine & num17 & vbNewLine & num18 & vbNewLine & num19             & vbNewLine _
& num20 & vbNewLine & num21 & vbNewLine & num22 & vbNewLine & num23 & vbNewLine _
& num24 & vbNewLine & num25 & vbNewLine & num26 & vbNewLine & num27 & vbNewLine & num28         &     vbNewLine _
& num29 & vbNewLine & num30 & vbNewLine & num31 & vbNewLine & num32 & vbNewLine & num33
End Sub

Dim FS As FileSystemObject
Set FS = New FileSystemObject


Dim MyFile As TextStream
Set MyFile = FS.CreateTextFile("C:\Folder\FileName.txt")
MyFile.Write num1 & vbNewLine & num2 & vbNewLine & _
num3 & vbNewLine & num4 & vbNewLine & _
num5 & vbNewLine & num6 & vbNewLine & _
num7 & vbNewLine & num8 & vbNewLine & num9 & vbNewLine & num10 & vbNewLine & num11 _
& vbNewLine & num12 & vbNewLine & num13 & vbNewLine & num14 & vbNewLine _
& num15 & vbNewLine & num16 & vbNewLine & num17 & vbNewLine & num18 & vbNewLine & num19 & vbNewLine _
& num20 & vbNewLine & num21 & vbNewLine & num22 & vbNewLine & num23 & vbNewLine _
& num24 & vbNewLine & num25 & vbNewLine & num26 & vbNewLine & num27 & vbNewLine & num28 & vbNewLine _
& num29 & vbNewLine & num30 & vbNewLine & num31 & vbNewLine & num32 & vbNewLine & num33




If FS.FileExists("C:\Folder\FileName.txt") Then
Set MyFile = FS.CreateTextFile("C:\Folder\FileName2.txt")
End If

If FS.FileExists("C:\Folder\FileName2.txt") Then
Set MyFile = FS.CreateTextFile("C:\Folder\FileName3.txt")
End If

If FS.FileExists("C:\Folder\FileName3.txt") Then
Set MyFile = FS.CreateTextFile("C:\Folder\FileName4.txt")
End If

If FS.FileExists("C:\Folder\FileName4.txt") Then
Set MyFile = FS.CreateTextFile("C:\Folder\FileName5.txt")
End If

If FS.FileExists("C:\Folder\FileName5.txt") Then
Set MyFile = FS.CreateTextFile("C:\Folder\FileName6.txt")
End If


If FS.FileExists("C:\Folder\FileName6.txt") Then
Set MyFile = FS.CreateTextFile("C:\Folder\FileName7.txt")
End If

If FS.FileExists("C:\Folder\FileName7.txt") Then
Set MyFile = FS.CreateTextFile("C:\Folder\FileName8.txt")
End If


If FS.FileExists("C:\Folder\FileName8.txt") Then
Set MyFile = FS.CreateTextFile("C:\Folder\FileName9.txt")
End If

If FS.FileExists("C:\Folder\FileName9.txt") Then
Set MyFile = FS.CreateTextFile("C:\Folder\FileName10.txt")
End If


If FS.FileExists("C:\Folder\FileName10.txt") Then
Set MyFile = FS.CreateTextFile("C:\Folder\FileName11.txt")
End If

If FS.FileExists("C:\Folder\FileName11.txt") Then
Set MyFile = FS.CreateTextFile("C:\Folder\FileName12.txt")
End If

If FS.FileExists("C:\Folder\FileName12.txt") Then
Set MyFile = FS.CreateTextFile("C:\Folder\FileName13.txt")
End If

If FS.FileExists("C:\Folder\FileName13.txt") Then
Set MyFile = FS.CreateTextFile("C:\Folder\FileName14.txt")
End If

If FS.FileExists("C:\Folder\FileName14.txt") Then
Set MyFile = FS.CreateTextFile("C:\Folder\FileName15.txt")
End If


If FS.FileExists("C:\Folder\FileName15.txt") Then
Set MyFile = FS.CreateTextFile("C:\Folder\FileName16.txt")
End If


If FS.FileExists("C:\Folder\FileName16.txt") Then
Set MyFile = FS.CreateTextFile("C:\Folder\FileName17.txt")
End If

End Sub

person user2480367    schedule 01.07.2013    source источник
comment
вы можете попробовать изучить этот вопрос и ответ. Была викторина, сделанная в PowerPoint с экспортом результатов в текстовый файл, который вы могли сделать аналогичным образом.   -  person Kazimierz Jawor    schedule 01.07.2013
comment
@KazJaw Кажется, это было бы идеально. Я попытался добавить его в свой документ, и я не уверен, что еще мне нужно изменить, чтобы он работал с моими результатами. Я просто поместил strWhere=[информация, которую я сохранил в textbox2 выше]   -  person user2480367    schedule 01.07.2013
comment
вы что-то пропустили... если вы хотите добавить какой-то код, добавьте его в свой вопрос, а не комментируйте...   -  person Kazimierz Jawor    schedule 01.07.2013
comment
Прости за это. Я изменил свой код выше   -  person user2480367    schedule 01.07.2013


Ответы (1)


Чтобы открыть и работать с Excel через VBA внутри Word, перейдите в редактор VBA:

Tools > References... > add Microsoft Excel <some version> Object Library

Так же, как уже есть соответствующий Microsoft Word <some version> Object Library, уже упомянутый вместе с Microsoft Office <some version> Object Library и некоторыми другими.

Затем вы сможете использовать объекты Excel в коде, например:

Dim ExApp as Excel.Application
Set ExApp = new Excel.Application

'Workbooks represent excel files
Dim MyBook as Workbook
Set MyBook = ExApp.Workbooks.Open(filename) 'or .Add and other options

'Worksheets represente excel sheets
Dim MySheet as Worksheet
Set MySheet = MyBook.Worksheets(some name or index)

'Ranges represent cells or a range of cells
Dim MyCell as Excel.Range 
Set MyCell = MySheet.Range("A1") 'or .Cells(1,1) and others

'Notice that excel application will remain invisible until you do this
ExApp.Visible = true

Чтобы получить более подробный ответ об импорте некоторых данных из Word в Excel, перейдите по ссылке: Импорт определенных данных из Word в Excel

Чтобы создать простой текстовый файл, перейдите и добавьте ссылку на:

Microsoft.Scripting.Runtime

Это позволит вам работать с FileSystemObject, File, Folder и другими. В FileSystemObject есть метод CreateTextFile, который поможет вам в этом.

Dim FS as FileSystemObject
Set FS = new FileSystemObject

Dim MyFile As TextStream
Set MyFile = FS.CreateTextFile("C:\Folder\FileName.txt")

Затем вы можете пойти дальше в методах добавления строк и их сохранения.

Чтобы проверить, существует ли файл и не перезаписать его, выполните следующий цикл:

Dim FS As FileSystemObject
Dim MyFile As TextStream
Dim i As Integer
Dim FilePrefix As String, FileName As String, Extension As String

FilePrefix = "C:\Folder\FileName"
Extension = ".txt"
i = 1

FileName = FilePrefix & Trim(Str(i)) & Extension
Do While (FS.FileExists(FileName))
    i = i + 1
    FileName = FilePrefix & Trim(Str(i)) & Extension
Loop

Set MyFile = FS.CreateTextFile(FileName)

'Do the writings

Обратите внимание, что вам не нужно создавать все файлы, просто создайте новый после того, как вы проверили его существование. И делать записи только после установки MyFile

person Daniel Möller    schedule 01.07.2013
comment
Я думаю, что было бы лучше создать файл .txt, потому что пользователь должен отправить нам результаты, чтобы мы могли создать полный отчет, используя эту информацию. Единственная проблема с этим методом заключается в том, как пользователь сможет проходить опрос несколько раз, не перезаписывая результаты? - person user2480367; 01.07.2013
comment
У FileSystemObject также есть метод FileExists для проверки существования файла. Если это так, вы можете дать ему другое имя, например filename2, и продолжить тестирование в цикле. Если существует Filename2, перейдите к filename3 и так далее. - person Daniel Möller; 01.07.2013
comment
Спасибо за вашу помощь. Код, который я добавил, создает все файлы одновременно, но записывает только первый. Как бы я изменил это? - person user2480367; 01.07.2013