プロが教える店舗&オフィスのセキュリティ対策術

下記に質問したいことを記載しますので、確認し教えていただけたら幸いです。
根本から作り直したほうがいいなどの意見は控えてほしいです。
せめてどのように記載すればよいか教えていただけると助かります。
(1)パッケージの指定をできるようにしてください。
→makeEntityにパッケージ名を引数として【ファイル出力時の先頭に追加】をどこに書き方と
どこの処理の部分に入れればよいのか。
(2)ループの中で型を判断して、該当した場合追加するような動きとしてください。
import java.util.List;
import java.util.Map;
import java.util.Date;
  →ループの中で判断してから出力したいので。
85行目から89行目の出力は、Import分のあとに出力する必要。
→変数にいれて、出力する順番かえればできます。・・・81行目から、85行目くらいにPrintで直接出力している箇所。型は、type_nameで判断可能と思いますが、いかがでしょう?すごく単純な書き方の一案ですが、Date用Import文の変数を、初期値空で準備しておいて、 Date型があったら、その変数に「import java.util.Date;」って設定して最終的に 出力順を意識して、出力すれば可能かなと。
上記の書き方まったくわからないので教えていただきたい。

下記実装
Sub ボタン1_Click()
Dim strPathName AsString,strSaveAs As String
Dim strFileName AsString
Dim strPackage AsString
DimiAsLong

strPathName=Range("C2").Value&"\"
strSaveAs=Range("C3").Value&"\"
strPackage=Range("C4").Value&"\"

'フォルダの存在確認
IfDir(strPathName,vbDirectory)=""Then'
MsgBox"設計書フォルダは存在しません。",vbExclamation

EndIf

IfDir(strSaveAs,vbDirectory)=""Then'
MsgBox"コード出力フォルダは存在しません。",vbExclamation

End If

'先頭のファイル名の取得
strFileName=Dir(strPathName&"\*.xlsx")

'ファイルが見つからなくなるまで繰り返す
Do While strFileName<>""'
With Workbooks.Open(strPathName&"\"&strFileName)
Fori=1 To.Worksheets.Count
'シート名にBeanの文字がある場合、makeEntityの処理を行う。
If.Worksheets(i).NameLike"*Bean*"Then
makeEntity(strPackage)

EndIf

Next

.SaveAsstrSaveAs&strFileName
.Close

EndWith

'次のファイル名を取得
strFileName=Dir()'

Loop

End Sub

'アクティブなシートからJavaエンティティクラスを作ります
Sub makeEntity(ByVal strPackage As String)
'定数
br=vbNewLine'改行。vbCrLfだと行頭に余計な二重引用符が付く
tb=vbTab
tb2=vbTab&vbTab


'テーブル記載開始位置
x_offset=2'列
y_offset=9'行
'class_description=Cells(2,3).Value'クラスの日本語名
class_name=Cells(5,3).Value'エンティティ名
'package_name=Cells(5,3).Value'パッケージ名

'出力ファイルパス
output_path=ThisWorkbook.Path&"\"&class_name&".java"


'書き込み
'ファイルポインタを作成
fp=FreeFile
Openoutput_pathForOutputAs#fp
'Print#fp,"package"&package_name&";"

'import文はあきらめる
Print#fp,""
Print#fp,"/**"&br_
&"*"&class_description&"を表すエンティティ。"&br_
&"*/"
Print#fp,"publicclass"&class_name&"{"


'属性読み込みループ
x=x_offset
y=y_offset
str_vars=""
str_func=""
DoWhileTrue
'カラムの並び順は,左から
'日本語名称,英字名称,型
jp_name=Cells(y,x).Value
type_name=Cells(y,x+1).Value
var_name=Cells(y,x+2).Value


'終了判定
IfLen(var_name)<1Then
ExitDo
EndIf
var_name_big=SmallUnderbar2Pascal(var_name)

'member変数
str_vars=str_vars_
&tb&"/**"&br_
&tb&"*"&jp_name&"を保有する。"&br_
&tb&"*/"&br_
&tb&"private"&type_name&""&var_name&";"&br&br

'getter
str_func=str_func_
&tb&"/**"&br_
&tb&"*"&jp_name&"のgetter"&br_
&tb&"*"&br_
&tb&"*<pre>"&br_
&tb&"*<p><b>【仕様詳細】</b></p>"&br_
&tb&"*"&jp_name&"を取得します。"&br_
&tb&"*</pre>"&br_
&tb&"*"&br_
&tb&"*@author""NihonUnisys,Ltd."""&br_
&tb&"*@return"&jp_name&br_
&tb&"*/"&br_
&tb&"public"&type_name&"get"&var_name_big&"(){"&br_
&tb2&"returnthis."&var_name&";"&br_
&tb&"}"&br&br

'setter
str_func=str_func_
&tb&"/**"&br_
&tb&"*"&jp_name&"のsetter"&br_
&tb&"*"&br_
&tb&"*<pre>"&br_
&tb&"*<p><b>【仕様詳細】</b></p>"&br_
&tb&"*"&jp_name&"を設定します。"&br_
&tb&"*</pre>"&br_
&tb&"*"&br_
&tb&"*@author""NihonUnisys,Ltd."""&br_
&tb&"*@param"&var_name&""&jp_name&br_
&tb&"*/"&br_
&tb&"publicvoidset"&var_name_big&"("&type_name&""&var_name&"){"&br_
&tb2&"this."&var_name&"="&var_name&";"&br_
&tb&"}"&br&br

y=y+1
Loop

'str_vars=br&tb&"//------メンバ変数ここから------"&br&br_
'&str_vars_
'&tb&"//------メンバ変数ここまで------"&br&br
'
'str_func=br&tb&"//------getter+setterここから------"&br&br_
'&str_func_
'&tb&"//------getter+setterここまで------"&br&br

Print#fp,str_vars
Print#fp,str_func

Print#fp,"}"
Close#fp


'MsgBox"完了"
End Sub


'全小文字アンダーバー区切りの文字列を,大文字始まり区切りに変換
Function SmallUnderbar2Pascal(str)

'アンダーバーで分割
Dimarr
'splitの戻り値はバリアント型で宣言されていなければならない
arr=Split(str,"_")

Fori=0ToUBound(arr)
word=arr(i)

'1文字目は大文字に
word_head=StrConv(Mid(word,1,1),vbUpperCase)

'先頭文字のインデックスが1である点に注意
'SubStrは使わない
word_tail=Mid(word,2,Len(word)-1)

arr(i)=word_head&word_tail
Next

SmallUnderbar2Pascal=Join(arr,"")
End Function

「マクロ(VBA)について」の質問画像

A 回答 (1件)

根本から質問の仕方を考えてください。


「やりたいことは、javaのソースを自動生成したいということでしょうか?」
というような想像をさせるような質問では、回答は付きませんよ。

(1)何をしたいのか
(2)シート上にどんなデータがあるのか
(3)どんな出力結果を望んでいるのか
    • good
    • 3

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!