- 締切済み
クラス の作成方法
以前の質問で下記の様にご教示頂いたのですが、 標記の内容がわからなくうまくいきません 初歩的な質問ではございますが、 作成方法を教えてくださいます様、よろしくお願いいたします 用意するもの 1.CSVのデータ1行を表すクラス(CsvQueueクラスとする) メンバー変数は、その1行のデータとCsvQueueクラスへのポインタ。データは面倒ならPublicでよいだろう。 メンバー関数は、PutData()とGetData()。 CsvQueueクラス Public strCsvData1 As String Public strCsvData2 As String Public strCsvData3 As String Private queNextData As CsvQueue 参考::::::::::::::::::::: Public Function PutData(ByVal q As CsvQueue) As Boolean If queNextData Is Nothing Then Set queNextData = q Exit Function End If PutData = queNextData.PutData(q) End Function Public Function GetData() As CsvData GetData = queNextData End Function CSV出力モジュール内(追加した行を++で表している) Private csvRoot As CsvData ' Nothingに初期化 Private Sub output(ByVal ofile As String) On Error GoTo trap handle = FreeFile() Open ofile For Append As #handle Do Until csvRoot Is Nothing (中略と同内容) csvRoot = csvRoot.GetData() Loop (中略) Print #handle, _ Close #handle Exit Sub trap: 'MsgBox Err.number & "," & Err.Description, vbInformation, "output" Dim csvTemp As New CsvData csvTemp.strCsvData1 = ... If csvRoot Is Nothing Then Set csvRoot = csvTemp Else csvRoot.PutData(csvTemp) End If End Sub
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- jamra
- ベストアンサー率43% (10/23)
関連するQ&A
- クラスの作成方法を教えてください
http://oshiete1.goo.ne.jp/kotaeru.php3?q=1328191 標記の内容がわからなくうまくいきません 作成したいクラスの内容 ・CSVのデータ1行を表すクラス(CsvQueueクラスとする) ・メンバー変数は、 その1行のデータとCsvQueueクラスへのポインタ。 データは面倒ならPublic。 ・メンバー関数は、 PutData()とGetData()。 CsvQueueクラス Public strCsvData1 As String Public strCsvData2 As String Public strCsvData3 As String Private queNextData As CsvQueue 初歩的な質問ではございますが、 作成方法を教えてくださいます様、よろしくお願いいたします 以下、参考::::::::::::::::::::: Public Function PutData(ByVal q As CsvQueue) As Boolean If queNextData Is Nothing Then Set queNextData = q Exit Function End If PutData = queNextData.PutData(q) End Function Public Function GetData() As CsvData GetData = queNextData End Function CSV出力モジュール内(追加した行を++で表している) Private csvRoot As CsvData ' Nothingに初期化 Private Sub output(ByVal ofile As String) On Error GoTo trap handle = FreeFile() Open ofile For Append As #handle Do Until csvRoot Is Nothing (中略と同内容) csvRoot = csvRoot.GetData() Loop (中略) Print #handle, _ Close #handle Exit Sub trap: 'MsgBox Err.number & "," & Err.Description, vbInformation, "output" Dim csvTemp As New CsvData csvTemp.strCsvData1 = ... If csvRoot Is Nothing Then Set csvRoot = csvTemp Else csvRoot.PutData(csvTemp) End If End Sub
- 締切済み
- Visual Basic
- VB6.0のクラスで、自分自身のインスタンスを作成するメリット
クラスのメソッドで、自分自身のインスタンスを作成している、コードをよく見かけます。 どんなメリットがるのでしょうか? 簡単に、クラスファイルのコードを書きました。 【A.cls】 Option Explicit Dim pstrID As Long Dim pstrName As String Public Function fncCreate() As Object Set fncCreate = New clsA '★自分自身のインスタンスを作成する End Function Public Function fncID() As Boolean pstrName = "ID" End Function Public Function fncName() As Boolean pstrName = "STRING" End Function Private Sub Class_Initialize() pstrID = 0 pstrName = "" End Sub
- ベストアンサー
- Visual Basic
- VBA ダブルクリックで行に色をつける方法
VBAでダブルクリックしたセルを含む行に色をつけたいです。 セルに色をつけるマクロは書いた(下記)のですが、これを行全体に色付けしたいのですが、 うまくいきません。 どなたかご教授ください。 Private Sub Worksheet_BeforeDoubleClick _ (ByVal Target As Range, Cancel As Boolean) If Not Application.Intersect _ (Target, Range("A3").CurrentRegion) _ Is Nothing Then With Target.Interior If .Color = vbRed Then .Color = xlNone Else .Color = vbRed End If End With Cancel = True End If End Sub よろしくお願いします。
- ベストアンサー
- その他MS Office製品
- クラスモジュールの処理
VB6.0で開発しています。 以下のようにクラスモジュールを作ったのですが フォームでコマンドボタンを押したら 処理されるようにしたいのですが どうすればいいかわかりません。 教えてください。 Class CExcel Public App Public WshShell Public ErrDescription Private WorkBook Public CurBook Private Sub Class_Initialize() Call InitSetting() End Sub Private Sub Class_Terminate() Call Quit() End Sub Public Default Function InitSetting() if IsEmpty( App ) then Set App = CreateObject("Excel.Application") end if if IsEmpty( WshShell ) then Set WshShell = CreateObject("WScript.Shell") end if App.DisplayAlerts = False Set CurBook = Nothing end function Public Function Quit() If not IsEmpty( App ) Then For Each Workbook In App.Workbooks WorkBook.Saved = True Next App.Quit Set App = Nothing App = Empty Set CurBook = Nothing End If End Function Public Property Let Visible( bFlg ) App.Visible = bFlg End Property Public Property Get Visible Visible = App.Visible End Property Public Function Open( strPath ) on error resume next Set Open = App.Workbooks.Open(strPath) if Err.Number <> 0 then Set Open = Nothing ErrDescription = Err.Description Exit Function end if on error goto 0 Set CurBook = Open ' アクティブなウィンドウを最大化 App.ActiveWindow.WindowState = xlMaximized End Function Public Function Create( strPath ) Dim nBooks App.Workbooks.Add nBooks = App.Workbooks.Count Set Create = App.Workbooks( nBooks ) Set CurBook = Create CurBook.Activate App.ActiveWindow.WindowState = xlMaximized if strPath <> "" then on error resume next CurBook.SaveAs( strPath ) if Err.Number <> 0 then MsgBox( Err.Description ) Exit Function end if on error goto 0 end if End Function Public Function Close( MyBook ) if IsObject( MyBook ) then MyBook.Saved = True MyBook.Close Set MyBook = Nothing MyBook = Empty else if CurBook is Nothing then else CurBook.Saved = True CurBook.Close Set CurBook = Nothing end if end if End Function Function Save( MyBook ) if IsObject( MyBook ) then MyBook.Save else CurBook.Save end if End Function Function SaveAs( MyBook, strPath ) if IsObject( MyBook ) then MyBook.SaveAs strPath else CurBook.SaveAs strPath end if End Function Function Load( strPath ) if not IsEmpty( App ) then MsgBox( "Excel をロードする前に、Quitを実行して下さい " ) Exit Function end if Call WshShell.Run( _ "RunDLL32.EXE shell32.dll,ShellExec_RunDLL " & _ strPath _ ) End Function End Class
- 締切済み
- Visual Basic
- クラスの初期値設定について
早速ですが、教えてください(開発環境は WindowsXP,VisualBasic.NET2003 です) Public Class CCC Private Key As Integer Private Value As String End Class 上記のようなクラスを用意して Public Sub SSS() Dim III() As CCC = New CCC() {{1, "VALUE1"}, _ {2, "VALUE2"}} End Sub といった具合に初期値を設定したいのですが、 コンパイルエラー(配列初期化子の次元が多すぎます。)に なってしまいます。(ほかに思いついた記述パターンも試してみましたがだめでした) 仕方なく、CCCに下記のようなメソッドを作って Public Class CCC Private Key As Integer Private Value As String Public Sub SetValue(ByVal a As Integer, ByVal b As String) Key = a Value = b End Sub End Class このメソッドを利用し Public Sub SSS() Dim III() As CCC III(0).SetValue(1, "VALUE1") III(1).SetValue(2, "VALUE2") End Sub 上記のように初期値を設定するようにしています。 初期化子({})をつかって、C言語?風に初期値を設定することは できないのでしょうか? 上記の例では、顕著に現れてませんが、クラスの中のクラスにも 初期値を設定しようとする場合、どのような初期値が設定されて いるかが、ソース上、整然と並ばなくなってしまい、修正しにくい 、見た目が美しくない状態になってしまいます。 何かよい方法はないのでしょうか?ご教示願います。 (参考URLだけでもかまいません、よろしくお願いします)
- ベストアンサー
- Visual Basic
- APIを使う時は参照設定は不要?
例えば Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _ (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Sub test() Dim Handle As Long Handle = FindWindow("IEFrame", vbNullString) Debug.Print Handle End Sub と言うコードでウィンドウハンドルを取得する場合、 参照設定のどこにもチェックを入れませんが、なぜ参照設定しなくても使えるのでしょうか? Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _ (ByVal lpClassName As String, ByVal lpWindowName As String) As Long が参照設定の代わりになるのですか?
- ベストアンサー
- オフィス系ソフト
- VBAでのフォルダ指定方法について
EXCELファイルが保存されているディレクトリ配下のフォルダーを指定できるようにしたくていろいろ試してみたのですが、うまくいきません。 どなたか、お知恵をお貸しください。 以下ソースです。 Private Sub CommandButton1_Click() Dim ShellApp As Object Dim oFolder As Object Dim MyPath As String MyPath = ActiveWorkbook.Path Set ShellApp = CreateObject("Shell.Application") Set oFolder = ShellApp.BrowseForFolder(0, "処理ファイルの格納フォルダ選択", 1, MyPath) If Not oFolder Is Nothing Then TextBox1.Value = oFolder.Items.Item.Path End If Set ShellApp = Nothing Set oFolder = Nothing End Sub
- 締切済み
- オフィス系ソフト
- Excel VBAフォーム 登録ボタンの作成方法
いつもお世話になっています。 初めて、Excelのフォームで入力画面を作りました。 複数の項目があって、それを最後に[登録]ボタンをクリックで 表に入れたいのですが、一度にまとめて実行する方法が分かりません。 アドバイスよろしくお願いいたします。 Private Sub cmd_1() Dim i As String If man.Value = True Then ActiveCell = man.Caption End If If woman.Value = True Then ActiveCell = woman.Caption End If ActiveCell.Offset(0, 1).Select End Sub Private Sub cmd_2() Dim i As String If man.Value = True Then ActiveCell = Yes.Caption End If If woman.Value = True Then ActiveCell = No.Caption End If ActiveCell.Offset(0, 1).Select End Sub Private Sub cmd_downlist() Dim ListNo As Long ListNo = group.ListIndex ActiveCell.Value = group.List(ListNo, i) ActiveCell.Offset(0, 1).Select End Sub Private Sub cmd_comment() ActiveCell = comment.Text ActiveCell.Offset(1, -3).Select End Sub
- 締切済み
- Visual Basic
- VB.NETで、ORACLE 8に接続するには?
現在、ローカルのmdbに接続しています。 接続先DBを同LAN上のWin2000ServerのORACE 8に変えるべくコードを修正していますが上手くいきません。 当方、ORACLEは初めてなので、接続方法がイマイチ良くわからず・・・ ちなみに、接続方法はoo4oを用いたいです。 ご教授いただけると幸いです。 ----- mdb接続で用いているコード ------ Public Function getData(ByRef table_name As String, ByRef code_name As String, ByRef extract As String, ByRef code As String) As String Dim oConn As New OleDbConnection Dim oCommand As New OleDbCommand Dim oDataReader As OleDbDataReader Try oConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + Application.StartupPath + "\XXXXX.mdb" oCommand.Connection = oConn oCommand.CommandText = "SELECT * FROM " + table_name + " ORDER BY " + code_name oConn.Open() oDataReader = oCommand.ExecuteReader() While oDataReader.Read() If code = CStr(oDataReader(code_name)) Then getData = CStr(oDataReader(extract)) Exit While End If End While ・ ・(省略) ・ Finally If Not oDataReader Is Nothing Then oDataReader.Close() End If If Not oConn Is Nothing Then oConn.Close() End If End Try End Function
- ベストアンサー
- Visual Basic
- エクセルのマクロ
セルの値が変わったら動くマクロですが、2つ書くとエラーが出ます。 どのように直したらいいでしょうか? Private Sub Worksheet_Change(ByVal Target As Range) Select Case Target.Address If Intersect(Target, Range("EK22")) Is Nothing Then Exit Sub Else Range("EK24:EM28").Select Selection.ClearContents End If End Sub Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("EK24")) Is Nothing Then Exit Sub Else Range("EK27:EM28").Select Selection.ClearContents End If End Sub
- ベストアンサー
- Excel(エクセル)