トップ回答者
「名前空間のステートメントが無効です」というエラー

質問
-
全くの初心者です。
以下のコードをコンパイルしたいのですが、Sub Main の箇所に
「名前空間のステートメントが無効です」というエラーがでて、どうしても修正できません。
対処法がわかれば、ぜひとも教えていただきたく。
コンパイルソフトはVisual Basic 2008を使用しています。
宜しくお願いいたします。Option Explicit
Sub Main
Dim srfApp, wks As Object
Dim inFile, xyzName, xyzDir, xyzFile, tmpFile, opts, row, y As String
Dim x() As String
Dim center(1) As Double
Dim xMin, xMax, yMin, yMax, collar(9) As Double
Dim i,j,xcnt As Integer
' Start Surfer
Set srfApp = CreateObject("Surfer.Application")
'srfApp.Visible = True
' Get the file to convert
inFile = GetFilePath("","xls","","Open Excel worksheet containing array",0)
' Need to handle cancel from file dialog
If inFile = "" Then Exit Sub
' Generate name for the temp .dat file
tmpFile = Left(inFile,Len(inFile)-4) + "_temp.dat"
' Get the output file name.
' Default to input name + "_xyz"
i = InStrRev(inFile,"\")
j = InStrRev(inFile,".")
xyzName = Mid(inFile,i+1,j-i-1) + "_xyz.dat"
xyzDir = Left(inFile,i)
xyzFile = GetFilePath(xyzName,"dat",xyzDir,"Save XYZ As",3)
' Need to handle cancel from file dialog
If xyzFile = "" Then Exit Sub
' Open the input data file
Set wks = srfApp.Documents.Open(inFile)
' Save it to a temporary .dat file and quit Surfer
wks.SaveAs(tmpFile,,srfSaveFormatCsv)
srfApp.Quit
' Open the temp .dat
Open tmpFile For Input As #1
' Open the output xyz.dat file
Open xyzFile For Output As #2
' Read the first row of X values and store in array
Line Input #1, row
xcnt = UBound(Split(row,","))
ReDim x(xcnt)
For i = 1 To xcnt
x(i) = Split(row,",")(i)
Next i
' Read through the rest of the temp.dat file and
' write x,y,z values to the output file.
Do Until EOF(1)
Line Input #1, row
y = Split(row,",")(0)
For i = 1 To xcnt
Print #2,x(i);",";y;",";Split(row,",")(i)
Next i
Loop
' Close the temp .dat and delete it.
' Close the output file
Close #1
Kill tmpFile
Close #2
End Sub
回答
-
Visual Basic 2008はオブジェクト指向の言語ですから、Sub MainはClassの中に書く必要があります。
例えば以下のようになります。Public Class 何とかクラス名
Sub Main
・
・
・
End Sub
End Class(追記)
kentahogaさんが書かれていたので気が付いたのですが、VBなのでModuleもあり得ますね。以下の対処方法のページである、名前空間のステートメントが無効です。
http://msdn.microsoft.com/ja-jp/library/5ycdx874(v=vs.90).aspxを見ると、
「このエラーを解決するには
モジュール、クラス、インターフェイス、構造体、列挙体、またはデリゲートの定義内にステートメントを移動します
」
と書かれています。ちなみに、bekkan6FさんはSub Mainを名前空間(Namespace)の位置に書かれているため、コンパイラはSub Mainを名前空間として解釈しようとしましたが、できなかったので今回のエラーを発しています。
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
- 編集済み trapemiyaModerator 2013年5月22日 2:57 追記
- 回答の候補に設定 星 睦美 2013年5月23日 5:44
- 回答としてマーク 星 睦美 2013年5月30日 1:57
-
新規でコンソールプロジェクトを作成すると、以下のようになるかと思います。
このModuleで囲まれたMainの中に、コードを記入すれば良いかと思います。
Module Module1 Sub Main() 'ここに内容を記入していく End Sub End Module
初心者の方であれば、内容が難しいかもしれませんが、以下のエラーですね。要は、VB2008ではSub Main()のさらに外側に、記述が必要ということです。
http://msdn.microsoft.com/ja-jp/library/5ycdx874(v=vs.80).aspx
すべての返信
-
Visual Basic 2008はオブジェクト指向の言語ですから、Sub MainはClassの中に書く必要があります。
例えば以下のようになります。Public Class 何とかクラス名
Sub Main
・
・
・
End Sub
End Class(追記)
kentahogaさんが書かれていたので気が付いたのですが、VBなのでModuleもあり得ますね。以下の対処方法のページである、名前空間のステートメントが無効です。
http://msdn.microsoft.com/ja-jp/library/5ycdx874(v=vs.90).aspxを見ると、
「このエラーを解決するには
モジュール、クラス、インターフェイス、構造体、列挙体、またはデリゲートの定義内にステートメントを移動します
」
と書かれています。ちなみに、bekkan6FさんはSub Mainを名前空間(Namespace)の位置に書かれているため、コンパイラはSub Mainを名前空間として解釈しようとしましたが、できなかったので今回のエラーを発しています。
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
- 編集済み trapemiyaModerator 2013年5月22日 2:57 追記
- 回答の候補に設定 星 睦美 2013年5月23日 5:44
- 回答としてマーク 星 睦美 2013年5月30日 1:57
-
新規でコンソールプロジェクトを作成すると、以下のようになるかと思います。
このModuleで囲まれたMainの中に、コードを記入すれば良いかと思います。
Module Module1 Sub Main() 'ここに内容を記入していく End Sub End Module
初心者の方であれば、内容が難しいかもしれませんが、以下のエラーですね。要は、VB2008ではSub Main()のさらに外側に、記述が必要ということです。
http://msdn.microsoft.com/ja-jp/library/5ycdx874(v=vs.80).aspx
-
ソリッドではなくてメソッドの誤りですよね。
それは置いておいて、GetFilePath等の関数本体を記述されていますか? それらの関数をコンパイラが見つけることができない状況です。 全くの初心者であることはわかりましたが、どれぐらい学習されていますか? 少なくとも基本的な知識が足りていないように思います。掲載されているコードもおそらくどこかのコードを持ってきただけで、そのコードを理解されていないのではないでしょうか? とりあえず動作させてみるというのも間違ったアプローチではないと思いますが、今の知識だとこれから大変そうです。書籍などでもう少しまとまった学習をされることをお勧めします。★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
-
trapemiyaさんに追加になりますが、
bekkan6Fさんが記述しているコードは、VB.NETのコードではなく、VB6(またはそれ以前)のコードかと思います。おそらくエラーが20個とかでて、全く理解できない状態でしょうが、今の知識だと難しいと思います。
そのコードを実行するためには、エラー箇所をVB.NETの形式に置き換える必要があります。もしくは、VB6の環境で動かす必要があります。
例えば、Line Input 部分に関しては、以下のページが参考になるかと思います。
http://www.atmarkit.co.jp/fdotnet/vb6tonet/vb6tonet07/vb6tonet07_01.html
上のページの目次はここです。
- 編集済み kentahoga 2013年5月22日 4:15
-
コンパイラに記述が必要とおっしゃられてましたが、それらの関数をコンパイラに組み込むことが必要なのでしょうか。
いえいえ、そういうことではありません。Sub Mainと書かれたように、GetFilePath、serfFormatCSV,Open,Closeの各関数も記述する必要があるということです。ただ、.NET Frameworkに最初から用意されている関数や、もしくは他の形(dllなど)で提供されている関数であれば、それを利用できるようにImportsで名前空間の指定をしたり、そのdll等を参照設定することになります。
と、書きましたが、後半の部分は理解できませんよね・・・
とりあえず、、GetFilePath、serfFormatCSV,Open,Closeのコードがあれば、それをSub Mainと同様に記述してみて下さい。★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
-
-
本当は、そのコードを利用して、xyz形式からマトリックス形式に逆の変換プログラムを作りたいのです。
このフォーラムで話す内容ではないかと思いますが、こういったことがしたいのであれば、技術計算言語のMATLABを使用すると良いかもしれません。(私は学生時代に使用していました)
よろしければ、ご参考にされて下さい。
-
bekkan6F さん、こんにちは
フォーラム オペレーターの星 睦美です。私のほうでtrapemiya さんとkentahoga さんのスレッドを[回答の候補に設定] させていただきました。
質問のエラーに関するトラブルシューティングに役立ったのではないかと思います。
今回はいろいろ参考になる情報がありそうですので、よろしければ投稿者から[回答としてマーク]いただければ幸いです。
---
回答の内容がコミュニティで役立つ内容だと思いますので、私から[回答としてマーク] させていただきました。
それでは今後ともMSDN フォーラムをよろしくお願いします。
日本マイクロソフト株式会社 フォーラム オペレーター 星 睦美
- 編集済み 星 睦美 2013年5月30日 1:59 回答としてマーク