0

Word ドキュメントをユーザーからの入力として受け取り、セクションごとにドキュメントを分割し、セクションごとに新しいドキュメントを作成する VB フォームを開発しています。私は次の問題に直面しています。1. word doc でマクロとして実行されるコードを新しいプロジェクトに適用しています。次のようなエラーが表示されます

'Application' is ambiguous, imported from the namespaces or types 'Microsoft.Office.Interop.Word, System.Net.Mime.MediaTypeNames'.
'wdStory' is not declared. It may be inaccessible due to its protection level.
Reference to a non-shared member requires an object reference.
'wdStyleHeading1' is not declared. It may be inaccessible due to its protection level.
'wdFindStop' is not declared. It may be inaccessible due to its protection level.
Reference to a non-shared member requires an object reference.
Reference to a non-shared member requires an object reference.
'wdSectionBreakContinuous' is not declared. It may be inaccessible due to its protection level.
'Application' is ambiguous, imported from the namespaces or types 'Microsoft.Office.Interop.Word, System.Net.Mime.MediaTypeNames'.
Reference to a non-shared member requires an object reference.
Reference to a non-shared member requires an object reference.
'wdLine' is not declared. It may be inaccessible due to its protection level.
'wdExtend' is not declared. It may be inaccessible due to its protection level.
'wdCharacter' is not declared. It may be inaccessible due to its protection level.
'ChangeFileOpenDirectory' is not declared. It may be inaccessible due to its protection level.
'Application' is ambiguous, imported from the namespaces or types 'Microsoft.Office.Interop.Word, System.Net.Mime.MediaTypeNames'.

それらはすべて同様のエラーだと思いますが、sm インポート ライブラリがありませんか? 明示的にインポートする必要があるライブラリ/クラスを教えてください。また、以下のコードを見つけてください。

Imports System.Net.Mime.MediaTypeNames
Imports System.Runtime.InteropServices
Imports Word = Microsoft.Office.Interop.Word
Imports Microsoft.Office.Interop.Word

Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    If TextBox1.Text = "" Then
        MessageBox.Show("Enter a valid file Name", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)

    End If
    Dim filextn As String = Nothing
    Dim myfile As String = Nothing

    myfile = TextBox1.Text ' not working

    Dim oWord As New Word.Application
    Dim odoc As New Word.Document
    Dim DocNum As Integer
    Dim onewword As Word.Application
    Dim onewdoc As Word.Document

    'Start Word and open the document template.
    odoc = oWord.Documents.Open("C:\Users\jy11125t\Desktop\MachineLearning\Doc\1.docx")
    oWord.WindowState = Word.WdWindowState.wdWindowStateNormal
    oWord.Visible = True

    ' Used to set criteria for moving through the document by section.
    Dim iParagraph As Word.Paragraph
    Dim sel As Word.Selection

    ' Inserting section break after every section in the open word doc
    Application.ScreenUpdating = False
    Selection.HomeKey(Unit:=wdStory)
    With Selection.Find
    .ClearFormatting()
    .Replacement.ClearFormatting()
    .Format = True
    ' You can specify another style if you like
    .Style = odoc.Styles(wdStyleHeading1)
    .Forward = True
    .Wrap = wdFindStop
    Do While .Execute
        Selection.Collapse()
        If Selection.Start > 0 Then
            Selection.InsertBreak(Type:=wdSectionBreakContinuous)
            End If
            .Execute()
        Loop
    End With
    Application.ScreenUpdating = True


    ' Application.Browser.Target = wdBrowseSection

    'A mail merge document ends with a section break next page.
    'Subtracting one from the section count stop error message.
    For i = 1 To ((onewdoc.Sections.Count) - 1)

        'Note: If a document does not end with a section break,
        'substitute the following line of code for the one above:
        'For I = 1 To ActiveDocument.Sections.Count

        'Select and copy the section text to the clipboard.
        onewdoc.Bookmarks("\Section").Range.Copy()
        'For Each iParagraph In Word.Selection.Paragraphs
        'If iParagraph.Style = ActiveDocument.Styles("Heading 1") Then
        ' filenam = iParagraph.Range.Text
        ' filenam = Left(filenam, Len(filenam) - 1)
        ' End If

        'Create a new document to paste text from clipboard.
        onewword = CreateObject("Word.Application")
        onewword.Visible = True
        onewdoc = onewword.Documents.Add
        onewdoc.paste()

        Documents.Add()
        Selection.Paste()

        ' Removes the break that is copied at the end of the section, if any.
        Selection.MoveUp(Unit:=wdLine, Count:=1, Extend:=wdExtend)
        Selection.Delete(Unit:=wdCharacter, Count:=1)
        ChangeFileOpenDirectory("C:\Users\jy11125t\Desktop\MachineLearning\Doc\Split_files")
        DocNum = DocNum + 1
        onewdoc.SaveAs(FileName:=DocNum & ".doc")
        onewdoc.Close()
        ' Move the selection to the next section in the document.
        Application.Browser.Next()
        'Next iParagraph
    Next i
    ' ActiveDocument.Close savechanges:=wdDoNotSaveChanges

    'Me.Close()

End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    OpenFileDialog1.ShowDialog()
    TextBox1.Text = OpenFileDialog1.FileName

End Sub
4

1 に答える 1

0

VB6 とは異なり、.NET では、Word 定数 (wdExtend、WdStory など) は、参照を追加するだけでは自動的に使用可能になりません。それら引き続き使用できますが、派生元の名前空間で修飾する必要があり、すべてが同じ場所にあるわけではありません。それらがどこにあるかを見つける最も簡単な方法は、オブジェクト ブラウザを使用して検索することです (F2 キーを押します)。例: wdStory は次の場所にあります。Microsoft.Office.Interop.Word.wdUnits.wdStory

クラス コードの外側にある共通部分をインポートすることで、ほとんどの名前空間修飾をスキップできます。

Imports Microsoft.Office.Interop.Word 

次に、各アイテムがどのブランチに属しているかを知る必要があります。

WdUnits.wdStory
WdBuiltinStyle.wdStyleHeading
WdFindWrap.wdFindStop
WdBreakType.wdSectionBreakContinuous
WdUnits.wdLine
WdMovementType.wdExtend
WdUnits.wdCharacter

もちろん、これはまだ非常に面倒に思えるかもしれません。そのため、別の方法として、定数を自分で定義し、オブジェクト ブラウザで見つけることができる値を割り当てることもできます。

Const wdStory As Integer = 6
Const wdStyleHeading1 As Integer = -2
Const wdFindStop As Integer = 0
Const wdSectionBreakContinuous As Integer = 3
Const wdLine As Integer = 5
Const wdExtend As Integer = 1
Const wdCharacter As Integer = 1
于 2012-08-13T22:28:03.190 に答える