Top > OOobbs2 > 140
** [[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

Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup   Help   RSS of recent changes