Home |
Search |
Today's Posts |
#1
Posted to microsoft.public.excel.programming
|
|||
|
|||
Is VBA Class have Constructor like java ?
Is VBA Class have Constructor like java ? I want New a clsStatement run
Init_ME() or other Init_xxx ? Is it possible ? Option Explicit Public StatementContent As New clsStatement Sub Start() With StatementContent StatementContent.FileNameSource = "g:\ass\ass_statement.txt" .Read_file End With End Sub '~~ Class Modules Option Explicit Public FileNameSource As String ' Statement file name Const TEMPLATE_DIRECTORY = "g:\ass\" Const TEMPLATE_NAME = "eStatement_template.xls" Const STATEMENT_DIR = "g:\ass\Statements" Private Debtor_FN As String Private Details(1024) As String Private Debtor_nbr_pos As Long Private Debtor_mail_pos As Long Public Sub Init_ME() End Sub Private Sub Init_pos() Debtor_nbr_pos = 0 Debtor_mail_pos = 0 Debtor_FN = "" End Sub Public Sub Build_file() Dim cnt As Long Dim Act As Long Dim loSheet As Variant 'MsgBox VBA.Str(Debtor_nbr_pos) '~~ Open template file Workbooks.Open FileName:=TEMPLATE_DIRECTORY + "\" + TEMPLATE_NAME Workbooks(TEMPLATE_NAME).Activate Application.Workbooks(TEMPLATE_NAME).SaveAs STATEMENT_DIR + "\" + Debtor_FN ' Workbooks("new.xls").Activate Set loSheet = Application.Workbooks(Debtor_FN).Sheets("Statement ") Act = 6 For cnt = Debtor_nbr_pos To Debtor_mail_pos loSheet.Cells(Act, 1).Value = Details(cnt) Act = Act + 1 Next Application.Workbooks(Debtor_FN).Save Application.Workbooks(Debtor_FN).Close Call Init_pos End Sub Public Sub Read_file() Dim fileNumber As Long Dim cnt As Long Dim inputVal As String Call Init_pos fileNumber = FreeFile ' get unused file number Application.StatusBar = "Reading ...." & FileNameSource Open FileNameSource For Input As #fileNumber Do While Not EOF(fileNumber) Line Input #fileNumber, inputVal cnt = cnt + 1 Details(cnt) = inputVal If VBA.Left(inputVal, 10) = "Debtor nr:" Then ' MsgBox inputVal + " " + VBA.Str(cnt) Debtor_nbr_pos = cnt Debtor_FN = VBA.Trim(VBA.Mid(inputVal, 11, VBA.Len(VBA.Trim(inputVal)) - 10) + ".xls") 'MsgBox Debtor_FN End If If VBA.Left(inputVal, 8) = "E-mail :" Then 'MsgBox inputVal + " " + VBA.Str(cnt) Debtor_mail_pos = cnt End If If Debtor_mail_pos < 0 Then Call Build_file End If Loop Close #fileNumber MsgBox cnt End Sub |
#2
Posted to microsoft.public.excel.programming
|
|||
|
|||
Is VBA Class have Constructor like java ?
In VBA there is an event generated when a class is initialized. This would be
similar to the constructor in Java. In the Class just above the code window There is a drop down with (General) in it. Switch that to Class. It will by default drop in a sub for the initialize event. other events are listed to the right of that drop down... One thing to not is that your declaration has the work new in it. That is a very inefficient way of instantiating objects. check out this link (about 2/3 the way down)... http://www.cpearson.com/excel/variables.htm -- HTH... Jim Thomlinson "moonhk" wrote: Is VBA Class have Constructor like java ? I want New a clsStatement run Init_ME() or other Init_xxx ? Is it possible ? Option Explicit Public StatementContent As New clsStatement Sub Start() With StatementContent StatementContent.FileNameSource = "g:\ass\ass_statement.txt" .Read_file End With End Sub '~~ Class Modules Option Explicit Public FileNameSource As String ' Statement file name Const TEMPLATE_DIRECTORY = "g:\ass\" Const TEMPLATE_NAME = "eStatement_template.xls" Const STATEMENT_DIR = "g:\ass\Statements" Private Debtor_FN As String Private Details(1024) As String Private Debtor_nbr_pos As Long Private Debtor_mail_pos As Long Public Sub Init_ME() End Sub Private Sub Init_pos() Debtor_nbr_pos = 0 Debtor_mail_pos = 0 Debtor_FN = "" End Sub Public Sub Build_file() Dim cnt As Long Dim Act As Long Dim loSheet As Variant 'MsgBox VBA.Str(Debtor_nbr_pos) '~~ Open template file Workbooks.Open FileName:=TEMPLATE_DIRECTORY + "\" + TEMPLATE_NAME Workbooks(TEMPLATE_NAME).Activate Application.Workbooks(TEMPLATE_NAME).SaveAs STATEMENT_DIR + "\" + Debtor_FN ' Workbooks("new.xls").Activate Set loSheet = Application.Workbooks(Debtor_FN).Sheets("Statement ") Act = 6 For cnt = Debtor_nbr_pos To Debtor_mail_pos loSheet.Cells(Act, 1).Value = Details(cnt) Act = Act + 1 Next Application.Workbooks(Debtor_FN).Save Application.Workbooks(Debtor_FN).Close Call Init_pos End Sub Public Sub Read_file() Dim fileNumber As Long Dim cnt As Long Dim inputVal As String Call Init_pos fileNumber = FreeFile ' get unused file number Application.StatusBar = "Reading ...." & FileNameSource Open FileNameSource For Input As #fileNumber Do While Not EOF(fileNumber) Line Input #fileNumber, inputVal cnt = cnt + 1 Details(cnt) = inputVal If VBA.Left(inputVal, 10) = "Debtor nr:" Then ' MsgBox inputVal + " " + VBA.Str(cnt) Debtor_nbr_pos = cnt Debtor_FN = VBA.Trim(VBA.Mid(inputVal, 11, VBA.Len(VBA.Trim(inputVal)) - 10) + ".xls") 'MsgBox Debtor_FN End If If VBA.Left(inputVal, 8) = "E-mail :" Then 'MsgBox inputVal + " " + VBA.Str(cnt) Debtor_mail_pos = cnt End If If Debtor_mail_pos < 0 Then Call Build_file End If Loop Close #fileNumber MsgBox cnt End Sub |
#3
Posted to microsoft.public.excel.programming
|
|||
|
|||
Is VBA Class have Constructor like java ?
Hi Jim
I want new class want define some constructor like java I will change Public StatementContent As New clsStatement to Public StatementContent As clsStatement set StatementContent = new clsStatement You provided link can not provide some information to me about constructor like java. Jim Thomlinson wrote: In VBA there is an event generated when a class is initialized. This would be similar to the constructor in Java. In the Class just above the code window There is a drop down with (General) in it. Switch that to Class. It will by default drop in a sub for the initialize event. other events are listed to the right of that drop down... One thing to not is that your declaration has the work new in it. That is a very inefficient way of instantiating objects. check out this link (about 2/3 the way down)... http://www.cpearson.com/excel/variables.htm -- HTH... Jim Thomlinson "moonhk" wrote: Is VBA Class have Constructor like java ? I want New a clsStatement run Init_ME() or other Init_xxx ? Is it possible ? Option Explicit Public StatementContent As New clsStatement Sub Start() With StatementContent StatementContent.FileNameSource = "g:\ass\ass_statement.txt" .Read_file End With End Sub '~~ Class Modules Option Explicit Public FileNameSource As String ' Statement file name Const TEMPLATE_DIRECTORY = "g:\ass\" Const TEMPLATE_NAME = "eStatement_template.xls" Const STATEMENT_DIR = "g:\ass\Statements" Private Debtor_FN As String Private Details(1024) As String Private Debtor_nbr_pos As Long Private Debtor_mail_pos As Long Public Sub Init_ME() End Sub Private Sub Init_pos() Debtor_nbr_pos = 0 Debtor_mail_pos = 0 Debtor_FN = "" End Sub Public Sub Build_file() Dim cnt As Long Dim Act As Long Dim loSheet As Variant 'MsgBox VBA.Str(Debtor_nbr_pos) '~~ Open template file Workbooks.Open FileName:=TEMPLATE_DIRECTORY + "\" + TEMPLATE_NAME Workbooks(TEMPLATE_NAME).Activate Application.Workbooks(TEMPLATE_NAME).SaveAs STATEMENT_DIR + "\" + Debtor_FN ' Workbooks("new.xls").Activate Set loSheet = Application.Workbooks(Debtor_FN).Sheets("Statement ") Act = 6 For cnt = Debtor_nbr_pos To Debtor_mail_pos loSheet.Cells(Act, 1).Value = Details(cnt) Act = Act + 1 Next Application.Workbooks(Debtor_FN).Save Application.Workbooks(Debtor_FN).Close Call Init_pos End Sub Public Sub Read_file() Dim fileNumber As Long Dim cnt As Long Dim inputVal As String Call Init_pos fileNumber = FreeFile ' get unused file number Application.StatusBar = "Reading ...." & FileNameSource Open FileNameSource For Input As #fileNumber Do While Not EOF(fileNumber) Line Input #fileNumber, inputVal cnt = cnt + 1 Details(cnt) = inputVal If VBA.Left(inputVal, 10) = "Debtor nr:" Then ' MsgBox inputVal + " " + VBA.Str(cnt) Debtor_nbr_pos = cnt Debtor_FN = VBA.Trim(VBA.Mid(inputVal, 11, VBA.Len(VBA.Trim(inputVal)) - 10) + ".xls") 'MsgBox Debtor_FN End If If VBA.Left(inputVal, 8) = "E-mail :" Then 'MsgBox inputVal + " " + VBA.Str(cnt) Debtor_mail_pos = cnt End If If Debtor_mail_pos < 0 Then Call Build_file End If Loop Close #fileNumber MsgBox cnt End Sub |
#4
Posted to microsoft.public.excel.programming
|
|||
|
|||
Is VBA Class have Constructor like java ?
If I understand you correctly, then no, there is no such thing.
As Jim pointed, there is the "Class_Initialize()" routine that is run when an instance is created, but you cannot call it and/or pass arguments The closest you can get is write you own Init routine and call that after instantiation. But it is the developer's responsibility to call before any other properties/methods etc. <MyClass Public Function Init (arg1 as string, arg2 as long) as long 'custom adjustment using the passed arguments end function Private Sub Class_Initialize() 'Any general creation code that is always the same End Sub </MyClass <Worksheet Dim Inst as myclass set inst=new myclass 'Class_Initialize code executed inst.Init "Somestring,1000 'Init code executed </Worksheet NickHK "moonhk" wrote in message ups.com... Hi Jim I want new class want define some constructor like java I will change Public StatementContent As New clsStatement to Public StatementContent As clsStatement set StatementContent = new clsStatement You provided link can not provide some information to me about constructor like java. Jim Thomlinson wrote: In VBA there is an event generated when a class is initialized. This would be similar to the constructor in Java. In the Class just above the code window There is a drop down with (General) in it. Switch that to Class. It will by default drop in a sub for the initialize event. other events are listed to the right of that drop down... One thing to not is that your declaration has the work new in it. That is a very inefficient way of instantiating objects. check out this link (about 2/3 the way down)... http://www.cpearson.com/excel/variables.htm -- HTH... Jim Thomlinson "moonhk" wrote: Is VBA Class have Constructor like java ? I want New a clsStatement run Init_ME() or other Init_xxx ? Is it possible ? Option Explicit Public StatementContent As New clsStatement Sub Start() With StatementContent StatementContent.FileNameSource = "g:\ass\ass_statement.txt" .Read_file End With End Sub '~~ Class Modules Option Explicit Public FileNameSource As String ' Statement file name Const TEMPLATE_DIRECTORY = "g:\ass\" Const TEMPLATE_NAME = "eStatement_template.xls" Const STATEMENT_DIR = "g:\ass\Statements" Private Debtor_FN As String Private Details(1024) As String Private Debtor_nbr_pos As Long Private Debtor_mail_pos As Long Public Sub Init_ME() End Sub Private Sub Init_pos() Debtor_nbr_pos = 0 Debtor_mail_pos = 0 Debtor_FN = "" End Sub Public Sub Build_file() Dim cnt As Long Dim Act As Long Dim loSheet As Variant 'MsgBox VBA.Str(Debtor_nbr_pos) '~~ Open template file Workbooks.Open FileName:=TEMPLATE_DIRECTORY + "\" + TEMPLATE_NAME Workbooks(TEMPLATE_NAME).Activate Application.Workbooks(TEMPLATE_NAME).SaveAs STATEMENT_DIR + "\" + Debtor_FN ' Workbooks("new.xls").Activate Set loSheet = Application.Workbooks(Debtor_FN).Sheets("Statement ") Act = 6 For cnt = Debtor_nbr_pos To Debtor_mail_pos loSheet.Cells(Act, 1).Value = Details(cnt) Act = Act + 1 Next Application.Workbooks(Debtor_FN).Save Application.Workbooks(Debtor_FN).Close Call Init_pos End Sub Public Sub Read_file() Dim fileNumber As Long Dim cnt As Long Dim inputVal As String Call Init_pos fileNumber = FreeFile ' get unused file number Application.StatusBar = "Reading ...." & FileNameSource Open FileNameSource For Input As #fileNumber Do While Not EOF(fileNumber) Line Input #fileNumber, inputVal cnt = cnt + 1 Details(cnt) = inputVal If VBA.Left(inputVal, 10) = "Debtor nr:" Then ' MsgBox inputVal + " " + VBA.Str(cnt) Debtor_nbr_pos = cnt Debtor_FN = VBA.Trim(VBA.Mid(inputVal, 11, VBA.Len(VBA.Trim(inputVal)) - 10) + ".xls") 'MsgBox Debtor_FN End If If VBA.Left(inputVal, 8) = "E-mail :" Then 'MsgBox inputVal + " " + VBA.Str(cnt) Debtor_mail_pos = cnt End If If Debtor_mail_pos < 0 Then Call Build_file End If Loop Close #fileNumber MsgBox cnt End Sub |
#5
Posted to microsoft.public.excel.programming
|
|||
|
|||
Is VBA Class have Constructor like java ?
Thank.
NickHK wrote: If I understand you correctly, then no, there is no such thing. As Jim pointed, there is the "Class_Initialize()" routine that is run when an instance is created, but you cannot call it and/or pass arguments The closest you can get is write you own Init routine and call that after instantiation. But it is the developer's responsibility to call before any other properties/methods etc. <MyClass Public Function Init (arg1 as string, arg2 as long) as long 'custom adjustment using the passed arguments end function Private Sub Class_Initialize() 'Any general creation code that is always the same End Sub </MyClass <Worksheet Dim Inst as myclass set inst=new myclass 'Class_Initialize code executed inst.Init "Somestring,1000 'Init code executed </Worksheet NickHK "moonhk" wrote in message ups.com... Hi Jim I want new class want define some constructor like java I will change Public StatementContent As New clsStatement to Public StatementContent As clsStatement set StatementContent = new clsStatement You provided link can not provide some information to me about constructor like java. Jim Thomlinson wrote: In VBA there is an event generated when a class is initialized. This would be similar to the constructor in Java. In the Class just above the code window There is a drop down with (General) in it. Switch that to Class. It will by default drop in a sub for the initialize event. other events are listed to the right of that drop down... One thing to not is that your declaration has the work new in it. That is a very inefficient way of instantiating objects. check out this link (about 2/3 the way down)... http://www.cpearson.com/excel/variables.htm -- HTH... Jim Thomlinson "moonhk" wrote: Is VBA Class have Constructor like java ? I want New a clsStatement run Init_ME() or other Init_xxx ? Is it possible ? Option Explicit Public StatementContent As New clsStatement Sub Start() With StatementContent StatementContent.FileNameSource = "g:\ass\ass_statement.txt" .Read_file End With End Sub '~~ Class Modules Option Explicit Public FileNameSource As String ' Statement file name Const TEMPLATE_DIRECTORY = "g:\ass\" Const TEMPLATE_NAME = "eStatement_template.xls" Const STATEMENT_DIR = "g:\ass\Statements" Private Debtor_FN As String Private Details(1024) As String Private Debtor_nbr_pos As Long Private Debtor_mail_pos As Long Public Sub Init_ME() End Sub Private Sub Init_pos() Debtor_nbr_pos = 0 Debtor_mail_pos = 0 Debtor_FN = "" End Sub Public Sub Build_file() Dim cnt As Long Dim Act As Long Dim loSheet As Variant 'MsgBox VBA.Str(Debtor_nbr_pos) '~~ Open template file Workbooks.Open FileName:=TEMPLATE_DIRECTORY + "\" + TEMPLATE_NAME Workbooks(TEMPLATE_NAME).Activate Application.Workbooks(TEMPLATE_NAME).SaveAs STATEMENT_DIR + "\" + Debtor_FN ' Workbooks("new.xls").Activate Set loSheet = Application.Workbooks(Debtor_FN).Sheets("Statement ") Act = 6 For cnt = Debtor_nbr_pos To Debtor_mail_pos loSheet.Cells(Act, 1).Value = Details(cnt) Act = Act + 1 Next Application.Workbooks(Debtor_FN).Save Application.Workbooks(Debtor_FN).Close Call Init_pos End Sub Public Sub Read_file() Dim fileNumber As Long Dim cnt As Long Dim inputVal As String Call Init_pos fileNumber = FreeFile ' get unused file number Application.StatusBar = "Reading ...." & FileNameSource Open FileNameSource For Input As #fileNumber Do While Not EOF(fileNumber) Line Input #fileNumber, inputVal cnt = cnt + 1 Details(cnt) = inputVal If VBA.Left(inputVal, 10) = "Debtor nr:" Then ' MsgBox inputVal + " " + VBA.Str(cnt) Debtor_nbr_pos = cnt Debtor_FN = VBA.Trim(VBA.Mid(inputVal, 11, VBA.Len(VBA.Trim(inputVal)) - 10) + ".xls") 'MsgBox Debtor_FN End If If VBA.Left(inputVal, 8) = "E-mail :" Then 'MsgBox inputVal + " " + VBA.Str(cnt) Debtor_mail_pos = cnt End If If Debtor_mail_pos < 0 Then Call Build_file End If Loop Close #fileNumber MsgBox cnt End Sub |
Reply |
Thread Tools | Search this Thread |
Display Modes | |
|
|
Similar Threads | ||||
Thread | Forum | |||
java to vba | Excel Discussion (Misc queries) | |||
Class programming - how to return chartobject from a class? | Excel Programming | |||
Class modules: parametrize class object fields | Excel Programming | |||
Little bit of Java in VB? | Excel Programming | |||
RaiseEvent from a class contained in a 2nd class collection? | Excel Programming |