** [[OOobbs2/140]] [#a1aab09a] -''サマリ'': UserNameを取得したいのですが。 -''環境'': Basic -''状態'': 未解決 -''状態'': 解決 -''投稿者'': [[ろく]] -''投稿日'': 2008-09-16 (火) 15:31:09 *** 質問 [#u9017fdc] ExcelVBAで以下のように記述しているものをOOoBasicでどのように記述するかがわかりません。 ご教授いただければ幸いです。 Private Sub CommandButton1_Click() [発信者] = Application.UserName End Sub ワークシート上にあるボタンを押すと[発信者]という名前を付けたセルにExcelのオプションで指定されているユーザー名が表示されるだけなのですが・・・ よろしくお願いいたします。 *** 回答 [#z28e473c] - どこからユーザー名を取得するか迷うところですが。 ButtonPush をボタンに割り当てます。 挿入 - 名前 - 指定でセル範囲に「発信者」として名前をつけておいたセルを取得、ユーザー名を入力します。セル範囲名に使用できる文字には制限がかなりあるようで、[] などは使用不可のようです。 ユーザー名を dll から取得するか USERNAME 環境変数から取得するかどちらがいいんでしょうかねぇ・・・。 Sub ButtonPush( oEvent ) sUserName = GetCurrentUser() oDoc = ThisComponent oCellRange = oDoc.getSheets().getByIndex(0).getCellRangeByName("発信者") oCellRange.setString(sUserName) End Sub Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" _ (ByRef lpbuffer As String, nSize As Long) As Long Function GetCurrentUser() As String Dim sUserName As String If GetPathSeparator() = chr(&H5C) Then sUserName = GetUserNameWin() 'sUserName = Environ("USERNAME") Else 'sUserName = Environ("LOGNAME") sUserName = Environ("USER") End If GetCurrentUser = sUserName End Function Function GetUserNameWin() As String Dim sBuffer As String Dim lSize As Long Dim sUser As String sBuffer = Space$(260) lSize = Len(sBuffer) Call GetUserName(sBuffer, lSize) If lSize > 0 Then sUser = Left$(sBuffer, lSize) lSize = InStr(sUser, Chr$(0)) If lSize Then sUser = Left$(sUser, lSize - 1) End If Else sUser= "" End If GetUserNameWin = sUser End Function -- はにゃ? &new{2008-09-16 (火) 16:06:09}; - 素早い回答ありがとうございます! 2通りの方法とも試して(コメントアウトのところを切り替えて)みましたが何れもWindowsのログインユーザー名が出てきますね… できれば[ツール]-[オプション]-[ユーザーデータ]の姓名のテキストがほしいのですが… P.S.掲示板の使い方をよく理解してません。コレでいけるのかな? -- ろく &new{2008-09-17 (水) 08:54:31}; - あー、そっちじゃないかと思ったんですが・・。というわけで、コンフィグレーションの /org.openoffice.UserProfile/Data 以下から取得します。 - givenname: 名 - sn: 姓 - initials: イニシャル 姓 + 名の形は適当にいじってやってください。間にスペース入れるとか…。 Type UserName FamilyName As String GivenName As String End Type Sub get_name_test oUserName = GetUserName() sUserName = oUserName.FamilyName & oUserName.GivenName msgbox sUserName End Sub Function GetUserName As Object Dim oCP As Object Dim oCUA As Object Dim aProps(0) As New com.sun.star.beans.PropertyValue Dim oElementNames As Object Dim oData As Object Dim oElementNames_2 As Object Dim sHierarchicalName As String oCP = CreateUnoService( _ "com.sun.star.configuration.ConfigurationProvider" ) aProps(0).Name = "nodepath" aProps(0).Value = "/org.openoffice.UserProfile/Data" oCUA = oCP.createInstanceWithArguments( _ "com.sun.star.configuration.ConfigurationUpdateAccess", aProps ) ' アルファベット順 sParts = oCUA.getPropertyValues( Array("givenname", "sn") ) Dim oUser As UserName oUser.FamilyName = sParts(1) oUser.GivenName = sParts(0) ' ここで姓名を連結してもいい気が GetUserName = oUser End Function GetUserName 関数は上記の Declare Function と重なっているため同じモジュールに書くとエラーになります。コメントアウトなどで対処してください。 -- はにゃ? &new{2008-09-17 (水) 10:33:59}; - ありがとうございます。コレでOOo移行計画の大いなる第1歩が見えてきました! -- ろく &new{2008-09-17 (水) 14:45:26}; #comment *** 感想,コメント,メモ [#j110b361] #comment |